같은글 노션링크 | 코드 변경 전후를 명확하게 보실수있습니다.
1.1 캐시정책 설정하는 이유
2.1 Vercel의 기본 캐시정책
2.2 적절한 캐시수명 정하기
유저가 같은 사이트를 자주 재방문한다고 치자. 매 요청마다 해당 사이트의 컨텐츠를 보기 위한 데이터를 서버로부터 다운받는다면 매번 통신비가 발생하고, 데이터를 전송 받는 시간이 소요될 것이다.
만약 사이트 UI가 자주 변경될 일이 없거나, 실시간 데이터를 제공하는 서비스가 아니라면, html, js, css, 이미지, 비디오 등의 정적 파일에 캐시 정책을 설정해 불필요한 네트워크 요청을 줄이고 좀 더 빠르게 유저에게 서비스를 보여줄 수 있게 된다.
1.1 캐시정책 설정하는 이유
본 프로젝트는 Vercel에 배포 중인데, Vercel은 무료플랜이어도 CDN 서비스를 이용할 수 있게 해준다. 현재는 기본캐시헤더가 적용돼 있는 상황인데, 본 프로젝트의 정적자산에 맞게 커스텀한 캐시정책을 설정해준다면 CDN 서비스를 더 잘 활용하게 되어 궁극적으로 유저에게 더 빠르게 서비스를 제공할 수 있을 것이다.
2.1 Vercel의 기본 캐시정책
현재 버셀이 내 프로젝트 정적자산을 브라우저에 응답할때 캐시헤더는 다음과 같다.
html파일, manifest.json, 웹폰트, 이미지, 파비콘
public, max-age=0, must-revalidatejs
s-maxage=31536000, immutable
s-maxage: 공유캐시에만 적용되는 수명, 개인캐시에서는 무시된다.
immutable: Cache-Control 익스텐션 중 하나
immutable 속성의 동작
브라우저 캐시가 fresh(max-age 내) 상태일때, 페이지를 다시 로드해도 Conditional GET을 발생시키는 않고 무조건 fresh cache를 사용한다. 브라우저가 할일(조건부 검증 네트워크 요청)이 줄어들기 때문에 성능 최적화에 도움이 된다.
s-maxage에 1년 동안기간 동안 파일이 동일하게 유지될 것으로 예상된다는 의미이다.해석: 브라우저야. 캐시 유효기간 1년이고, 브라우저에 저장된 응답캐시가 1년이 아직 안됐으면, 조건부 검증 네트워크 요청할 필요 없이 바로 브라우저 캐시 (fresh cache임) 가져다 써라. 배포 등 코드가 업데이트되는 경우에는 캐시무효화를 통해 CDN과 클라이언트에 변경사항이 바로 반영되는듯 하다.
2.2 적절한 캐시수명 정하기
적절한 캐시설정은 성능최적화와 최신정보를 응답하는 것 사이의 균형을 찾는 것에서 비롯된다.
public, max-age=0, must-revalidate 유지public, max-age=0, must-revalidates-maxage=31536000, immutable 적용하기public, max-age=0, must-revalidatemax-age=0, s-maxage=86400s-maxage=31536000, immutable 유지s-maxage=31536000, immutable를 브라우저에 응답.{
"headers": [
{
"source": "/fonts/(.*)", // 웹폰트
"headers": [
{
"key": "Cache-Control",
"value": "s-maxage=31536000, immutable"
}
]
},
{
"source": "/manifest.json",
"headers": [
{
"key": "Cache-Control",
"value": "max-age=0, s-maxage=86400"
}
]
},
{
"source": "/favicon.ico",
"headers": [
{
"key": "Cache-Control",
"value": "max-age=0, s-maxage=86400"
}
]
},
{
"source": "/images/(.*)",
"headers": [
{
"key": "Cache-Control",
"value": "max-age=0, s-maxage=86400"
}
]
},
...
]
}
폰트: 새로고침시 깜빡하면서 기본글씨체(noto sans)가 보이던 시간이 짧아졌다.

favicon.ico (manifest.json, logo.png 도 동일한 케시헤더 적용)

Cache-Control 확장인 Immutable을 이용한 캐시 최적화 👏🏻
성능 최적화 2 — 캐시 설정하기 👏🏻
알아둬야 할 HTTP 쿠키 & 캐시 헤더
https://vercel.com/docs/edge-network/headers#cdn-cache-control-priority
https://vercel.com/docs/edge-network/caching#cdn-cache-control
https://vercel.com/docs/projects/project-configuration#headers
학습 | 버셀 정적자산 캐시정책
요즘 좀 전문성 높이고 싶어서 온갖 글 다 보는 중인데, 이거 보니까 전 아직도 갈 길이 머네요 ㅎㅎ… 부트캠프라도 들으면 더 빨리 늘 것 같아서 알아보는데 혹시 제로베이스 프론트엔드 이직반 아시나요?? (https://bit.ly/4e0hC9o) 여기 커리만 보면 괜찮은 것 같은데 궁금하네요.