Redis의 maxmemory-policy 설정이 서비스의 데이터 접근 패턴 및 메모리 사용량에 미치는 영향을 심층적으로 분석하고, 특정 워크로드(예: 실시간 랭킹, 세션 관리)에 최적화된 정책을 선택하기 위한 기준과 추가적인 성능 튜닝 방안(예: maxmemory-samples, 데이터 구조 선택)을 설명해 주세요.
힌트 · allkeys-lru, volatile-lfu 등 각 정책의 동작 원리와 장단점을 비교하고, 데이터 타입별 메모리 효율성 및 샘플링 횟수가 정확도에 미치는 영향을 설명하세요.
모범답안
Redis의 maxmemory-policy는 메모리 부족 시 어떤 데이터를 삭제할지 결정하는 중요한 설정입니다. 서비스의 데이터 접근 패턴과 메모리 사용량에 직접적인 영향을 미치죠.
allkeys-lru는 전체 키 중에서 가장 최근에 사용되지 않은 데이터를 삭제합니다. 캐시 히트율이 높고 데이터 접근이 균일할 때 효과적입니다. 반면 volatile-lru는 TTL이 설정된 키 중에서 LRU 방식으로 삭제하므로, 휘발성 데이터 관리에 유용합니다.
실시간 랭킹처럼 자주 업데이트되고 오래된 데이터는 빠르게 삭제되어야 하는 워크로드에는 volatile-lfu나 allkeys-lfu가 더 적합할 수 있습니다. LFU(Least Frequently Used)는 사용 빈도가 낮은 데이터를 우선적으로 삭제하여 자주 사용되는 데이터를 더 오래 보존합니다.
최적의 정책 선택 기준은 데이터의 휘발성 여부, 접근 빈도, 그리고 삭제 시 허용 가능한 데이터 손실 정도입니다.
추가적인 성능 튜닝으로는 maxmemory-samples 값을 조정하여 샘플링 정확도를 높일 수 있습니다. 샘플링 횟수가 늘어나면 LRU/LFU 알고리즘의 정확도가 향상되지만, CPU 사용량도 증가하므로 적절한 균형점을 찾아야 합니다. 또한, 해시, 리스트, 집합 등 데이터 구조 선택도 메모리 효율성에 영향을 미치므로, 각 데이터 타입의 메모리 사용 패턴을 이해하고 최적화하는 것이 중요합니다. 메모리 단편화를 줄이기 위한 노력도 병행하면 좋습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- 캐시 스탬피드(Cache Stampede) 또는 썬더링 허드(Thundering Herd) 현상이 무엇인지 설명하고, 이로 인해 시스템에 어떤 문제가 발생할 수 있는지, 그리고 이를 방지하기 위한 기술적인 해결책은 무엇인지 설명해 주세요.
- 분산 환경에서 Redis 캐시를 사용할 때, 데이터 일관성을 유지하기 위한 전략과 발생할 수 있는 문제점(예: stale data)을 설명하고, 이를 해결하기 위한 구체적인 방안들을 제시해 주세요.
- 대규모 트래픽을 처리하는 서비스에서 Redis Cluster를 구축한다고 가정할 때, 데이터 샤딩 전략(예: 해시 태그) 선택 기준과 특정 키가 특정 슬롯에 할당되도록 제어하는 방법, 그리고 클러스터 재편성(resharding) 시 발생할 수 있는 성능 저하를 최소화하는 방안에 대해 설명해 주세요.
- Redis 캐시 업데이트 시 발생하는 경쟁 조건(Race Condition) 문제를 방지하기 위해 어떤 방법들을 사용할 수 있으며, 특히 복잡한 로직을 원자적으로 실행해야 할 경우 Redis의 Lua 스크립트를 어떻게 활용할 수 있는지 구체적인 예시와 함께 설명해 주세요.
- 서비스 시작 직후 또는 특정 캐시 키 만료 시점에 다수의 요청이 동시에 캐시 미스(cache miss)를 발생시켜 백엔드 시스템에 과부하를 주는 Cache Stampede(또는 Thundering Herd) 문제를 해결하기 위한 고급 전략들을 설명해 주세요.
- Redis의 RDB와 AOF 지속성(persistence) 메커니즘의 장단점을 비교하고, 데이터 손실을 최소화하면서 고가용성(High Availability) 및 재해 복구(Disaster Recovery)를 보장하기 위한 아키텍처 설계 방안(예: Redis Sentinel, Redis Cluster와 연동)을 설명해 주세요.