캐시 무효화

캐시 무효화와 버전 조합

프론트 배포에서 가장 흔한 장애는 JS 파일이 늦게 갱신되는 것보다 오래된 HTML이 새 해시 파일을 참조하거나, 새 HTML이 아직 퍼지지 않은 청크를 참조하는 조합 문제다. cache busting은 파일 이름, HTML 정책, CDN purge, rollback 순서를 함께 다룬다.

01

해시 파일 생성

내용이 바뀐 JS/CSS/image만 새 파일명으로 나오게 한다.

파일명이 같으면 브라우저가 바뀐 내용을 모른다
02

HTML 늦은 캐시

HTML은 새 청크 목록을 담으므로 짧은 캐시 또는 재검증 대상으로 둔다.

HTML을 오래 캐시하면 오래된 앱 shell이 남는다
03

청크 보존

새 배포 직후에도 이전 HTML이 참조하는 옛 청크를 일정 시간 남긴다.

즉시 삭제하면 ChunkLoadError가 난다
04

CDN 전파

edge purge, origin 업로드 순서, regional propagation 지연을 고려한다.

사용자 위치에 따라 다른 버전이 보일 수 있다
05

롤백 설계

이전 HTML과 청크 세트를 함께 되돌릴지, forward fix로 갈지 정한다.

청크만 되돌리면 manifest가 어긋날 수 있다
브라우저
long cache content hash 파일만 immutable로 길게 둔다.
HTML에는 같은 정책을 쓰지 않는다
CDN
edge freshness purge 범위와 전파 시간을 배포 절차에 포함한다.
전역 purge는 비용과 지연이 있다
origin
파일 보존 이전 버전 청크를 일정 기간 유지해 오래된 HTML 요청을 흡수한다.
clean build 업로드가 장애가 될 수 있다
rollback
manifest 일치 HTML, asset manifest, 청크 파일 세트가 같은 버전을 가리켜야 한다.
부분 롤백은 더 위험하다

배포 후 확인

강제 새로고침 오래된 탭, 새 탭, 시크릿 창에서 청크 로드 오류가 없는지 본다.
edge 비교 서로 다른 지역이나 POP에서 HTML과 asset 버전이 일치하는지 확인한다.
롤백 리허설 이전 버전으로 되돌릴 때 필요한 파일 세트가 남아 있는지 점검한다.