hyunsu blog

홈노트

배포는 성공했는데 옛 페이지가 보였다 — 엣지 캐시 퍼지 실패와 재시도

목차 · 4
  1. 01무슨 일이 있었나
  2. 02왜 그랬나
  3. 03무엇을 바꿨나
  4. 04배운 것

01 무슨 일이 있었나

디자인 갤러리는 프레임워크 없는 정적 HTML 이라 CDN 엣지에 HTML 까지 캐시한다. 그래서 배포 스크립트의 마지막 단계는 "엣지 캐시 퍼지" 다. 어느 배포에서 이 단계가 이렇게 끝났다.

text
⚠️ 엣지 퍼지 실패 — 옛 HTML 이 s-maxage 동안 남는다

배포 자체는 성공으로 기록됐다. 컨테이너를 직접 확인하니 새 HTML 이 맞았다. 그런데 공개 주소로 열면 옛 페이지가 나왔다. 응답 헤더에 cf-cache-status: HIT 와 age: 342 가 찍혀 있었다. 엣지가 옛 것을 들고 있었다.

02 왜 그랬나

퍼지 API 호출이 한 번 실패했다. 몇 초 뒤 같은 명령을 손으로 돌리자 바로 성공했으니 일시 오류였다. 문제는 스크립트가 한 번 실패하면 경고만 남기고 끝낸다는 점이었다. 퍼지는 "배포가 성공한 뒤의 부가 작업" 으로 취급되고 있었는데, HTML 을 엣지에 캐시하는 사이트에서 퍼지는 배포의 일부다. 퍼지가 안 되면 사용자에게는 배포가 안 된 것과 같다.

03 무엇을 바꿨나

  • 퍼지가 실패하면 5초 뒤 한 번 더 시도한다. 두 번 다 실패했을 때만 경고를 낸다. 일시 오류는 이걸로 충분히 걸러진다.
  • 경고 문구에 손으로 퍼지하는 명령을 그대로 적어 두었다. 새벽에 로그를 보는 사람이 문서를 뒤지지 않게.
  • 배포 직후 확인 절차에 "공개 주소에서 cf-cache-status 가 MISS 인지" 를 넣었다. 오리진만 보고 끝내면 이번처럼 놓친다.

04 배운 것

캐시를 두는 순간 "배포됨" 의 정의가 바뀐다. 오리진이 새 것이어도 엣지가 옛 것이면 배포되지 않은 것이다. 배포 스크립트의 성공 판정은 사용자가 보는 곳까지 포함해야 한다.