백엔드 개발 · 중급
캐시 스탬피드(Cache Stampede) 또는 썬더링 허드(Thundering Herd) 현상이 무엇인지 설명하고, 이로 인해 시스템에 어떤 문제가 발생할 수 있는지, 그리고 이를 방지하기 위한 기술적인 해결책은 무엇인지 설명해 주세요.
힌트 · 캐시 만료 시점에 많은 요청이 동시에 DB로 전달되는 상황을 방지하기 위한 뮤텍스(Mutex), probabilistic early expiration 등의 방법을 설명합니다.
캐시 만료경쟁 조건분산 락확률적 지수 백오프캐시 채우기
모범답안
캐시 스탬피드, 또는 썬더링 허드 현상은 캐시에 저장된 데이터가 만료되었을 때, 동시에 많은 요청이 발생하여 데이터베이스와 같은 원본 서버에 과부하가 걸리는 상황을 말합니다. 마치 짐승 떼가 한꺼번에 몰려드는 모습과 같다고 해서 붙여진 이름입니다.
이 현상이 발생하면 시스템 응답 시간이 급격히 느려지거나, 심한 경우 서버가 다운될 수도 있습니다.
이를 방지하기 위한 해결책으로는 여러 가지가 있습니다. 첫째, 캐시 갱신 시점에 경쟁 조건을 막기 위해 분산 락(Distributed Lock)을 사용할 수 있습니다. 둘째, 모든 요청이 동시에 캐시를 갱신하려 하지 않도록 확률적 지수 백오프(Probabilistic Exponential Backoff)를 적용할 수 있습니다. 셋째, 캐시 만료 시간을 무작위로 분산시켜 요청이 특정 시점에 몰리는 것을 방지하는 방법도 있습니다. 마지막으로, 캐시가 만료되기 전에 미리 갱신하는 방식도 고려해볼 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- Redis의 영속성(Persistence)을 제공하는 RDB와 AOF 방식의 동작 원리, 장단점을 비교하고, 데이터 유실 허용 범위와 복구 속도 관점에서 어떤 상황에 어떤 방식을 선택해야 하는지 설명해 주세요.
- Redis Sentinel은 무엇이며, 어떤 문제를 해결하기 위해 사용되는지 설명해 주세요. 또한, Sentinel이 제공하는 고가용성(High Availability) 기능과 동작 방식에 대해 구체적으로 설명해 주세요.
- 분산 환경에서 캐시를 사용할 때 발생할 수 있는 데이터 불일치(Stale Data) 문제의 원인을 설명하고, 이를 해결하기 위한 일반적인 방법들을 제시해 주세요.
- 분산 환경에서 Redis 캐시를 사용할 때, 데이터 일관성을 유지하기 위한 전략과 발생할 수 있는 문제점(예: stale data)을 설명하고, 이를 해결하기 위한 구체적인 방안들을 제시해 주세요.
- 대규모 트래픽을 처리하는 서비스에서 Redis Cluster를 구축한다고 가정할 때, 데이터 샤딩 전략(예: 해시 태그) 선택 기준과 특정 키가 특정 슬롯에 할당되도록 제어하는 방법, 그리고 클러스터 재편성(resharding) 시 발생할 수 있는 성능 저하를 최소화하는 방안에 대해 설명해 주세요.
- Redis의 maxmemory-policy 설정이 서비스의 데이터 접근 패턴 및 메모리 사용량에 미치는 영향을 심층적으로 분석하고, 특정 워크로드(예: 실시간 랭킹, 세션 관리)에 최적화된 정책을 선택하기 위한 기준과 추가적인 성능 튜닝 방안(예: maxmemory-samples, 데이터 구조 선택)을 설명해 주세요.