백엔드 개발 · 심화
Redis의 RDB와 AOF 지속성(persistence) 메커니즘의 장단점을 비교하고, 데이터 손실을 최소화하면서 고가용성(High Availability) 및 재해 복구(Disaster Recovery)를 보장하기 위한 아키텍처 설계 방안(예: Redis Sentinel, Redis Cluster와 연동)을 설명해 주세요.
힌트 · RDB의 스냅샷 방식, AOF의 로그 방식 차이를 설명하고, Sentinel의 자동 페일오버, Cluster의 데이터 분산 및 복제 기능을 활용한 DR 전략을 언급하세요.
RDBAOFRedis SentinelRedis Cluster데이터 손실
모범답안
Redis의 RDB와 AOF는 각각 장단점이 있는 지속성 메커니즘입니다. RDB는 특정 시점의 데이터를 스냅샷으로 저장하여 복구 속도가 빠르지만, 마지막 스냅샷 이후의 데이터는 손실될 수 있습니다. 반면 AOF는 모든 쓰기 연산을 로그로 기록하여 데이터 손실을 최소화할 수 있지만, 로그 크기가 커질 수 있고 복구 속도가 RDB보다 느립니다.
데이터 손실을 최소화하고 고가용성을 보장하기 위해 RDB와 AOF를 함께 사용하는 것이 좋습니다. 또한 Redis Sentinel을 사용하여 마스터 노드에 장애가 발생했을 때 자동으로 페일오버를 수행하도록 구성할 수 있습니다. Redis Cluster를 사용하면 데이터를 여러 노드에 분산 저장하고 복제하여 데이터 손실을 방지하고 읽기/쓰기 성능을 향상시킬 수 있습니다. 재해 복구를 위해서는 다른 지역에 Redis Cluster를 구축하고 데이터를 비동기적으로 복제하는 방안을 고려할 수 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 캐시 (Redis) 면접 질문
- Redis의 maxmemory-policy 설정이 서비스의 데이터 접근 패턴 및 메모리 사용량에 미치는 영향을 심층적으로 분석하고, 특정 워크로드(예: 실시간 랭킹, 세션 관리)에 최적화된 정책을 선택하기 위한 기준과 추가적인 성능 튜닝 방안(예: maxmemory-samples, 데이터 구조 선택)을 설명해 주세요.
- Redis 캐시 업데이트 시 발생하는 경쟁 조건(Race Condition) 문제를 방지하기 위해 어떤 방법들을 사용할 수 있으며, 특히 복잡한 로직을 원자적으로 실행해야 할 경우 Redis의 Lua 스크립트를 어떻게 활용할 수 있는지 구체적인 예시와 함께 설명해 주세요.
- 서비스 시작 직후 또는 특정 캐시 키 만료 시점에 다수의 요청이 동시에 캐시 미스(cache miss)를 발생시켜 백엔드 시스템에 과부하를 주는 Cache Stampede(또는 Thundering Herd) 문제를 해결하기 위한 고급 전략들을 설명해 주세요.
- Redis에서 특정 키(Hot Key)에 대한 접근이 집중되거나, 매우 큰 키(Big Key)가 존재할 때 발생할 수 있는 성능 문제(예: 네트워크 대역폭 소모, CPU 부하)를 설명하고, 이를 진단하고 완화하기 위한 구체적인 방법들을 제시해 주세요.