오래된 콘텐츠 제공

이 페이지에서는 Cloud CDN을 사용하여 오래되고 만료된 콘텐츠를 제공하는 방법을 설명합니다. 오래된 콘텐츠를 제공하면 원본 서버에 연결할 수 없거나 Cloud CDN에 오류가 반환되는 경우 Google의 전역 캐시가 콘텐츠를 계속 제공할 수 있습니다.

이렇게 하는 이유는 다음과 같습니다.

  • 사용자에게 오류를 반환하는 것보다 사용자에게 오래된 콘텐츠를 제공하는 것이 더 나을 수 있습니다.
  • 오래된 콘텐츠를 제공하면 캐시가 방금 만료된 콘텐츠에 대한 요청을 받은 경우 지연 시간을 피할 수 있습니다. 캐시는 백엔드에 대한 동기식 재검증을 기다릴 필요 없이 방금 만료된 오래된 콘텐츠를 제공하며 백그라운드에서 콘텐츠를 비동기식으로 재검증합니다.

stale-while-revalidate 설정은 캐시 항목 만료 시간을 초과하는 지정된 시간(초) 동안 가능한 경우 캐시의 기존 콘텐츠를 제공하며 원본으로 콘텐츠를 재검증합니다.

stale-while-revalidate HTTP 응답 헤더를 설정하여 원본에서 헤더를 설정할 수 있습니다.

Cloud CDN은 cdnPolicy.serveWhileStale 설정을 통해 사용자를 대신하여 이 기능을 사용 설정할 수 있습니다. 이 설정은 응답이 만료된 후 Cloud CDN이 오래된 버전을 계속 제공할 수 있는 시간을 나타냅니다. 기본적으로 이 시간은 86400s(1일)입니다.

serveWhileStale 설정은 stale-while-revalidatestale-if-error HTTP 캐싱 기능을 모두 결합합니다.

기본값, 최솟값, 최댓값은 다음과 같습니다.

  • 기본값: 86,400초(1일)
  • 최소: 0초(기능 사용 중지)
  • 최대: 604,800초(1주)

오래된 콘텐츠는 max-age, s-max-age 또는 Expires 헤더에서 정의된 캐시 항목 만료 시간을 지난 특정 한도 시간에 도달할 때까지 제공됩니다. 자세한 내용은 만료 시간 및 유효성 검사 요청을 참조하세요

Cloud CDN 에지 캐시에 오래된 상태인 제공할 객체의 캐시된 사본이 없거나 객체가 최대 오래된 콘텐츠 TTL에 도달하면 Cloud CDN은 원본으로 콘텐츠를 동기식으로 재검증합니다. 그 시점에 원본이 오류를 반환하면 Cloud CDN은 원본 오류를 반환합니다.

클라이언트 max-stale 요청 지시문

클라이언트는 max-stale 캐시 제어 지시문을 지정하여 오래된 콘텐츠 제공 서비스 시간이 더 짧도록 요청할 수 있습니다. 지정한 경우 이 지시문은 클라이언트가 허용하는 오래된 정도를 제어합니다.

캐시된 콘텐츠가 클라이언트의 max-stale 값보다 오래된 경우 Cloud CDN은 제공 전에 콘텐츠를 재검증합니다.

클라이언트는 원본의 serve-while-stale 구성 옵션 및 stale-while-revalidate 캐시 제어 지시문으로 구성된 값보다 더 큰 max-stale 값을 요청할 수 없습니다.

시작하기 전에

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

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

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

    gcloud components update
    

재검증 중에 오래된 콘텐츠 제공

콘솔

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

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
  6. 창 하단에서 고급 구성을 클릭합니다.
  7. 오래된 경우에도 제공에서 다음 옵션 중 하나를 선택합니다.
    • 1분
    • 5분
    • 10분
    • 30분
    • 1일(권장)
    • 7일
  8. 업데이트를 클릭합니다.
  9. 업데이트를 다시 클릭합니다.

gcloud

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

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

gcloud beta compute backend-buckets (create | update) BACKEND_BUCKET_NAME
    --serve-while-stale=SECONDS
gcloud beta compute backend-services (create | update) BACKEND_SERVICE_NAME
    --serve-while-stale=SECONDS

예를 들면 다음과 같습니다.

gcloud beta compute backend-services update my-backend-service
    --serve-while-stale=180s

api

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

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

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

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

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

"cdnPolicy": {
  "serveWhileStale": SECONDS
}

오래된 콘텐츠 제공 사용 중지

콘솔

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

    부하 분산 페이지로 이동

  2. 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
  3. 수정 을 클릭합니다.
  4. 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
  5. Cloud CDN 사용 설정이 선택되지 않았는지 확인합니다.
  6. 창 하단에서 고급 구성을 클릭합니다.
  7. 오래된 경우에도 게재에서 오래된 경우에는 제공 사용 중지를 선택합니다.
  8. 업데이트를 클릭합니다.
  9. 업데이트를 다시 클릭합니다.

gcloud

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

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

gcloud beta compute backend-services (create | update) (BACKEND_SERVICE_NAME | BACKEND_BUCKET_NAME)
    --no-serve-while-stale

api

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

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

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

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

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

"cdnPolicy": {
  "serveWhileStale": 0
}