들어가며
지금까지 5편에 걸쳐 캐시 패턴을 다뤘습니다. 이번 마지막 편에서는 실전 시나리오별로 어떤 전략을 선택해야 하는지 정리합니다.
시나리오별 전략
1. 상품 상세 페이지
- 읽기가 대부분, 쓰기는 가끔
- 동시 조회가 많을 수 있음 (인기 상품)
- 잠깐 옛날 데이터 보여줘도 큰일 아님
| 항목 | 설정 |
|---|
| 패턴 | Cache-Aside |
| TTL | 30분 |
| 무 효화 | 수정 시 삭제 |
| Stampede 방지 | 분산락 + 캐시 워밍 (인기 상품) |
2. 카테고리별 상품 목록
- 여러 상품을 묶어서 캐싱
- 상품 하나가 수정돼도 목록 캐시 무효화 필요
- 페이지네이션 고려 필요
| 항목 | 설정 |
|---|
| 패턴 | Cache-Aside |
| TTL | 10분 (상세보다 짧게) |
| 무효화 | 상품 수정 이벤트로 카테고리 캐시 삭제 |
| 키 설계 | category:{id}:page:{page}:size:{size} |
3. 조회수 / 좋아요 수
- 쓰기가 매우 빈번
- 유실돼도 치명적이 지 않음
- 정확한 실시간 값보다 성능이 중요
| 항목 | 설정 |
|---|
| 패턴 | Write-Behind |
| Flush 주기 | 5초 (조절 가능) |
| 유실 허용 | 최대 5초분 |
| DB 부하 | 최소화 |
4. 사용자 세션 / 인증 정보
- 사용자별로 격리된 데이터
- 로그아웃/권한 변경 시 즉시 무효화 필요
- 보안상 민감할 수 있음
| 항목 | 설정 |
|---|
| 패턴 | Cache-Aside (Redis가 Primary) |
| TTL | 2시간 (비즈니스 요구사항에 따라) |
| 무효화 | 로그아웃/권한 변경 시 즉시 삭제 |
| 키 설계 | session:{sessionId}, user-sessions:{userId} |