캐시 모드 사용

이 페이지에서는 Cloud CDN으로 캐시 모드를 사용하는 방법을 설명합니다. 캐시 모드를 사용하면 Cloud CDN에서 콘텐츠를 캐시하는 방법을 구성할 수 있습니다.

시작하기 전에

  • 캐시 모드 및 정적 콘텐츠를 읽어보세요.

  • Cloud CDN이 사용 설정되어 있는지 확인합니다. 자세한 내용은 Cloud CDN 사용을 참조하세요.

  • 필요한 경우 Google Cloud CLI를 최신 버전으로 업데이트합니다.

    gcloud components update
    

캐시 모드 설정

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 Console의 캐시 항목 최대 기간 설정이나 gcloud --signed-url-cache-max-age 옵션을 통해 지정된 최대 기간을 재정의합니다.

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

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

Cloud CDN이 사용 설정된 백엔드에서 캐시 모드를 구성하려면 다음 안내를 따르세요.

콘솔

  1. Google Cloud Console에서 부하 분산 페이지로 이동합니다.

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 캐시 모드에서 다음 옵션 중 하나를 선택합니다.
    • 정적 콘텐츠 캐시(권장): 정적 콘텐츠는 사용자에 따라 변경되지 않는 웹 애셋입니다. 정적 콘텐츠는 응답의 Content-Type을 기반으로 합니다. 자세한 내용은 정적 콘텐츠를 참조하세요.
    • Cache-Control 헤더를 기준으로 원본 설정 사용: 응답 헤더에 유효한 캐시 지시문이 있는 응답을 캐시합니다.
    • 모든 콘텐츠 강제 캐시: private 또는 no-store 지시문을 무시하고 원본이 제공한 모든 성공적인 콘텐츠를 캐시합니다.
  7. 저장을 클릭합니다.

gcloud

백엔드 서비스의 경우 --cache-mode 플래그와 함께 gcloud compute backend-services create 또는 gcloud compute backend-services update 명령어를 사용합니다.

백엔드 버킷의 경우 --cache-mode 플래그와 함께 gcloud compute backend-buckets create 또는 gcloud compute backend-buckets update 명령어를 사용합니다.

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --cache-mode=CACHE_MODE
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --cache-mode=CACHE_MODE

CACHE_MODE를 다음 중 하나로 바꿉니다.

  • CACHE_ALL_STATIC(기본값): 정적 콘텐츠를 자동으로 캐시합니다. 캐시할 수 없다고 표시된 응답(Cache-Control 응답 헤더의 private 또는 no-store 지시문)은 캐시되지 않습니다. 동적 콘텐츠를 캐시하려면 콘텐츠에 유효한 캐싱 헤더가 있어야 합니다.

  • USE_ORIGIN_HEADERS: 원본에서 콘텐츠를 캐시하도록 유효한 캐싱 헤더를 설정해야 합니다. 이 헤더가 없는 응답은 Google 에지에서 캐시되지 않으며 요청마다 원본으로 완전히 이동해야 하므로 성능이 영향을 받고 원본 서버의 부하가 증가합니다.

  • FORCE_CACHE_ALL: Cache-Control 응답 헤더의 private 또는 no-store 지시문을 무시하고 모든 콘텐츠(성공적인 응답)를 캐시합니다. 이로 인해 사용자별 비공개(사용자 식별 가능) 콘텐츠를 캐시할 수 있습니다. Cloud Storage 버킷과 같이 비공개 또는 동적 콘텐츠를 제공하지 않는 백엔드에서만 이 모드를 사용 설정해야 합니다. 비공개 또는 동적 콘텐츠를 제공하는 백엔드에서는 이를 사용 설정하지 마세요.

API

백엔드 버킷의 경우 Method: backendBuckets.insert 또는 Method: backendBuckets.update API 호출을 사용합니다.

백엔드 서비스의 경우 Method: backendServices.insert 또는 Method: backendServices.update API 호출을 사용합니다.

다음 API 호출 중 하나를 사용합니다.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendBuckets/BACKEND_BUCKET
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices
PUT https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE

JSON 요청 본문에 다음 스니펫을 추가합니다.

"cdnPolicy": {
  "cacheMode": (CACHE_ALL_STATIC | USE_ORIGIN_HEADERS | FORCE_CACHE_ALL)

CACHE_MODE를 다음 중 하나로 바꿉니다.

  • CACHE_ALL_STATIC(기본값): 정적 콘텐츠를 자동으로 캐시합니다. 캐시할 수 없다고 표시된 응답(Cache-Control 응답 헤더의 private 또는 no-store 지시문)은 캐시되지 않습니다. 동적 콘텐츠를 캐시하려면 콘텐츠에 유효한 캐싱 헤더가 있어야 합니다.

  • USE_ORIGIN_HEADERS: 원본에서 콘텐츠를 캐시하도록 유효한 캐싱 헤더를 설정해야 합니다. 이 헤더가 없는 응답은 Google 에지에서 캐시되지 않으며 요청마다 원본으로 완전히 이동해야 하므로 성능이 영향을 받고 원본 서버의 부하가 증가합니다.

  • FORCE_CACHE_ALL: Cache-Control 응답 헤더의 private 또는 no-store 지시문을 무시하고 모든 콘텐츠(성공적인 응답)를 캐시합니다. 이로 인해 사용자별 비공개(사용자 식별 가능) 콘텐츠를 캐시할 수 있습니다. Cloud Storage 버킷과 같이 비공개 또는 동적 콘텐츠를 제공하지 않는 백엔드에서만 이 모드를 사용 설정해야 합니다.