cache 무효화 — 캐시된 데이터를 진실의 원천과 일관되게 유지하는 것 — 는 컴퓨팅에서 가장 어려운 문제 중 하나로 유명합니다. 도전은 성능, 일관성, 복잡성의 균형을 맞추면서 cache가 stale 데이터를 제공하지 않게 하는 것입니다. 알아둘 만한 여러 전략과 함정이 있습니다.
핵심 문제
출처 데이터가 변경되면 캐시된 복사본이 STALE해짐.
→ stale 데이터 제공? (빠르지만 틀림) 대 무효화? (일관되지만 복잡/느림)
→ "CS에서 어려운 것은 두 가지뿐: cache 무효화와 이름 짓기."
어려움: 분산 시스템에 걸쳐, race 없이, 좋은 cache 적중률을 유지하면서
언제 그리고 무엇을 무효화할지 아는 것.
무효화 전략
1. TTL (만료) — 일정 시간 후 데이터 자동 만료 → 최종 일관성
✓ 단순, 추적 불필요 ✗ 만료 전까지 stale; staleness 허용치로 TTL 선택
2. 명시적 무효화 — 출처 데이터 변경 시 cache 삭제/갱신
✓ 빠르게 신선 ✗ 모든 쓰기를 확실히 포착해야; 일부 경로 놓치기 쉬움
3. WRITE-THROUGH — 쓰기 시 cache와 DB를 함께 갱신 → cache가 신선 유지
4. 이벤트 기반 — 이벤트/CDC로 무효화 (예: DB 변경 → 무효화 메시지)
→ 종종 결합: 명시적 무효화 + 안전망으로서의 TTL.
