백엔드 개발 · 심화
분산 환경에서 Redis 캐시를 사용할 때, 데이터 일관성을 유지하기 위한 전략과 발생할 수 있는 문제점(예: stale data)을 설명하고, 이를 해결하기 위한 구체적인 방안들을 제시해 주세요.
힌트 · Write-through/back, Cache-aside 패턴의 한계, 분산 락, 버전 관리, Pub/Sub 기반 무효화 등을 고려할 수 있습니다.
캐시 무효화Write-ThroughWrite-BackRead-Through/Lazy LoadingTTL(Time-To-Live)
모범답안
분산 환경에서 Redis 캐시를 사용할 때 데이터 일관성을 유지하는 것은 중요한 과제입니다. 캐시 데이터가 원본 데이터와 달라지는 stale data 문제가 발생할 수 있기 때문입니다.
가장 기본적인 방법은 TTL(Time-To-Live)을 설정하는 것입니다. 하지만 TTL만으로는 완벽한 일관성을 보장하기 어렵습니다.
Write-Through나 Write-Back 패턴을 사용하면 데이터 변경 시 캐시에도 즉시 반영하여 일관성을 높일 수 있지만, 성능 저하를 야기할 수 있습니다. Cache-Aside 패턴은 가장 일반적이지만, 데이터 업데이트 시 캐시를 무효화하는 과정에서 경쟁 조건이 발생할 수 있습니다.
이러한 문제점을 해결하기 위해 몇 가지 전략을 고려할 수 있습니다. 첫째, 분산 락을 사용하여 캐시 업데이트 과정에서의 경쟁 조건을 방지할 수 있습니다. 둘째, 데이터에 버전 정보를 추가하여 캐시의 유효성을 검증할 수 있습니다. 셋째, Pub/Sub 기반의 캐시 무효화 시스템을 구축하여 데이터 변경 시 관련 캐시를 즉시 무효화할 수 있습니다.
각 전략은 장단점이 있으므로, 시스템의 요구사항과 트레이드오프를 고려하여 적절한 방법을 선택해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- Redis Sentinel은 무엇이며, 어떤 문제를 해결하기 위해 사용되는지 설명해 주세요. 또한, Sentinel이 제공하는 고가용성(High Availability) 기능과 동작 방식에 대해 구체적으로 설명해 주세요.
- 분산 환경에서 캐시를 사용할 때 발생할 수 있는 데이터 불일치(Stale Data) 문제의 원인을 설명하고, 이를 해결하기 위한 일반적인 방법들을 제시해 주세요.
- 캐시 스탬피드(Cache Stampede) 또는 썬더링 허드(Thundering Herd) 현상이 무엇인지 설명하고, 이로 인해 시스템에 어떤 문제가 발생할 수 있는지, 그리고 이를 방지하기 위한 기술적인 해결책은 무엇인지 설명해 주세요.
- 대규모 트래픽을 처리하는 서비스에서 Redis Cluster를 구축한다고 가정할 때, 데이터 샤딩 전략(예: 해시 태그) 선택 기준과 특정 키가 특정 슬롯에 할당되도록 제어하는 방법, 그리고 클러스터 재편성(resharding) 시 발생할 수 있는 성능 저하를 최소화하는 방안에 대해 설명해 주세요.
- Redis의 maxmemory-policy 설정이 서비스의 데이터 접근 패턴 및 메모리 사용량에 미치는 영향을 심층적으로 분석하고, 특정 워크로드(예: 실시간 랭킹, 세션 관리)에 최적화된 정책을 선택하기 위한 기준과 추가적인 성능 튜닝 방안(예: maxmemory-samples, 데이터 구조 선택)을 설명해 주세요.
- Redis 캐시 업데이트 시 발생하는 경쟁 조건(Race Condition) 문제를 방지하기 위해 어떤 방법들을 사용할 수 있으며, 특히 복잡한 로직을 원자적으로 실행해야 할 경우 Redis의 Lua 스크립트를 어떻게 활용할 수 있는지 구체적인 예시와 함께 설명해 주세요.