웹 캐시 및 CDN의 작동 원리
웹 캐시는 브라우저, 중간 캐싱 프록시, 원본 서버 체인을 통해 리소스를 효율적으로 전달합니다. CDN은 지리적으로 분산된 캐싱 노드를 갖춘 정교한 캐싱 프록시로, Cache-Control 헤더는 CDN의 고급 기능 없이도 웹사이트 성능을 최적화하는 핵심 요소입니다.
Cache-Control 핵심 요소와 실습 (Ruby Rack 앱)
Ruby Rack 애플리케이션과 rack-cache Gem을 활용하여 Cache-Control의 동작을 실험합니다.
-
max-age는 캐시 유효 기간을 설정하나, 콘텐츠 변경 시 즉시 반영되지 않는 문제가 있습니다. -
Last-Modified헤더는 캐시 유효성 재확인을 가능하게 하며,max-age=30, must-revalidate는 만료 시 원본에 재확인하도록 강제합니다. -
ETag는Last-Modified의 한계를 극복하는 “자유 형식 체크섬”입니다.If-None-Match헤더와 함께 조건부 GET 요청을 처리하여 304 응답을 유도하고,max-age없이must-revalidate만 사용하면ETag일치 시 캐시된 응답을 재사용하여 효율성을 높입니다. -
Rails에서는
Marshal.dump(model.attributes)나Digest를 활용해APP_REVISION등을 조합한 정확한ETag생성이 권장됩니다.
캐시 만료 및 위험성
must-revalidate와 ETag 조합은 배포 시 APP_REVISION 변경만으로 캐시를 자동 무효화하여 수동 만료의 필요성을 제거합니다. immutable 캐시 설정은 불법 콘텐츠가 CDN에 영구 캐시되는 심각한 문제를 초래할 수 있으므로 피해야 합니다. 404 응답 캐싱 또한 페이지 복구 시 문제를 일으킬 수 있어 주의가 필요합니다.
CDN 비즈니스 모델과 개발자의 역할
CloudFlare의 “Cache Settings Override” 같은 CDN 기능은 조직의 캐시 제어 문제를 해결해주지만, 이는 근본적인 해결책이 아닌 임시방편입니다. 개발자는 Cache-Control을 정확히 이해하고 직접 제어하여 불필요한 비용과 종속성을 피해야 합니다.