캐싱 전략(Caching Strategy)이 잘못되면
클라이언트 측에 불필요한 데이터가 남거나,
반대로 너무 자주 서버를 호출하게 되어 캐시의 이점이 사라집니다.
따라서 어떤 데이터를, 어디에, 얼마나 오래, 어떤 조건으로 캐시할지를 신중하게 설계해야 합니다.
🧭 캐싱 전략(Caching Strategy) 종류
1. ✅ Cache-aside (Lazy loading)
필요한 데이터만 캐시에 저장하는 전략
- 동작 방식:
- 요청이 들어오면 먼저 캐시에 있는지 확인
- 없으면 DB나 서버에서 가져와 캐시에 저장
- 다음 요청부터는 캐시에서 응답
- ✅ 장점: 불필요한 데이터 미저장
- ❌ 단점: 첫 요청은 느림
- 적합한 경우: 읽기 많은 시스템 (예: 상품 조회, 뉴스)
2. 🧠 Write-through
데이터를 DB에 쓸 때 캐시에도 동시에 저장
- 동작 방식:
- 클라이언트가 데이터를 수정하면
- DB와 캐시에 동시에 기록
- ✅ 장점: 항상 최신 데이터가 캐시에 존재
- ❌ 단점: 쓰기 성능 느림, 트래픽 증가
- 적합한 경우: 쓰기와 읽기 비율이 비슷한 시스템
3. 🔁 Write-back (Write-behind)
데이터를 캐시에 먼저 쓰고, 일정 시간 후에 DB에 반영
- ✅ 장점: 쓰기 성능 빠름
- ❌ 단점: 장애 발생 시 DB와 캐시 데이터 불일치 가능성
- 적합한 경우: 성능 최우선, 데이터 일관성 덜 중요한 경우 (예: 로그 저장)
4. ⏰ Time-to-Live (TTL, 만료 시간 기반)
캐시 항목에 유효 기간을 지정해서, 지정 시간이 지나면 삭제
- 예: max-age=3600 → 1시간 후 무효
- ✅ 장점: 오래된 데이터 자동 정리
- ❌ 단점: 실제 데이터가 바뀌어도 무효화 전까지는 반영되지 않음
- 적합한 경우: 자주 바뀌지 않는 데이터 (카테고리 목록 등)
5. 🏷 ETag / Last-Modified 기반 캐싱
클라이언트가 이전에 받은 리소스의 상태 정보를 서버에 보내어 변경 여부만 확인
- 서버는:
- 변경 X → 304 Not Modified 응답 (재전송 없음)
- 변경 O → 새 파일 전송
- ✅ 장점: 불필요한 데이터 전송 방지
- 브라우저 캐싱과 매우 궁합 좋음
🧹 캐시 무효화(Cache Invalidation) 전략
| 전략 | 설명 |
| TTL 기반 만료 | 일정 시간이 지나면 자동 삭제 |
| 수동 무효화 | DB 변경 시 API로 캐시 직접 삭제 (예: Redis에서 삭제) |
| 버전 명시 | URL에 버전을 붙여 새 파일로 인식 (style.v2.css) |
| ETag, Last-Modified | 서버와 변경 여부 비교 후 업데이트 |
⚠️ 캐싱 전략 설계 시 주의사항
| 항목 | 이유 |
| 민감 데이터는 캐싱 금지 | 로그인 정보, 개인정보 등 노출 위험 |
| 캐시 무효화는 명확해야 함 | 안 그러면 오래된 데이터 계속 사용 |
| TTL 값은 실제 갱신 주기 고려 | 너무 길면 구버전 유지, 너무 짧으면 캐시 효과 없음 |
| 캐시 크기, 만료 기준 정해야 함 | 메모리 낭비 및 캐시 오염 방지 필요 |
💡 요약
| 전략 유형 | 대표 전략 | 주 사용처 예시 |
| 읽기 최적화 | Cache-aside | 상품정보, 뉴스기사 |
| 일관성 유지 | Write-through | 사용자 설정 |
| 성능 우선 | Write-back | 로그 데이터 |
| 기간 제한 | TTL | 인기글 리스트 |
| 변경 감지 | ETag / Last-Modified | 정적 리소스 |
'Programming > Web' 카테고리의 다른 글
| OCI Oracle Free Tier 사용 시, 느린 서버 속도 해결법 (0) | 2026.03.27 |
|---|---|
| Oracle Cloud Infrastructure 가상 서버(Compute Instance) 생성 (0) | 2026.03.26 |
| 캐싱(Caching) (0) | 2025.05.12 |
| 정적 처리 VS 동적 처리 (0) | 2025.05.12 |
| 웹 서버와 애플리케이션 서버를 분리하는 이유 (0) | 2025.05.12 |
