Cache-Control 지시어, 공개와 비공개 응답의 경계
public·private·no-store의 차이를 로그인 응답 기준으로 구분합니다.

- 응답마다 공용·개인·금지 중 하나를 의식적으로 골랐다
- 공개 내용과 개인 내용을 다른 경로로 분리했다
- 응답이 달라지는 조건을 함께 선언했다
공용 저장과 개인 저장을 가르는 지시어
캐시 지시어에서 가장 중요한 구분은 '누가 저장해도 되는가'입니다. 공용 저장을 허용하면 전송 서비스나 중간 장비가 응답을 보관해 다른 사용자에게도 돌려줄 수 있습니다. 개인 저장만 허용하면 요청한 사용자의 브라우저에만 남습니다. 저장 금지를 지정하면 어디에도 남지 않습니다. 세 단계의 선택이 보안과 성능을 동시에 결정합니다. 그래서 응답을 만들 때 먼저 묻습니다. 이 내용이 다른 사용자에게 그대로 보여도 괜찮은가. 괜찮다면 공용, 아니라면 개인, 민감하다면 금지입니다. 이 질문을 생략하면 기본값에 맡기게 되고 기본값은 상황마다 다릅니다.
로그인 응답은 경로로 분리합니다
같은 주소가 로그인 상태에 따라 다른 내용을 돌려주면 캐시를 안전하게 쓸 수 없습니다. 공용으로 두면 노출 위험이 있고, 금지로 두면 로그인하지 않은 다수의 방문자도 캐시를 못 쓰게 됩니다. 그래서 구조를 바꿉니다. 공개 내용과 개인 내용을 다른 경로로 분리하고, 공개 경로는 공용 저장을 허용하고 개인 경로만 금지합니다. 화면에서는 두 응답을 합쳐 보여 주면 됩니다. 이렇게 하면 트래픽의 대부분을 차지하는 공개 내용이 캐시 혜택을 받습니다. 분리가 어렵다면 최소한 개인 내용이 들어가는 응답에만 금지를 지정합니다.
캐시 가능한 비중을 계산합니다
학습용 가정으로 계산합니다. 가정값은 월 요청 400,000건 중 로그인 상태 요청이 30퍼센트라고 두겠습니다. 로그인 요청은 120,000건이고 나머지 280,000건은 공개 응답입니다. 공개 응답의 비중은 70퍼센트입니다. 이것이 중간 계산값입니다. 최종 판단은 현재 설정과 비교해서 합니다. 지금 모든 응답에 저장 금지를 걸어 두었다면 캐시 혜택을 받는 요청이 0건이고, 경로를 분리하면 280,000건이 혜택을 받습니다. 반대로 모든 응답에 공용 저장을 허용해 두었다면 120,000건이 노출 위험에 있으므로 즉시 분리해야 합니다.
지시어만으로는 부족한 경우가 있습니다
결론을 뒤집는 조건은 응답이 달라지는 조건입니다. 같은 주소가 언어나 기기에 따라 다른 내용을 돌려준다면, 공용 저장을 허용할 때 어떤 요청 정보에 따라 응답이 달라지는지 함께 알려 주어야 합니다. 그 선언이 없으면 한 언어의 응답이 다른 언어 사용자에게 전달될 수 있습니다. 두 번째 조건은 중간 서비스의 동작입니다. 일부 전송 서비스는 자체 설정이 응답 헤더보다 우선합니다. 그래서 헤더를 올바르게 보냈는데도 캐시되거나 캐시되지 않을 수 있습니다. 그래서 설정 뒤에는 실제 응답을 받아 저장 상태를 확인하는 단계를 둡니다.
성능 최적화 실행 전 점검표
- 응답마다 공용·개인·금지 중 하나를 의식적으로 골랐다
- 공개 내용과 개인 내용을 다른 경로로 분리했다
- 응답이 달라지는 조건을 함께 선언했다
- 설정 뒤 실제 응답으로 저장 상태를 확인했다
이 가이드의 근거 문서
출처 확인일: 2026-10-19. 공식 문서에 기반한 편집 가이드이며 직접 수행한 벤치마크가 아닙니다. 비용 사례는 명시된 가정에 한합니다.
오류 제보 방법