캐시 관리

Reading-Snail·2024년 2월 13일
0

💡 Qurious 팽이! 💡

목록 보기
11/14

회사에서 운영 테스트 중 캐시에 대한 문제가 대두 되었습니다. 캐시가 클라이언트들의 브라우저에 저장 되어있어 최신 소스로 재배포 해도 좀 처럼 반영이 되지 않았고, 고객들에게 캐시 비우기 및 강력 새로고침을 방법을 알려주는 메뉴얼을 배포하여하는 해프닝이 벌어졌습니다.

<이게 맞나?> 라는 생각이 들었고, 캐시 관련 내용을 찾아보았습니다.

먼저는 블로그, GPT, 도서를 모두 읽어가면서 찾아보았으나 각각의 설정들의 의미가 모호하다고 느껴지는 부분이 있었고, 해서 최종적으로 StackOverFlow에서 세부적인 설정을 보면서 이해할 수 있었습니다.

캐시를 관리는 HTTP 프로토콜!

HTTP 헤더에는 Cache-Control 이라는 설정이 있으며 하위 설정 가능 항목으로는 세 가지가 있습니다.
1. no-store: 캐시를 저장하지 않음
2. no-cache: 캐시를 저장하지만 서버에서 최신본인지 검증 후 사용
3. must-validate: max-age에 설정 되어있는 유효기간이 지나지 않았으면 캐시를 바로 사용하고, 유효기간이 지나면 서버에서 최신소스를 검증 후 사용.
no-cache 와 must-validate의 의미의 차이를 파악하기가 가장 어려웠는데 결론은 둘 다 서버에서 최신소스를 검증하지만 no-cahce는 항상 검증하고, must-validate는 유효기간 이후에 검증하게 됩니다.

그러나 결국 표준은 없다.

그러나 표준에 모호한 부분이 많은 http 프로토콜 결국 상황에 따라 다르게 설정하게 됩니다.
이유는 브라우저마다 호환이 다르고, 버그도 종종 있기 때문입니다. 세부적인 내용은 아래의 링크를 참조하면 좋을 것 같습니다. 단, 예시로 정리되어있는 내용들은 캐시를 절때로 생성되지 않기 위한 설정값들 이므로 필요에 따라 처리해야 될 것입니다.

Apache .htaccess file:

현재 프로젝트의 경우 아파치 서버를 사용하고 있기 때문에 아래와 같은 설정이 적용되었다면 오픈기간 중에 발생한 혼란이 최소화 되지 않았을까 싶습니다.

  • HTTP1.1 이상을 사용하는 환경이므로 Expires 0 x
  • 캐시가 필요는 하기 때문에 no-strore 설정 x
  • IE 호환이 필요 없으므로 Pragma 설정 x
<IfModule mod_headers.c>
    Header set Cache-Control "<!--no-store,--> no-cache, must-revalidate"
    <!-- Header set Pragma "no-cache"-->
    <!-- Header set Expires 0 -->
</IfModule>
profile
책읽는 달팽이 || 공학도에서 개발자로! || 결국 과거의 흐름을 이해했을 때 지금의 것들을 통찰력있게 바라볼 수 있다고 믿습니다.

0개의 댓글

관련 채용 정보