캐싱 개요

캐시 가능한 응답은 Cloud CDN이 저장하고 빠르게 검색할 수 있으므로 로드 시간을 더 빠르게 할 수 있는 HTTP 응답입니다. 모든 HTTP 응답을 캐시할 수 있는 것은 아닙니다.

캐시 모드

캐시 모드를 사용하면 Cloud CDN이 콘텐츠를 캐시하는지 여부를 결정하는 요소를 제어할 수 있습니다.

Cloud CDN은 응답이 캐시되는 방식, Cloud CDN이 원본에서 전송한 캐시 지시문을 준수하는지 여부, 캐시 TTL이 적용되는 방식을 정의하는 세 가지 캐시 모드를 제공합니다.

사용 가능한 캐시 모드는 다음 표에 나와 있습니다.

캐시 모드 동작
CACHE_ALL_STATIC 캐시 불가능이 아닌 정적 콘텐츠가 있는 성공적인 응답을 자동으로 캐시합니다. 유효한 캐싱 지시문을 설정하는 원본 응답도 캐시됩니다.

이것은 Google Cloud CLI 또는 REST API를 사용하여 생성되는 Cloud CDN이 사용 설정된 백엔드의 기본 동작입니다.

USE_ORIGIN_HEADERS 유효한 캐시 지시어 및 캐싱 헤더를 설정하기 위해 성공적인 원본 응답을 요구합니다. 이 지시어가 없는 성공적인 응답은 원본에서 전달됩니다.
FORCE_CACHE_ALL 원본으로 설정된 캐시 지시문을 무효화하고 성공적인 응답을 무조건적으로 캐시합니다. 백엔드가 동적 HTML 또는 API 응답과 같은 사용자별(사용자 식별 가능) 비공개 콘텐츠를 제공하는 경우에는 이 모드가 적절하지 않습니다.

유효한 캐시 지시어가 없어도 오류 응답이 캐시될 수 있습니다.

캐시 모드를 FORCE_CACHE_ALL로 설정하기 전에 다음 동작을 고려하세요.

  • 서명된 URL 또는 서명된 쿠키의 경우 FORCE_CACHE_ALL이 Google Cloud 콘솔의 캐시 항목 최대 기간 설정이나 gcloud --signed-url-cache-max-age 옵션을 통해 지정된 최대 기간을 재정의합니다.

  • FORCE_CACHE_ALL은 이전에 캐시된 콘텐츠의 TTL(수명)을 변경합니다. 이 변경으로 인해 이전에 원본 헤더의 TTL이 더 길기 때문에 최신 상태로 간주되었던 일부 항목이 비활성으로 간주될 수 있으며, 이전에 비활성으로 간주되었던 일부 항목이 최신 상태로 간주될 수 있습니다.

  • FORCE_CACHE_ALL은 캐시 지시문(Cache-ControlExpires)을 재정의하지만 다른 원본 응답 헤더를 재정의하지는 않습니다. 특히 Vary 헤더는 캐시 모드가 FORCE_CACHE_ALL이더라도 캐싱을 억제할 수 있습니다. 자세한 내용은 Vary 헤더를 참조하세요.

설정 안내는 캐시 모드 설정을 참조하세요.

정적 콘텐츠

정적 콘텐츠는 다른 사용자가 액세스하더라도 항상 동일한 콘텐츠입니다. 사이트 스타일을 지정하는 데 사용하는 CSS, 대화형 작업을 제공하는 자바스크립트, 동영상, 이미지 콘텐츠는 일반적으로 지정된 URL(캐시 키)의 사용자에 따라 변경되지 않습니다. 따라서 Cloud CDN의 전역 에지 네트워크에서 캐시함으로써 이점을 얻을 수 있습니다.

캐시 모드를 CACHE_ALL_STATIC으로 설정했고 응답에 Cache-Control 또는 Expires 헤더의 명시적 캐싱 지시어가 포함되지 않은 경우 Cloud CDN이 다음에 대한 응답을 자동으로 캐시합니다.

  • CSS(text/css), 자바스크립트(application/javascript) 및 WOFF2(font/woff2)가 포함된 모든 웹 글꼴을 포함한 웹 애셋
  • JPEG(image/jpg) 및 PNG(image/png)를 포함한 이미지
  • H.264, H.265, MP4(video/mp4)를 포함한 동영상
  • MP3(audio/mpeg) 및 MP4(audio/mp4)를 포함한 오디오 파일
  • PDF(application/pdf)를 포함한 서식이 지정된 문서

