반응형
Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 컴퓨터과학
- springboot
- 웹개발
- 데이터베이스
- I'm Sorry
- 데이터분석
- 네트워크보안
- 자료구조
- 데이터과학
- 버전관리
- 인공지능
- 프로그래밍언어
- 머신러닝
- 알고리즘
- 컴퓨터공학
- 네트워크
- 프로그래밍
- 딥러닝
- 자바스크립트
- Yes
- 보안
- 소프트웨어
- 데이터구조
- 파이썬
- 컴퓨터비전
- 클라우드컴퓨팅
- 소프트웨어공학
- 사이버보안
- 디자인패턴
- 빅데이터
Archives
- Today
- Total
스택큐힙리스트
Redis로 읽기 부하 줄이기 – 캐시 전략 실전 가이드 본문
반응형
대규모 서비스가 일정 규모를 넘어서면 읽기 지연(latency) 과 DB 커넥션 병목 이 성능을 좌우합니다.
네이버 D2·우아한형제들·카카오 Tech 블로그 등 국내 대형 서비스도 공통적으로 Redis 캐시 계층을 두어 읽기 부하를 80 % 이상 낮춘 사례를 공유하고 있습니다. 이번 글에서는 실전 환경에서 바로 적용할 수 있는 캐시 설계·운영 포인트를 정리했습니다.
1. 캐시를 도입할 때 꼭 체크할 것
- 데이터 일관성 모델
- 최종적 일관성(Eventual Consistency)이 허용되는지, 강한 일관성이 필요한지 먼저 정의합니다.
- 예) 실시간 잔액처럼 강한 일관성이 중요한 경우 “쓰기 경로 DB → 캐시 갱신(write-through)”를 선택합니다.
- 캐시 적중률(hit rate) 예측
- Zipf 분포를 활용해 상위 10 % 키워드가 트래픽의 90 %를 차지하는지 수치로 확인해야 합니다.
- 적중률 65 % 미만이면 네트워크 홉만 늘고 효과가 미미할 수 있습니다.
- 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. 캐시가 부르는 문제와 해결책
- 캐시 스톰(Thundering Herd)
- 대규모 동시 만료 → DB 폭주.
- 해결: 랜덤 가중 TTL (초 단위 난수)·로컬 메모리 캐시 계층 추가.
- 데이터 불일치(탈동기화)
- 캐시 갱신 실패, 메시지 큐 지연 등.
- 해결: DB 변경 트리거 ↔ 캐시 무효화 알림을 이중화(MQ+Failover Topic)하고, 2차 검증 쿼리 주기적으로 돌리기.
- 메모리 파편화·Eviction
- Hot key 집중으로 메모리 사용량 왜곡.
- 해결: LFU, LRU, TTL+Random 정책 믹스, 대형 Value는 Redis JSON·@Bloom 같은 모듈로 외부화.
- 보안·접근 제어
- 인증 정보가 그대로 캐시에 남을 수 있음.
- 해결: ACL, AUTH, 전송구간 TLS, 민감 정보는 만료 시간을 짧게.
마무리
캐시는 만병통치약이 아니라 속도와 복잡성 사이의 트레이드오프입니다.
“캐시는 간단해야 한다”는 원칙 아래, 적중률·일관성·운영비용 3가지를 숫자로 계량하고 나서 설계하면 장애 스케일을 확실히 줄일 수 있습니다. 실제 운영 경험이 쌓이면 “TTL+Write-through”와 “Cache-aside+LFU” 같은 하이브리드 전략이 서비스 특성에 가장 잘 들어맞는다는 점도 확인하게 될 것입니다.
반응형
'개발' 카테고리의 다른 글
Index Skip Scan과 Covering Index를 활용한 초고속 페이징 쿼리 패턴 (0) | 2025.07.11 |
---|---|
실전 튜닝 Q&A: 요청 지연 파악부터 CDN-비용, 인덱스 설계까지 한 방에! (0) | 2025.07.11 |
JVM GC 종류 완전 정리 + 실전 튜닝 가이드 (2) | 2025.07.11 |
Record vs Lombok vs AutoValue 비교 분석 (1) | 2025.07.11 |
자바 스프링 개발 시작하기 - 5일차 모던 Java 스킬업 (2) | 2025.07.11 |
Comments