이 페이지에서는 Cloud CDN을 사용하여 오래되고 만료된 콘텐츠를 제공하는 방법을 설명합니다. 오래된 콘텐츠를 제공하면 원본 서버에 연결할 수 없거나 Cloud CDN에 오류가 반환되는 경우 Google의 전역 캐시가 콘텐츠를 계속 제공할 수 있습니다.
이렇게 하는 이유는 다음과 같습니다.
- 사용자에게 오류를 반환하는 것보다 사용자에게 오래된 콘텐츠를 제공하는 것이 더 나을 수 있습니다.
- 오래된 콘텐츠를 제공하면 캐시가 방금 만료된 콘텐츠에 대한 요청을 받은 경우 지연 시간을 피할 수 있습니다. 캐시는 백엔드에 대한 동기식 재검증을 기다릴 필요 없이 방금 만료된 비활성 콘텐츠를 제공하며 별도의 재검증을 트리거합니다.
이 동작을 사용 설정하려면 백엔드가 응답 Cache-Control
헤더에 stale-while-revalidate
지시문을 지정하면 됩니다. 그러면 Cloud CDN에서 캐시 항목 만료 시간이 지난 후 지정된 시간(초) 동안 해당 캐시에서 콘텐츠를 제공합니다(사용 가능한 경우). 비동기적으로 Cloud CDN은 원본에서 콘텐츠를 다시 검증합니다.
Cloud CDN은 cdnPolicy.serveWhileStale
설정으로 사용자를 대신하여 이 기능을 사용 설정합니다. 이 설정은 응답이 만료된 후 Cloud CDN이 오래된 버전을 계속 제공할 수 있는 시간을 나타냅니다. 응답에 달리 지정되지 않은 경우 86400s
(1일)입니다.
Cloud CDN은 stale-if-error
지시문을 지원하지 않습니다. 이 지시문은 백엔드의 동기식 유효성 검사가 특정 오류 상태 코드와 함께 실패하지 않는 한 비활성 콘텐츠를 제공하지 않도록 캐시에 지시합니다.
기본값, 최솟값, 최댓값은 다음과 같습니다.
- 기본값: 86,400초(1일)
- 최소: 0초(기능 사용 중지)
- 최대: 604,800초(1주)
오래된 콘텐츠는 max-age
, s-maxage
또는 Expires
헤더에서 정의된 캐시 항목 만료 시간을 지난 특정 한도 시간에 도달할 때까지 제공됩니다. 자세한 내용은 만료 시간 및 유효성 검사 요청을 참조하세요
Cloud CDN 에지 캐시에 오래된 상태인 제공할 객체의 캐시된 사본이 없거나 객체가 최대 오래된 콘텐츠 TTL에 도달하면 Cloud CDN은 원본으로 콘텐츠를 동기식으로 재검증합니다. 그 시점에 원본이 오류를 반환하면 Cloud CDN은 원본 오류를 반환합니다.
로깅 및 사용자 에이전트
Cloud CDN에서 수행된 비동기식 요청은 비활성 콘텐츠를 제공하지 않을 때 발생하는 일반적인 재검증 요청과 마찬가지로 원본 서버에 나타납니다. 예외적으로 Cloud-CDN-Google
이 포함된 User-Agent
헤더로 태그가 지정됩니다.
비동기식 요청도 Cloud Logging에 별도로 로깅되므로 비활성 요청되는 사용자 요청은 두 가지 로그 항목을 생성합니다. 첫 번째는 실제로 사용자에게 제공되는 콘텐츠에 대한 것이고 다른 하나는 원본으로의 재검증 요청에 대한 것입니다. Cloud CDN은 동기식 재검증과 마찬가지로 특정 상황에서 조건부 요청을 보내거나 무조건적으로 콘텐츠를 다시 요청할 수 있습니다. 두 경우 모두 Cloud Logging에 로깅된 응답 코드는 Cloud CDN으로의 원본 요청에 해당합니다. 예를 들면 비조건부 요청인 경우 200 OK
이거나 사용자의 원본 응답이 조건부인 경우 304 Not Modified
입니다.
클라이언트 max-stale
요청 지시문
클라이언트는 max-stale
캐시 제어 지시문을 지정하여 오래된 콘텐츠 제공 서비스 시간이 더 짧도록 요청할 수 있습니다. 지정한 경우 이 지시문은 클라이언트가 허용하는 오래된 정도를 제어합니다.
캐시된 콘텐츠가 클라이언트의 max-stale
값보다 오래된 경우 Cloud CDN은 제공 전에 콘텐츠를 재검증합니다.
클라이언트는 원본의 serve-while-stale
구성 옵션 및 stale-while-revalidate
캐시 제어 지시문으로 구성된 값보다 더 큰 max-stale
값을 요청할 수 없습니다.
시작하기 전에
캐시 모드 및 정적 콘텐츠를 읽어보세요.
Cloud CDN이 사용 설정되어 있는지 확인합니다. 자세한 내용은 Cloud CDN 사용을 참조하세요.
필요한 경우 Google Cloud CLI를 최신 버전으로 업데이트합니다.
gcloud components update
재검증 중에 오래된 콘텐츠 제공
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 외부 애플리케이션 부하 분산기 이름을 클릭합니다.
- 수정을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택한 후 수정을 클릭합니다.
- Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 추가 CDN 옵션에서 오래된 경우에도 제공에 다음 옵션 중 하나를 선택합니다.
- 1분
- 5분
- 10분
- 30분
- 1일(권장)
- 7일
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
백엔드 버킷의 경우 --serve-while-stale
플래그와 함께 gcloud compute backend-buckets
create
명령어 또는 gcloud compute backend-buckets
update
명령어를 사용합니다.
백엔드 서비스의 경우 --serve-while-stale
플래그와 함께 gcloud compute backend-services
create
명령어 또는 gcloud compute backend-services
update
명령어를 사용합니다.
gcloud compute backend-buckets (create | update)BACKEND_BUCKET_NAME --serve-while-stale=SECONDS
gcloud compute backend-services (create | update)BACKEND_SERVICE_NAME --serve-while-stale=SECONDS
예를 들면 다음과 같습니다.
gcloud compute backend-services update my-backend-service --serve-while-stale=180s
백엔드 버킷의 경우 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": { "serveWhileStale":SECONDS }
오래된 콘텐츠 제공 사용 중지
- Google Cloud 콘솔에서 부하 분산 페이지로 이동합니다.
- 외부 애플리케이션 부하 분산기 이름을 클릭합니다.
- 수정을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택한 후 수정을 클릭합니다.
- Cloud CDN 사용 설정이 선택되지 않았는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 추가 CDN 옵션 > 오래된 경우에도 제공에서 오래된 경우에는 제공 사용 중지를 선택합니다.
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
백엔드 버킷의 경우 0
값으로 설정된 --serve-while-stale
플래그와 함께 gcloud compute backend-buckets
create
또는 gcloud compute backend-buckets
update
명령어를 사용합니다.
백엔드 서비스의 경우 gcloud compute backend-services
create
명령어 또는 gcloud compute backend-services
update
명령어를 --serve-while-stale
플래그 값(0
으로 설정)과 함께 사용합니다.
gcloud compute backend-services (create | update) (BACKEND_SERVICE_NAME |BACKEND_BUCKET_NAME ) --serve-while-stale=0
백엔드 버킷의 경우 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": { "serveWhileStale": 0 }