패스잇
백엔드 개발 · 심화

서비스 시작 직후 또는 특정 캐시 키 만료 시점에 다수의 요청이 동시에 캐시 미스(cache miss)를 발생시켜 백엔드 시스템에 과부하를 주는 Cache Stampede(또는 Thundering Herd) 문제를 해결하기 위한 고급 전략들을 설명해 주세요.

힌트 · 뮤텍스 락(single flight), 확률적 캐시 만료(probabilistic early expiration), 비동기 캐시 갱신, 백오프(backoff) 전략 등을 고려하세요.

확률적 만료Early ExpirationMutex LockCache Warming백그라운드 갱신

모범답안

Cache Stampede는 캐시 미스 발생 시 다수의 요청이 동시에 백엔드 시스템에 몰려 과부하를 주는 문제입니다. 해결 전략으로는 다음과 같은 것들이 있습니다.

첫째, **Mutex Lock (Single Flight)**을 사용하여 첫 번째 요청만 백엔드에서 데이터를 가져오고, 나머지 요청은 첫 번째 요청이 완료될 때까지 기다리도록 합니다.

둘째, **확률적 만료 (Probabilistic Early Expiration)**를 적용하여 캐시 만료 시간을 약간씩 랜덤하게 조정합니다. 이를 통해 동시에 만료되는 키의 수를 줄일 수 있습니다. 예를 들어, cache.set(key, value, expire_time + random(jitter)) 와 같이 구현할 수 있습니다.

셋째, **비동기 캐시 갱신 (Background Refresh)**을 활용하여 캐시가 만료되기 전에 백그라운드에서 데이터를 갱신합니다.

넷째, 백엔드 시스템에 과부하가 걸리는 상황을 감지하고, 요청 재시도 시 백오프 (Backoff) 전략을 적용하여 재시도 간격을 점진적으로 늘려 시스템 부하를 줄일 수 있습니다.

이러한 전략들을 조합하여 상황에 맞게 적용하면 Cache Stampede 문제를 효과적으로 해결할 수 있습니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 캐시 (Redis) 면접 질문

← 캐시 (Redis) 면접 질문 전체 보기