음성 캐싱 사용

이 페이지는 Cloud CDN으로 음성 캐싱을 사용하는 방법을 설명합니다. 음성 캐싱을 사용하면 각 상태 코드에 서로 다른 TTL을 설정할 수 있습니다.

이렇게 하는 이유는 일반적인 오류나 리디렉션을 위해 캐싱을 세밀하게 제어해야 하기 때문입니다. 이렇게 하면 응답 지연 시간이 단축되므로 원본의 부하를 줄이고 최종 사용자 환경을 개선할 수 있습니다.

시작하기 전에

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

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

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

    gcloud components update
    

상태 코드 및 기본 TTL

음성 캐싱은 다음 표에 나열된 특정 상태 코드에 적용됩니다.

Cloud CDN은 다음과 같은 기본 TTL을 상태 코드에 적용합니다.

상태 코드 의미 TTL
HTTP 300 다중 선택 10분
HTTP 301 및 308 영구 리디렉션 10분
HTTP 302 및 307 임시 리디렉션 기본적으로 캐시되지 않음
HTTP 404 찾을 수 없음 120초
HTTP 405 메서드 없음 60초
HTTP 410 없음 120초
HTTP 451 법적 사유로 사용할 수 없음 120초
HTTP 501 구현되지 않음 60초

음성 캐싱을 사용하여 이러한 기본값을 재정의하면 지정된 HTTP 상태 코드에 캐시 TTL을 설정할 수 있습니다.

음성 캐싱 설정

음성 캐싱을 사용하면 성공뿐만 아니라 실패도 캐시하도록 서비스를 구성할 수 있습니다. 이를 통해 Cloud CDN은 성공적인 응답을 생성하는 요청으로부터 출처를 보호하는 것과 마찬가지로 오류를 생성하는 요청(예: 404 Not Found)으로부터 출처를 보호할 수 있습니다.

콘솔

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

    부하 분산 페이지로 이동

  2. 외부 애플리케이션 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 창 하단에서 고급 구성을 클릭합니다.
  7. 음성 캐싱 사용 설정을 클릭합니다.
  8. 음성 캐싱 정책 추가를 클릭합니다.
    1. HTTP 상태 코드를 입력합니다.
    2. 캐시 TTL(수명)을 선택합니다.
  9. 업데이트를 클릭합니다.
  10. 업데이트를 다시 클릭합니다.

gcloud

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

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

gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --negative-caching
gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --negative-caching

예를 들어 상태 코드 404이 있는 응답을 60초 동안 캐시하도록 설정하고 상태 코드가 405인 응답을 120초 동안 캐시하도록 설정하는 것과 같이 특정 오류 응답 2개에 대해서만 음성 캐싱을 사용 설정하려면 다음일 실행합니다.

gcloud compute backend-services update BACKEND_SERVICE_NAME \
    --negative-caching \
    --cache-mode=CACHE_ALL_STATIC \
    --default-ttl=86400 \
    --negative-caching-policy='404=60,405=120'

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": {
  "negativeCaching": ON,
  "negativeCachingPolicy": [
    {
      "code": STATUS_CODE,
      "ttl": TTL_SECONDS
    }
  ]
}

negativeCachingPolicy 설정을 구성하려면 음성 캐싱을 사용 설정해야 합니다. 정책을 생략하고 negativeCaching을 사용 설정하면 Cloud CDN은 상태 코드 및 기본 TTL에 나열된 기본값을 사용합니다.

음성 캐싱 정책을 지정할 때는 캐시할 모든 응답 코드에 캐시 TTL을 지정해야 합니다. Cloud CDN은 정책이 존재하면 어떠한 기본 음성 캐싱도 적용하지 않습니다.

STATUS_CODE에는 다음 HTTP 상태 코드를 지정할 수 있습니다.

  • 300, 301, 302, 307, 308
  • 404, 405, 410, 421, 451
  • 501

각 상태 코드에는 응답을 캐시할 시간(초)을 지정할 수 있습니다. 상태 코드에 대한 음성 캐싱을 사용 중지하려면 음성 캐싱 정책에서 코드를 제외합니다.

최대 허용 값은 1, 800초(30분)입니다. 하지만 자주 액세스되지 않는 객체는 정의된 TTL 이전에 캐시에서 삭제될 수 있습니다.

캐시 모드가 CACHE_ALL_STATIC 또는 USE_ORIGIN_HEADERS로 설정되면 Cache-Control 또는 Expires 헤더가 없는 지정된 응답 코드가 있는 응답에 음성 캐싱이 적용됩니다.

캐시 모드가 FORCE_CACHE_ALL로 설정되면 음성 캐싱이 출처에서 설정한 모든 캐싱 헤더를 재정의하고, Cloud CDN은 TTL에 지정된 기간 동안 응답을 캐시하거나 TTL이 설정되지 않은 경우 어떠한 응답도 캐시하지 않습니다.

또한 캐시 모드가 FORCE_CACHE_ALL로 설정되면 Cloud CDN은 Cache-Control 헤더에서 클라이언트로 전송하는 max-age도 수정합니다. 특히, 특정 오류에 TTL 설정이 구성되어 있으면 Cloud CDN은 해당 TTL 설정과 client_ttl 구성 설정 중 더 작은 값을 사용하고 해당 값으로 Cache-Control: public,max-age=N 헤더를 전송합니다. 특정 오류에 TTL 설정이 구성되어 있지 않으면 Cloud CDN은 출처에서 보낸 Cache-Control 헤더를 모두 삭제합니다. 또한 Cloud CDN은 출처에서 보낸 Expires 헤더도 항상 모두 삭제합니다.

처음에 원본에 음성 캐싱이 사용 설정되었지만 이후에 수동으로 또는 특정 응답 코드에 대한 캐싱을 중지하여 사용 중지된 경우, 캐시된 오류 응답은 Cache-Control 또는 Expires 헤더를 기준으로만 유효한 것으로 간주됩니다. 따라서 음성 캐싱이 사용 중지되면 헤더에 캐싱 기간 지시어가 없는 응답이 캐시에서 제공되지 않습니다.

Cloud CDN은 GET 요청에 대한 응답으로 캐싱합니다. 자세한 내용은 캐시 가능한 콘텐츠를 참조하세요.

각 캐시 항목은 캐시 키로 식별됩니다.

음성 캐싱 사용 중지

콘솔

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

    부하 분산 페이지로 이동

  2. 외부 애플리케이션 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 창 하단에서 고급 구성을 클릭합니다.
  7. 음성 캐싱 사용 설정 옆의 체크박스를 선택 해제합니다.
  8. 업데이트를 클릭합니다.
  9. 업데이트를 다시 클릭합니다.

gcloud

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

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

gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-negative-caching

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": {
  "negativeCaching": OFF
}