다음 표는 요약 정보입니다.

카테고리 MIME 유형
웹 애셋 text/css text/ecmascript text/javascript application/javascript
글꼴 font/*와 일치하는 모든 Content-Type
이미지 image/*와 일치하는 모든 Content-Type
동영상 video/*와 일치하는 모든 Content-Type
오디오 audio/*와 일치하는 모든 Content-Type
서식이 지정된 문서 유형 application/pdfapplication/postscript

Cloud CDN은 제공되는 콘텐츠의 MIME 유형을 반영하는 Content-Type HTTP 응답 헤더를 검사합니다.

다음에 유의하세요.

  • 원본의 웹 서버 소프트웨어는 응답마다 Content-Type을 설정해야 합니다. 많은 웹 서버가 NGINX, Varnish, Apache를 포함한 Content-Type 헤더를 자동으로 설정합니다.

  • Cloud Storage는 Google Cloud 콘솔이나 Google Cloud CLI를 사용하여 콘텐츠를 업로드하면 Content-Type 헤더를 자동으로 설정합니다.

  • Cloud Storage는 항상 Cloud CDN에 Cache-Control 헤더를 제공합니다. 값을 명시적으로 선택하지 않으면 기본값이 전송됩니다. 따라서 Cloud Storage의 객체에 대한 캐시 제어 메타데이터를 명시적으로 조정하거나 FORCE_CACHE_ALL 모드를 사용하여 Cloud Storage에서 전송한 값을 재정의하지 않는 한 성공적인 모든 Cloud Storage 응답은 Cloud Storage 기본값에 따라 캐시됩니다.

  • text/htmlapplication/json 콘텐츠 유형을 캐시하려면 응답에 명시적 Cache-Control 헤더를 설정해야 합니다. 이때 사용자 데이터 하나를 실수로 캐시하여 모든 사용자에게 제공되지 않도록 주의합니다.

MIME 유형에 따라 응답을 캐시할 수 있지만 private 또는 no-storeCache-Control 응답 헤더나 Set-Cookie 헤더가 있으면 응답이 캐시되지 않습니다. 자세한 내용은 캐시 저장 가능성 규칙을 참고하세요.

기본적으로 HTML(text/html) 및 JSON(application/json)과 같은 다른 콘텐츠 유형은 성공한 응답에 대해 캐시되지 않습니다. 이러한 유형의 응답은 일반적으로 동적(사용자별) 응답입니다. 장바구니, 사용자 개인 맞춤설정 도구가 포함된 제품 페이지, 인증된 API 응답이 해당됩니다. 그러나 음성 캐싱을 사용 설정하면 특정 상태 코드에 대해 응답이 캐시되도록 할 수 있습니다.

캐시할 수 있는 유효한 많은 응답에서 URL을 반영하지 않으므로 Cloud CDN은 파일 확장자를 사용하여 응답에서 캐시할 수 있는지 여부를 확인하지 않습니다.

캐시 가능한 콘텐츠

Cloud CDN은 이 섹션의 모든 요구 사항을 충족하는 응답을 캐시합니다. 이러한 요구 사항 중 일부는 RFC 7234에 명시되어 있으며, 다른 일부는 Cloud CDN에만 해당합니다.

Cloud CDN은 콘텐츠를 캐시하는 정확한 조건 집합을 주기적으로 변경할 수 있습니다. Cloud CDN이 콘텐츠를 캐시하지 못하도록 명시적으로 방지하려면 RFC 7234의 가이드라인에 따라 캐시할 수 없는 응답을 지정하는 방법을 결정합니다. 원본 헤더를 기준으로 캐시할 수 없는 콘텐츠 섹션도 참조하세요.

Cloud CDN은 다음 사항이 모두 참인 경우 캐시에 응답을 저장합니다.

속성 요구사항
제공 Cloud CDN이 사용 설정된 백엔드 서비스, 백엔드 버킷 또는 외부 백엔드
다음에 대한 응답 GET 요청
상태 코드

200, 203, 204, 206, 300, 301, 302, 307, 308, 404, 405, 410, 421, 451, 501.

최신 정보

응답에 max-age 또는 s-maxage 지시문이 있는 Cache-Control 헤더가 있거나 이후 타임스탬프를 포함하는 Expires 헤더가 있습니다.

연령이 없는 캐시 가능한 응답의 경우(예: no-cache 사용) public 지시문을 명시적으로 제공해야 합니다.

CACHE_ALL_STATIC 캐시 모드의 경우 최신 상태 지시문이 없으면 정적 콘텐츠 유형을 포함하는 성공한 응답이 계속 캐싱 대상으로 지정됩니다.

FORCE_CACHE_ALL 캐시 모드의 경우 모든 성공한 응답이 캐싱 대상으로 지정됩니다. 이로 인해 사용자별 비공개 콘텐츠를 캐시할 수 있습니다. Cloud Storage 버킷과 같이 비공개 또는 동적 콘텐츠를 제공하지 않는 백엔드에서만 FORCE_CACHE_ALL을 설정해야 합니다.

음성 캐싱이 사용 설정되고 상태 코드가 음성 캐싱에서 TTL을 지정하는 것과 일치하면 명시적인 최신 상태 지시문이 없어도 응답이 캐싱 대상으로 지정됩니다.

콘텐츠

HTTP/1 원본의 경우 응답에 유효한 Content-Length, Content-Range 또는 Transfer-Encoding: chunked 헤더가 포함되어야 합니다.

고급 HTTP 프로토콜 버전(HTTP/2 이상)을 사용하는 원본의 경우 응답에 이러한 헤더가 필요하지 않습니다.

크기 최대 크기 이하

크기가 10MiB~100GiB인 응답의 경우 바이트 범위 요청에 설명된 추가 캐시 저장 가능성 제약조건을 참조하세요.

Cloud Storage 백엔드 버킷의 경우 다음과 같은 추가 제안사항을 따르세요.

기본적으로 객체가 공개되고 Cache-Control 메타데이터를 지정하지 않으면 Cloud Storage에서 객체에 Cache-Control: public, max-age=3600 헤더를 할당합니다. Cache-Control 메타데이터를 사용하여 다른 값을 설정할 수 있습니다.

백엔드 버킷으로 외부 애플리케이션 부하 분산기를 구성하는 방법에 대한 예시는 백엔드 버킷으로 Cloud CDN 설정을 참조하세요.

최대 크기

Cloud CDN은 각 응답에 최대 크기를 적용합니다. 최대 크기보다 큰 본문에 대한 응답은 캐시되지 않지만 여전히 클라이언트에게 전송됩니다.

최대 크기는 원본 서버의 바이트 범위 요청 지원 여부에 따라 달라집니다.

원본 서버가 바이트 범위 요청을 지원함 원본 서버가 바이트 범위 요청을 지원하지 않음
100 GiB(107,374,182,400 바이트) 10 MiB(10,485,760 바이트)

거의 모든 최신 웹 서버(NGINX, Apache, Varnish 포함)는 바이트 범위 요청을 지원합니다.

원본 헤더를 기준으로 캐시할 수 없는 콘텐츠

응답의 캐싱을 차단하는 검사가 있습니다. Cloud CDN은 콘텐츠를 캐시하는 정확한 조건 집합을 주기적으로 변경할 수 있으므로, Cloud CDN이 콘텐츠를 캐시하지 못하도록 하려면 표준(RFC 7234)의 가이드라인에 따라 캐시할 수 없는 응답을 지정하는 방법을 결정합니다.

Cloud CDN은 응답이 캐시 가능한 콘텐츠의 요구사항이 충족되지 않거나 다음 중 하나에 해당하는 경우 응답을 캐시하지 않습니다.

속성 요구사항
제공 Cloud CDN이 사용 설정되지 않은 백엔드 서비스 또는 외부 백엔드
쿠키 Set-Cookie 헤더가 있음
Vary 헤더 Accept, Accept-Encoding, Access-Control-Request-Headers, Access-Control-Request-Method, Origin, Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, X-Goog-Allowed-Resources, X-Origin 이외의 값 또는 캐시 키 설정의 일부로 구성된 헤더 중 하나를 포함합니다.
응답 지시문 응답에 no-store 또는 private 지시문이 있는 Cache-Control 헤더가 있습니다. 이 경우