TTL 설정 및 재정의 사용

이 페이지에서는 Cloud CDN에서 TTL 재정의를 사용하는 방법을 설명합니다. TTL 재정의는 Cloud CDN이 콘텐츠 유효성을 다시 검사하기 전에 콘텐츠를 캐시하는 기간을 세밀하게 제어합니다.

TTL 설정은 다음 표에 요약되어 있습니다.

  기본 TTL 최대 TTL 클라이언트 TTL
구성 이유 자주 변경되지 않는 콘텐츠의 캐시 적중률 향상 Cloud CDN이 원본 헤더에 지정된 것보다 자주 콘텐츠를 재검증하도록 강제 클라이언트가 Cloud CDN에 대한 콘텐츠를 더 자주 재검증하도록 강제
사용 시점 다음 중 하나에 해당합니다.
  • 캐시 모드 = FORCE_CACHE_ALL
  • 캐시 모드 = CACHE_ALL_STATIC, 콘텐츠 유형은 정적으로 캐시할 수 있으며 TTL은 원본 헤더(max-age, s-max-age 또는 Expires)에서 설정되지 않음
다음 사항에 모두 해당합니다.
  • 캐시 모드 = CACHE_ALL_STATIC
  • TTL이 원본 헤더(max-age, s-max-age 또는 Expires)에서 설정됨
  • 원본 헤더에 지정된 TTL이 최대 TTL 값보다 큼
다음 중 하나에 해당합니다.
  • 캐시 모드 = FORCE_CACHE_ALL, 클라이언트 TTL 값이 기본 TTL 값보다 작음
  • 캐시 모드 = CACHE_ALL_STATIC, 클라이언트 TTL은 원본 헤더(원본 헤더 정보가 없는 경우 기본 TTL)에 설정된 TTL보다 작음
기본값 3,600초(1시간) 86,400초(1일) 3,600초(1시간)
최대 허용 값 31,622,400초(1년) 31,622,400초(1년) 31,622,400초(1년)
참고 최대 TTL 이하여야 함

--default-ttl=0
: 응답이 원본에서 재검증되도록 강제
최대 TTL 이하여야 함

시작하기 전에

  • 캐시 모드를 읽어보세요.

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

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

    gcloud components update
    

기본 TTL 설정

자주 변경되지 않는 콘텐츠의 캐시 적중률을 향상시키려면 기본 TTL을 재정의하여 Cloud CDN이 원본에서 콘텐츠 유효성을 다시 검사하도록 하면 됩니다. 자주 액세스되지 않는 객체는 정의된 TTL 이전에 캐시에서 삭제될 수 있습니다.

캐시 모드가 FORCE_CACHE_ALL이면 기본 TTL은 원본 헤더에서 설정된 TTL이 있는 응답을 포함하여 모든 응답에 설정된 TTL을 덮어씁니다. 이 모드에서는 Cloud CDN이 클라이언트에 제공된 응답의 public 속성과 max-age 속성을 설정하므로 클라이언트에 기본 TTL이 표시됩니다.

CACHE_ALL_STATIC 모드의 경우, 유효한 TTL(max-age, s-max-age 또는 Expires 헤더)이 기존에 없는 응답의 원본에서 제공되는 캐시된 콘텐츠에 기본 TTL이 적용됩니다. CACHE_ALL_STATIC 모드에서는 기본 TTL이 클라이언트에 제공되는 Cache-Control 헤더를 수정하지 않습니다. CACHE_ALL_STATIC 모드에서 Cache-Control 헤더를 수정하려면 클라이언트 TTL을 설정해야 합니다.

캐시 모드가 원본 헤더(USE_ORIGIN_HEADERS)를 사용하도록 설정하면 Cloud CDN에서 max-age 또는 s-max-age 원본 지시문이나 Expires 헤더를 대신 사용하므로 기본 TTL 값은 적용되지 않고 설정될 수 없습니다.

Console

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

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 캐시 모드가 정적 콘텐츠 캐시(권장) 또는 모든 콘텐츠 강제 캐시인지 확인합니다. 캐시 모드가 Cache-Control 헤더에 기반한 원본 설정 사용인 경우 TTL 값을 재정의하는 것은 지원되지 않습니다.
  7. 기본 TTL에서 값을 선택합니다.
  8. 저장을 클릭합니다.

gcloud

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

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

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --default-ttl=DEFAULT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --default-ttl=DEFAULT_TTL

DEFAULT_TTL을 최대 31,622,400초(1년)로 바꿉니다.

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": {
  "defaultTtl": DEFAULT_TTL
}

DEFAULT_TTL을 최대 31,622,400초(1년)로 바꿉니다.

최대 TTL 설정

최대 TTL은 출처에서 제공하는 캐시된 콘텐츠의 Cloud CDN 내에 허용되는 최대 TTL을 지정합니다.

다음 중 하나가 참인 경우 응답의 TTL은 최대 TTL에 의해 제한됩니다.

  • 응답이 max-age 또는 s-maxage를 최대 TTL 값보다 높게 설정하려고 합니다.
  • 응답의 Expires 헤더가 향후 cdnPolicy.maxTtl 초를 초과합니다.

