redis

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

KUKJIN LEE
KUKJIN LEE
2025년 3월 11일
546

샤딩(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가 확장 가능하지만, 데이터 일관성 문제를 고려해야 합니다!

#Redis 샤딩#해시 기반 샤딩#Redis 확장성#Redis 성능 최적화#Consistent Hashing