백엔드 개발 · 중급
분산 환경에서 캐시를 사용할 때 발생할 수 있는 데이터 불일치(Stale Data) 문제의 원인을 설명하고, 이를 해결하기 위한 일반적인 방법들을 제시해 주세요.
힌트 · 캐시 무효화 전략, TTL 설정, 버전 관리, 메시지 큐를 통한 동기화 등 다양한 접근 방식을 고려하여 설명합니다.
캐시 일관성쓰기 정책 (Write-Through, Write-Back)캐시 무효화TTL (Time-To-Live)분산 락 (Distributed Lock)
모범답안
분산 환경에서 캐시를 사용할 때 데이터 불일치 문제는 흔히 발생합니다. 주된 원인은 여러 캐시 인스턴스가 데이터 원본과 동기화되지 못하기 때문입니다. 예를 들어, 데이터 원본이 업데이트되었지만 캐시가 즉시 갱신되지 않으면 캐시는 오래된 데이터를 반환하게 됩니다.
이 문제를 해결하기 위한 방법은 여러 가지가 있습니다. 첫째, TTL(Time-To-Live)을 설정하여 캐시된 데이터가 일정 시간 후에 자동으로 만료되도록 할 수 있습니다. 둘째, Write-Through 캐시를 사용하여 데이터가 캐시와 데이터 원본에 동시에 쓰여지도록 할 수 있습니다. 셋째, 캐시 무효화 전략을 사용하여 데이터가 변경될 때 관련 캐시 항목을 삭제할 수 있습니다. 메시지 큐를 사용하여 캐시 업데이트를 비동기적으로 처리하거나, 분산 락을 사용하여 동시 업데이트를 제어하는 방법도 있습니다. 각 방법은 시스템의 요구 사항과 성능 목표에 따라 적절하게 선택해야 합니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- Redis의 String, Hash, List, Set, Sorted Set과 같은 주요 데이터 구조 각각의 특징과 실제 서비스에서 어떤 용도로 활용될 수 있는지 구체적인 예시를 들어 설명해 주세요.
- Redis의 영속성(Persistence)을 제공하는 RDB와 AOF 방식의 동작 원리, 장단점을 비교하고, 데이터 유실 허용 범위와 복구 속도 관점에서 어떤 상황에 어떤 방식을 선택해야 하는지 설명해 주세요.
- Redis Sentinel은 무엇이며, 어떤 문제를 해결하기 위해 사용되는지 설명해 주세요. 또한, Sentinel이 제공하는 고가용성(High Availability) 기능과 동작 방식에 대해 구체적으로 설명해 주세요.
- 캐시 스탬피드(Cache Stampede) 또는 썬더링 허드(Thundering Herd) 현상이 무엇인지 설명하고, 이로 인해 시스템에 어떤 문제가 발생할 수 있는지, 그리고 이를 방지하기 위한 기술적인 해결책은 무엇인지 설명해 주세요.
- 분산 환경에서 Redis 캐시를 사용할 때, 데이터 일관성을 유지하기 위한 전략과 발생할 수 있는 문제점(예: stale data)을 설명하고, 이를 해결하기 위한 구체적인 방안들을 제시해 주세요.
- 대규모 트래픽을 처리하는 서비스에서 Redis Cluster를 구축한다고 가정할 때, 데이터 샤딩 전략(예: 해시 태그) 선택 기준과 특정 키가 특정 슬롯에 할당되도록 제어하는 방법, 그리고 클러스터 재편성(resharding) 시 발생할 수 있는 성능 저하를 최소화하는 방안에 대해 설명해 주세요.