← 질문 목록
#36깊이 0
캐시를 지우는 일이 어려운 이유는?
언제 지워야 하는지를 캐시가 모르기 때문이다. 원본이 바뀐 사실은 쓰기 쪽에서만 아는데, 캐시는 읽기 쪽에 있어서 그 소식이 저절로 오지 않는다.
| 방식 | 언제 지우나 | 약한 곳 |
|---|---|---|
| TTL | 시간이 지나면 | 그 사이에는 옛 값이 나간다 |
| 쓰기 때 삭제 | 원본을 바꿀 때 같이 | 삭제가 실패하면 계속 옛 값 |
| 쓰기 때 갱신 | 원본과 함께 새 값으로 | 두 곳이 어긋날 틈이 생긴다 |
어느 쪽이든 원본과 캐시라는 두 저장소를 하나의 트랜잭션으로 못 묶는다. 그래서 완전한 일관성이 아니라 어긋나는 시간을 얼마나 짧게 두느냐의 문제가 된다.
더 성가신 것은 무엇을 지워야 하는지다. 상품 하나가 바뀌면 그 상품 캐시만이 아니라 그것이 들어간 목록·검색 결과·집계까지 낡는다. 의존 관계가 코드에 흩어져 있으면 빠뜨린다.
TTL을 기본으로 깔고 중요한 것만 쓰기 시점에 지운다. 지우기를 빠뜨려도 시간이 지나면 스스로 낫는 구조를 바닥에 두는 것이다.