웹사이트나 앱을 이용하는 과정에서 이미지, HTML, CSS, JavaScript 파일과 같은 재사용 가능한 HTTP 리소스를 일정 기간 동안 저장하는 공간을 말합니다. 캐시는 브라우저, CDN, 서버 등 다양한 위치에서 활용될 수 있습니다.
하지만 캐시 정책을 잘못 설정하면 오히려 문제가 될 수도 있습니다. 예를 들어, 변경된 데이터를 캐시로 인해 최신 상태로 불러오지 못하는 경우가 발생할 수 있습니다. 따라서 적절한 캐싱 전략을 세우는 것이 중요합니다.
더 자세한 HTTP 캐시 정보는 이전 포스트
HTTP 캐시(Cache)에서 확인하세요.
star-breaker-raid 프로젝트에서 시행착오를 격으면서 세운 캐시에 대해서 설명하겠습니다.
Cache-Control: public, max-age=31536000, s-maxage=31536000, immutablemax-age=31536000 : 브라우저는 1년(31536000초) 동안 캐시 유지💡 이렇게 설정하면?
- 정적 파일은 1년 동안 캐시되므로 불필요한 다운로드를 방지하고 페이지 로딩 속도를 향상시킬 수 있습니다.
개발자 도구 네트워크에서 설정이 되었나 확인할 수 있습니다.
변경이 거의 없지만 1주 후 변경될 가능성이 있는 API Fetch 캐싱
대상 : 레이드 가이드, 레이드 보상 정보
설정 :
Cache-Control: public, max-age=86400, s-maxage=604800, stale-while-revalidate=3600
💡 이렇게 설정하면?
- 자주 변경되지 않는 API 응답을 빠르게 제공하면서도, 최신 데이터가 필요할 때 백그라운드에서 업데이트할 수 있습니다.
- 사용자는 캐시된 데이터로 빠르게 응답을 받고, 백그라운드에서 최신 데이터가 갱신되므로 속도와 데이터 신뢰성을 모두 잡을 수 있습니다.
vercel log에서 HIT 하는 것을 확인할 수 있습니다.
![]()
'Cache-Control': 'public, max-age=0, s-maxage=5, stale-while-revalidate=3, must-revalidate',
'Cache-Control': 'private, max-age=5, s-maxage=0, stale-while-revalidate=3, must-revalidate',💡 이렇게 설정하면?
- 짧은 시간 동안 CDN이 캐시를 유지하여 트래픽을 줄일 수 있음
- 실시간 데이터 요청이 많을 경우, 백그라운드에서 데이터를 갱신하면서도 빠른 응답 제공 가능
'Cache-Control': 'no-cache, must-revalidate'💡 이렇게 설정하면?
- 오류 페이지나 예외 응답이 오래 캐시되는 것을 방지하여, 최신 상태를 유지할 수 있음
적절한 캐싱 전략을 사용하면 UX 개선과 서버 성능 최적화라는 두 가지 목표를 모두 달성할 수 있었습니다.
캐시는 잘못 사용하여 데이터 불일치를 경험해보고 수정해서 최적의 방식을 찾을때 까지 많은 고민을 해보는 시간이였습니다.