배경
현재 /sw.js (Serwist 빌드 산출물)에 대한 Cache-Control 헤더가 next.config.ts 또는 Vercel 쪽에 명시되어 있지 않다. 그 결과 브라우저가 Service Worker 파일을 최대 24시간(브라우저 SW spec 상한)까지 캐시할 수 있으며, 이 동안 구 SW가 살아 있으면 SW 내부에 박혀 있는 precache 매니페스트(이전 빌드의 정적 자산 해시, /data/changelog.json, /sitemap.xml 등)가 그대로 사용되어 main 머지 후에도 사용자에게 최신 배포가 반영되지 않을 위험이 있다.
특히 useVersionDialog가 fetch하는 /data/changelog.json 역시 SW precache에 포함되어 있어, 구 SW가 살아 있으면 새 버전 알림 자체가 뜨지 않는 역설이 발생한다.
목표
/sw.js에 명시적인 캐시 무효화 헤더(Cache-Control: public, max-age=0, must-revalidate)를 적용하여, 매 페이지 로드마다 브라우저가 새 SW를 확인하도록 강제한다.
작업 체크리스트
비고
- 후속 작업 후보(별도 이슈):
/api/version에 no-store 적용, PWARegister의 SW update 감지 + 새로고침 안내, changelog.json의 precache 제외 검토.
배경
현재
/sw.js(Serwist 빌드 산출물)에 대한Cache-Control헤더가next.config.ts또는 Vercel 쪽에 명시되어 있지 않다. 그 결과 브라우저가 Service Worker 파일을 최대 24시간(브라우저 SW spec 상한)까지 캐시할 수 있으며, 이 동안 구 SW가 살아 있으면 SW 내부에 박혀 있는 precache 매니페스트(이전 빌드의 정적 자산 해시,/data/changelog.json,/sitemap.xml등)가 그대로 사용되어 main 머지 후에도 사용자에게 최신 배포가 반영되지 않을 위험이 있다.특히
useVersionDialog가 fetch하는/data/changelog.json역시 SW precache에 포함되어 있어, 구 SW가 살아 있으면 새 버전 알림 자체가 뜨지 않는 역설이 발생한다.목표
/sw.js에 명시적인 캐시 무효화 헤더(Cache-Control: public, max-age=0, must-revalidate)를 적용하여, 매 페이지 로드마다 브라우저가 새 SW를 확인하도록 강제한다.작업 체크리스트
apps/web/next.config.ts에async headers()설정 추가/sw.js경로에Cache-Control: public, max-age=0, must-revalidate적용pnpm build정상 종료 확인/verify(build, lint, format, type-check) 통과 확인비고
/api/version에no-store적용,PWARegister의 SW update 감지 + 새로고침 안내,changelog.json의 precache 제외 검토.