최대 TTL 설정은 클라이언트에 전송되는 max-age 값을 변경하지 않습니다. 자세한 내용은 최대 클라이언트 TTL 재정의를 참조하세요. 최대 TTL 설정은 Cloud CDN이 콘텐츠를 캐시하려는 기간에만 영향을 미칩니다.

이 설정은 캐시 모드가 CACHE_ALL_STATIC인 경우에만 사용됩니다. 최대 31,622,400초(1년)까지 허용됩니다. 자주 액세스되지 않는 객체는 정의된 TTL 이전에 캐시에서 삭제될 수 있습니다.

FORCE_CACHE_ALL을 사용하면 TTL이 항상 기본 TTL으로 설정되며 최대 TTL을 설정할 수 없습니다.

Console

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

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 캐시 모드가 정적 콘텐츠 캐시(권장)인지 확인합니다.
  7. 최대 TTL에서 값을 선택합니다.
  8. 저장을 클릭합니다.

gcloud

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

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

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --max-ttl=MAX_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --max-ttl=MAX_TTL

MAX_TTL을 최대 31,622,400초(1년)로 바꿉니다.

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": {
  "maxTtl": MAX_TTL
}

MAX_TTL을 최대 31,622,400초(1년)로 바꿉니다.

클라이언트 TTL 재정의

모든 캐시 모드에서 Cloud CDN은 Cache-Control 헤더를 클라이언트에 전달합니다.

클라이언트 TTL을 사용하면 브라우저 또는 클라이언트로 전송되는 항목에 최대 TTL을 설정하여 클라이언트에서 출처를 재검증할 필요 없이 Cloud CDN에 대해 콘텐츠를 재검증할 수 있습니다. 이렇게 하면 필요한 경우 Cloud CDN 내에서 콘텐츠가 무효화될 수 있으며 브라우저에서는 클라이언트 TTL이 만료되는 즉시 콘텐츠가 무효화된다는 것을 알 수 있게 됩니다.

FORCE_CACHE_ALL 모드에서 Cloud CDN은 일반적으로 클라이언트에서 프록시 캐싱에 내부적으로 사용하는 동일한 max-age를 클라이언트에 전달합니다. 하지만 클라이언트 TTL이 지정되고 값이 작은 경우 클라이언트 TTL이 대신 max-age 지시문에 있는 클라이언트에 전달됩니다. 마찬가지로 CACHE_ALL_STATIC 모드에서 클라이언트 TTL은 원본 서버에서 지정된 max-age를 고정하는 역할을 하여 브라우저 또는 클라이언트에 전송된 max-age가 구성된 클라이언트 TTL보다 크지 않도록 합니다. 원본에서 max-age를 지정하지 않으면 기본 TTL과 클라이언트 TTL 값보다 작은 값이 브라우저 또는 클라이언트에 전송된 max-age로 사용됩니다.

원본 응답에 Expires 헤더가 있는 경우 헤더가 삭제되고 적절한 TTL의 Cache-Control: max-age 지시문으로 바뀝니다.

클라이언트 TTL은 브라우저 또는 클라이언트로 전송되는 항목의 최댓값으로 간주되므로, 그렇지 않으면 전송되는 max-age 값을 늘리는 데 사용할 수는 없습니다. 브라우저 및 클라이언트로 전송되는 max-age 값이 원하는 값보다 작은 경우 원본에서 반환된 응답의 max-age 지시문 값을 늘리거나 기본 TTL 설정을 적절하게 조정해야 합니다.

일반적으로 1일 정도면 실용적으로 적절한 클라이언트 TTL 상한 설정입니다. 1일 설정이면 브라우저가 최소 해당 빈도로 체크인을 수행하고, Cloud CDN에서 발생했을 수 있는 캐시 오류를 학습할 수 있습니다. 원본 및 구성된 기본 TTL이 클라이언트로 전송되는 항목을 완전히 제어할 수 있도록 하려면 클라이언트 TTL을 더 높게(최대 1년까지) 설정할 수 있습니다. 이렇게 하면 브라우저가 Cloud CDN에 대해 검증을 자주 수행하지 않도록 하려는 경우에 유용할 수 있습니다.

Console

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

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 캐시 모드가 정적 콘텐츠 캐시(권장) 또는 모든 콘텐츠 강제 캐시인지 확인합니다. 캐시 모드가 Cache-Control 헤더에 기반한 원본 설정 사용인 경우 TTL 값을 재정의하는 것은 지원되지 않습니다.
  7. 클라이언트 TTL에서 최대 1년까지의 값을 선택합니다.
  8. 저장을 클릭합니다.

gcloud

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

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

gcloud compute backend-services (create | update) BACKEND_SERVICE_NAME
    --client-ttl=CLIENT_TTL
gcloud compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --client-ttl=CLIENT_TTL

CLIENT_TTL을 최대 31,622,400초(1년)로 바꿉니다.

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": {
  "clientTtl": CLIENT_TTL
}

CLIENT_TTL을 최대 31,622,400초(1년)로 바꿉니다.