스택큐힙리스트

Redis로 읽기 부하 줄이기 – 캐시 전략 실전 가이드 본문

개발

Redis로 읽기 부하 줄이기 – 캐시 전략 실전 가이드

스택큐힙리스트 2025. 7. 11. 13:46
반응형

대규모 서비스가 일정 규모를 넘어서면 읽기 지연(latency)DB 커넥션 병목 이 성능을 좌우합니다.
네이버 D2·우아한형제들·카카오 Tech 블로그 등 국내 대형 서비스도 공통적으로 Redis 캐시 계층을 두어 읽기 부하를 80 % 이상 낮춘 사례를 공유하고 있습니다. 이번 글에서는 실전 환경에서 바로 적용할 수 있는 캐시 설계·운영 포인트를 정리했습니다.


1. 캐시를 도입할 때 꼭 체크할 것

  1. 데이터 일관성 모델
    • 최종적 일관성(Eventual Consistency)이 허용되는지, 강한 일관성이 필요한지 먼저 정의합니다.
    • 예) 실시간 잔액처럼 강한 일관성이 중요한 경우 “쓰기 경로 DB → 캐시 갱신(write-through)”를 선택합니다.
  2. 캐시 적중률(hit rate) 예측
    • Zipf 분포를 활용해 상위 10 % 키워드가 트래픽의 90 %를 차지하는지 수치로 확인해야 합니다.
    • 적중률 65 % 미만이면 네트워크 홉만 늘고 효과가 미미할 수 있습니다.
  3. DB와의 의존성 분리
    • 캐시 장애 시 DB가 모든 트래픽을 감당할 수 있도록 폴백 쿼리 한도(e.g., QPS 라이트 리밋)를 미리 걸어 둡니다.
    • Redis Sentinel·Cluster를 이용한 3 노드 이상 다중화로 싱글 포인트 문제를 제거하세요.

2. 캐시 무효화 (Invalidation) 전략


 

전략 특징 추천 상황
TTL(시간 기반) 가장 단순·효과적, 만료 뒤에 다시 로드 읽기 비율이 압도적으로 높은 게시판·랭킹
Write-through 쓰기 요청이 들어오면 DB와 캐시를 동시에 업데이트 데이터 정합성이 중요한 쇼핑몰 재고
Write-behind(Write-back) 캐시에 먼저 쓰고, 일정 주기로 DB에 반영 초당 수천 건 쓰기가 몰리는 로그·통계
Cache-aside(Lazy Loading) 애플리케이션이 먼저 캐시 조회, 미스 시 DB 로드 후 캐시 대부분의 범용 서비스 기본값
 

Tip : TTL과 Write-through를 함께 써서 만료와 즉시 갱신을 병행하면 캐시 슬로(Thundering Herd) 현상을 최소화할 수 있습니다.


3. “자주 조회되는 목록” 캐싱 패턴

  • Hot List 캐시 : 메인 화면 인기 상품·실시간 검색어처럼 상위 N개를 고정 길이 List/ Sorted Set으로 저장해 처리량을 10배 이상 향상.
  • Window 캐시 : 스크롤 페이징이 많은 경우, “현재 페이지 ±1” 범위를 Hash 또는 ZSET으로 묶어 사용자 체감 지연을 줄입니다.
  • 숫자형 랭킹 : ZINCRBY로 랭킹을 갱신하고, 필요 시 일정 간격으로 DB에 스냅샷 반영 → CPU·I/O 비용을 아끼면서도 정확도 확보.

4. 캐시가 부르는 문제와 해결책

  1. 캐시 스톰(Thundering Herd)
    • 대규모 동시 만료 → DB 폭주.
    • 해결: 랜덤 가중 TTL (초 단위 난수)·로컬 메모리 캐시 계층 추가.
  2. 데이터 불일치(탈동기화)
    • 캐시 갱신 실패, 메시지 큐 지연 등.
    • 해결: DB 변경 트리거 ↔ 캐시 무효화 알림을 이중화(MQ+Failover Topic)하고, 2차 검증 쿼리 주기적으로 돌리기.
  3. 메모리 파편화·Eviction
    • Hot key 집중으로 메모리 사용량 왜곡.
    • 해결: LFU, LRU, TTL+Random 정책 믹스, 대형 Value는 Redis JSON·@Bloom 같은 모듈로 외부화.
  4. 보안·접근 제어
    • 인증 정보가 그대로 캐시에 남을 수 있음.
    • 해결: ACL, AUTH, 전송구간 TLS, 민감 정보는 만료 시간을 짧게.

마무리

캐시는 만병통치약이 아니라 속도와 복잡성 사이의 트레이드오프입니다.
“캐시는 간단해야 한다”는 원칙 아래, 적중률·일관성·운영비용 3가지를 숫자로 계량하고 나서 설계하면 장애 스케일을 확실히 줄일 수 있습니다. 실제 운영 경험이 쌓이면 “TTL+Write-through”와 “Cache-aside+LFU” 같은 하이브리드 전략이 서비스 특성에 가장 잘 들어맞는다는 점도 확인하게 될 것입니다.

반응형
Comments