핵심 요약
캐시는 ① 적당한 TTL로 자동 만료, ② 데이터 변경 시 해당 키를 삭제(write-invalidate)가 기본이다. 완벽한 일관성보다 "조금 낡아도 되는 시간"을 정하는 게 핵심이고, 인기 키가 동시에 만료돼 DB로 몰리는 스탬피드를 막는 장치가 필요하다.
1. 전략
| 패턴 | 설명 |
|---|---|
| Cache-Aside | 읽기 미스 시 DB→캐시 채움(가장 흔함) |
| Write-Through | 쓰기 시 캐시도 갱신 |
| TTL + 무효화 | 안전망 TTL + 변경 시 삭제 |
2. 스탬피드 방지
- TTL에 지터(랜덤 ±)를 줘 동시 만료 분산
- 재계산은 락(SETNX)으로 한 요청만, 나머지는 잠깐 옛 값
- 인기 키는 만료 전 비동기 갱신(early recompute)
3. 함정
- TTL 없이 캐시하면 절대 안 바뀌는 유령 데이터가 생긴다
- 키 네이밍 규칙이 없으면 무효화 대상을 못 찾는다
- 캐시와 DB 동시 갱신은 순서·실패 시 불일치 — "DB 먼저, 캐시 삭제" 순서가 무난
자주 묻는 질문
캐시 스탬피드가 뭔가요?
인기 키가 동시에 만료되면 그 순간 모든 요청이 DB로 몰려 부하가 폭증합니다. TTL 지터, 재계산 락, 사전 갱신으로 완화합니다.
업데이트할 때 캐시를 갱신할까 삭제할까요?
삭제가 단순하고 안전합니다. 다음 읽기에서 최신값으로 다시 채워집니다. 갱신은 동시성에서 옛 값을 덮어쓸 위험이 있습니다.

댓글 0