백엔드 개발 · 심화
대규모 트래픽을 처리하는 서비스에서 Redis Cluster를 구축한다고 가정할 때, 데이터 샤딩 전략(예: 해시 태그) 선택 기준과 특정 키가 특정 슬롯에 할당되도록 제어하는 방법, 그리고 클러스터 재편성(resharding) 시 발생할 수 있는 성능 저하를 최소화하는 방안에 대해 설명해 주세요.
힌트 · 키 분포 균등성, 트랜잭션 요구사항, 관리 용이성 등을 고려하며, CLUSTER ADDSLOTS, MIGRATE 명령어 및 클러스터 관리 도구 활용을 언급하세요.
Consistent HashingSlot Hash TagsRedis Cluster APIPre-splittingMigration Throttling
모범답안
대규모 트래픽 서비스에서 Redis Cluster 구축 시 데이터 샤딩 전략은 키 분포의 균등성, 트랜잭션 요구사항, 관리 용이성을 종합적으로 고려하여 결정합니다. 해시 태그는 특정 키들을 동일한 노드에 묶어 트랜잭션 일관성을 유지하는 데 유용하지만, 키 분포가 불균등해질 수 있다는 단점이 있습니다.
특정 키를 특정 슬롯에 할당하려면, Redis Cluster API의 CLUSTER ADDSLOTS 명령어를 사용하여 슬롯을 특정 노드에 할당하거나, MIGRATE 명령어를 통해 키를 수동으로 이동시킬 수 있습니다.
클러스터 재편성 시 성능 저하를 최소화하기 위해서는 사전 분할(pre-splitting)을 통해 초기 슬롯 할당을 최적화하고, MIGRATE 명령어 사용 시 THROTTLE 옵션을 활용하여 데이터 마이그레이션 속도를 조절하는 것이 중요합니다. 또한, 클러스터 관리 도구를 활용하여 재편성 과정을 모니터링하고, 점진적으로 노드를 추가/제거하는 방식을 권장합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- 분산 환경에서 캐시를 사용할 때 발생할 수 있는 데이터 불일치(Stale Data) 문제의 원인을 설명하고, 이를 해결하기 위한 일반적인 방법들을 제시해 주세요.
- 캐시 스탬피드(Cache Stampede) 또는 썬더링 허드(Thundering Herd) 현상이 무엇인지 설명하고, 이로 인해 시스템에 어떤 문제가 발생할 수 있는지, 그리고 이를 방지하기 위한 기술적인 해결책은 무엇인지 설명해 주세요.
- 분산 환경에서 Redis 캐시를 사용할 때, 데이터 일관성을 유지하기 위한 전략과 발생할 수 있는 문제점(예: stale data)을 설명하고, 이를 해결하기 위한 구체적인 방안들을 제시해 주세요.
- Redis의 maxmemory-policy 설정이 서비스의 데이터 접근 패턴 및 메모리 사용량에 미치는 영향을 심층적으로 분석하고, 특정 워크로드(예: 실시간 랭킹, 세션 관리)에 최적화된 정책을 선택하기 위한 기준과 추가적인 성능 튜닝 방안(예: maxmemory-samples, 데이터 구조 선택)을 설명해 주세요.
- Redis 캐시 업데이트 시 발생하는 경쟁 조건(Race Condition) 문제를 방지하기 위해 어떤 방법들을 사용할 수 있으며, 특히 복잡한 로직을 원자적으로 실행해야 할 경우 Redis의 Lua 스크립트를 어떻게 활용할 수 있는지 구체적인 예시와 함께 설명해 주세요.
- 서비스 시작 직후 또는 특정 캐시 키 만료 시점에 다수의 요청이 동시에 캐시 미스(cache miss)를 발생시켜 백엔드 시스템에 과부하를 주는 Cache Stampede(또는 Thundering Herd) 문제를 해결하기 위한 고급 전략들을 설명해 주세요.