Redis 샤딩(Sharding), 데이터 분산을 통한 성능 최적화

KUKJIN LEE's profile picture

KUKJIN LEE1일 전 작성

샤딩(Sharding)이란?

Redis는 기본적으로 단일 노드(싱글 인스턴스)에서 데이터를 저장하고 제공하는 인메모리 데이터베이스입니다.
하지만 데이터가 많아지고 트래픽이 증가하면 한 개의 Redis 인스턴스만으로는 한계를 가질 수 있습니다.

샤딩(Sharding)이란?
하나의 데이터베이스를 여러 개의 노드로 분할하여 저장하는 기술입니다.
Redis 샤딩을 사용하면 데이터를 여러 개의 Redis 서버에 분산 저장하여 부하를 줄이고 성능을 향상할 수 있습니다.

💡 쉽게 말하면?
샤딩은 큰 창고(데이터베이스)를 여러 개의 작은 창고(서버)로 나누어 관리하는 것과 같습니다.

 

왜 Redis 샤딩이 필요할까?

샤딩이 필요한 이유는 성능과 저장 용량의 한계를 극복하기 위해서입니다.

🔹 Redis 단일 노드의 한계

메모리 제한 – 한 개의 Redis 서버는 RAM 용량 내에서만 데이터를 저장할 수 있음
트래픽 병목 – 하나의 서버에서 모든 요청을 처리하면 속도가 저하될 수 있음
확장성 부족 – 서버 한 대로 모든 데이터를 관리하면 확장성이 낮아짐

샤딩을 적용하면?

  • 여러 개의 Redis 인스턴스가 데이터를 분산 저장하여 메모리 제한 극복

  • 여러 서버에서 트래픽을 처리하여 부하 분산 효과

  • 노드를 추가하면 수평 확장(Scalability) 가능

 

Redis 샤딩의 동작 방식

🔹 샤딩 전략(Sharding Strategies)

Redis에서 샤딩을 구현하는 방식은 여러 가지가 있습니다.
가장 많이 사용되는 두 가지 방식은 범위 기반 샤딩(Range-based Sharding)해시 기반 샤딩(Hash-based Sharding) 입니다.

범위 기반 샤딩 (Range-based Sharding)

  • 데이터 키 값의 범위를 정해 특정 노드에 저장하는 방식

  • 예를 들어, 키가 숫자로 되어 있다면:

    • Node A1~10000

    • Node B10001~20000

    • Node C20001~30000

  • 장점: 구현이 간단함

  • 단점: 특정 노드에 데이터가 몰릴 수 있음 (Hotspot 문제 발생)

💡 예제

Node A: {"user:1", "user:9999"}
Node B: {"user:10000", "user:19999"}
Node C: {"user:20000", "user:29999"}

문제점: 특정 범위에 데이터가 몰릴 경우 한 노드에 과부하 발생 가능


해시 기반 샤딩 (Hash-based Sharding)

  • 키를 해시 함수(Hash Function)를 사용하여 특정 노드에 배정하는 방식

  • 보통 Consistent Hashing(일관된 해싱) 을 사용하여 균등하게 분배

  • 장점: 특정 노드에 데이터가 몰리는 문제를 해결

  • 단점: 노드 추가/제거 시 일부 데이터가 재배치될 수 있음

💡 예제: 키를 해시 함수로 분배

hash("user:1")  % 3 = Node A
hash("user:10000") % 3 = Node B
hash("user:20000") % 3 = Node C

✅ 해시 값을 사용하면 키가 균등하게 분배되어 특정 노드로 트래픽이 몰리는 현상을 방지할 수 있습니다.

 

샤딩 구현 시 고려해야 할 점

샤딩된 환경에서는 데이터 조회 방식이 달라짐

  • 기존에는 단일 Redis 노드에서 데이터를 조회했지만, 샤딩 환경에서는 올바른 노드를 찾아 데이터를 가져와야 함

  • 이를 위해 Redis 클라이언트가 샤딩 로직을 지원해야 함

데이터 일관성(Consistency) 문제

  • 샤딩 환경에서는 데이터가 여러 노드에 분산되므로 트랜잭션(Transactions)과 Lua 스크립트 실행이 제한됨

  • Redis 클러스터 모드에서는 멀티 키 연산이 제한됨

노드 추가/제거 시 데이터 재배치 필요

  • 해시 기반 샤딩에서는 Consistent Hashing 을 사용하면 데이터 재배치 비용을 줄일 수 있음

  • 특정 노드가 장애가 발생하면, 해당 노드에 저장된 데이터를 다른 노드로 재분배해야 함

 

샤딩의 장점과 단점 정리

장점

단점

데이터 저장 용량 확장 가능

멀티 키 트랜잭션이 어려움

여러 개의 노드가 트래픽을 분산 처리

노드 장애 발생 시 복구 필요

노드 추가를 통해 수평 확장 가능

데이터 이동(Rebalancing) 필요

 
 

💡 샤딩을 적용하면 Redis가 확장 가능하지만, 데이터 일관성 문제를 고려해야 합니다!

New Tech Posts