Redis에서 특정 키(Hot Key)에 대한 접근이 집중되거나, 매우 큰 키(Big Key)가 존재할 때 발생할 수 있는 성능 문제(예: 네트워크 대역폭 소모, CPU 부하)를 설명하고, 이를 진단하고 완화하기 위한 구체적인 방법들을 제시해 주세요.
힌트 · redis-cli --hotkeys, redis-cli --bigkeys 같은 도구 활용, 키 분할(sharding), 데이터 구조 최적화, Read Replica 활용, 캐시 계층 추가 등을 고려하세요.
모범답안
네, Redis에서 Hot Key와 Big Key로 인한 성능 문제와 해결 방안에 대해 설명드리겠습니다.
Hot Key는 특정 키에 대한 요청이 집중되어 해당 키를 처리하는 Redis 인스턴스에 과부하를 유발합니다. 이로 인해 네트워크 대역폭이 소모되고 CPU 사용률이 높아져 응답 지연이나 서비스 장애로 이어질 수 있습니다. Big Key는 단일 키가 너무 많은 데이터를 포함하고 있어, 해당 키를 읽거나 쓸 때 많은 네트워크 트래픽과 메모리 사용량을 발생시켜 성능 저하를 일으킵니다.
이러한 문제를 진단하기 위해 redis-cli --hotkeys 명령어를 사용하여 Hot Key를 파악하고, redis-cli --bigkeys 명령어로 Big Key를 탐지할 수 있습니다.
해결 방안으로는 다음과 같은 방법들을 고려할 수 있습니다.
첫째, Hot Key의 경우, 해당 키에 대한 요청을 여러 Redis 인스턴스로 분산시키는 키 분할(sharding) 전략을 적용할 수 있습니다. Redis Cluster를 활용하면 이를 자동화할 수 있습니다.
둘째, Big Key의 경우, 데이터 구조를 최적화하여 단일 키에 너무 많은 데이터가 집중되지 않도록 합니다. 예를 들어, 큰 해시나 리스트 대신 여러 개의 작은 키로 분리하거나, Redis의 Sorted Set이나 Set과 같은 효율적인 데이터 구조를 활용하는 것을 고려할 수 있습니다.
셋째, 읽기 요청이 많은 Hot Key의 경우, Read Replica를 활용하여 읽기 부하를 분산시키는 것도 효과적입니다.
넷째, 캐시 계층을 추가하여 자주 사용되는 데이터를 메모리 상위 계층에 두거나, 캐시 미스 발생 시에도 빠르게 데이터를 가져올 수 있도록 설계하는 것도 중요합니다.
이러한 방법들을 통해 Redis의 성능을 안정적으로 유지하고 확장성을 확보할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- Redis 캐시 업데이트 시 발생하는 경쟁 조건(Race Condition) 문제를 방지하기 위해 어떤 방법들을 사용할 수 있으며, 특히 복잡한 로직을 원자적으로 실행해야 할 경우 Redis의 Lua 스크립트를 어떻게 활용할 수 있는지 구체적인 예시와 함께 설명해 주세요.
- 서비스 시작 직후 또는 특정 캐시 키 만료 시점에 다수의 요청이 동시에 캐시 미스(cache miss)를 발생시켜 백엔드 시스템에 과부하를 주는 Cache Stampede(또는 Thundering Herd) 문제를 해결하기 위한 고급 전략들을 설명해 주세요.
- Redis의 RDB와 AOF 지속성(persistence) 메커니즘의 장단점을 비교하고, 데이터 손실을 최소화하면서 고가용성(High Availability) 및 재해 복구(Disaster Recovery)를 보장하기 위한 아키텍처 설계 방안(예: Redis Sentinel, Redis Cluster와 연동)을 설명해 주세요.