이 페이지에서는 Cloud CDN을 사용하여 오래되고 만료된 콘텐츠를 제공하는 방법을 설명합니다. 오래된 콘텐츠를 제공하면 원본 서버에 연결할 수 없거나 Cloud CDN에 오류가 반환되는 경우 Google의 전역 캐시가 콘텐츠를 계속 제공할 수 있습니다.
이렇게 하는 이유는 다음과 같습니다.
- 사용자에게 오류를 반환하는 것보다 사용자에게 오래된 콘텐츠를 제공하는 것이 더 나을 수 있습니다.
- 오래된 콘텐츠를 제공하면 캐시가 방금 만료된 콘텐츠에 대한 요청을 받은 경우 지연 시간을 피할 수 있습니다. 캐시는 백엔드에 대한 동기식 재검증을 기다릴 필요 없이 방금 만료된 오래된 콘텐츠를 제공하며 백그라운드에서 콘텐츠를 비동기식으로 재검증합니다.
stale-while-revalidate
설정은 캐시 항목 만료 시간을 초과하는 지정된 시간(초) 동안 가능한 경우 캐시의 기존 콘텐츠를 제공하며 원본으로 콘텐츠를 재검증합니다.
stale-while-revalidate
HTTP 응답 헤더를 설정하여 원본에서 헤더를 설정할 수 있습니다.
Cloud CDN은 cdnPolicy.serveWhileStale
설정을 통해 사용자를 대신하여 이 기능을 사용 설정할 수 있습니다. 이 설정은 응답이 만료된 후 Cloud CDN이 오래된 버전을 계속 제공할 수 있는 시간을 나타냅니다. 기본적으로 이 시간은 86400s
(1일)입니다.
serveWhileStale
설정은 stale-while-revalidate
및 stale-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
재검증 중에 오래된 콘텐츠 제공
콘솔
- Google Cloud Console에서 부하 분산 페이지로 이동합니다.
- 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
- 수정 을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
- Cloud CDN 사용 설정이 선택되어 있는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 오래된 경우에도 제공에서 다음 옵션 중 하나를 선택합니다.
- 1분
- 5분
- 10분
- 30분
- 1일(권장)
- 7일
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
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 }
오래된 콘텐츠 제공 사용 중지
콘솔
- Google Cloud Console에서 부하 분산 페이지로 이동합니다.
- 외부 HTTP(S) 부하 분산기의 이름을 클릭합니다.
- 수정 을 클릭합니다.
- 백엔드 구성에서 백엔드를 선택하고 수정 을 클릭합니다.
- Cloud CDN 사용 설정이 선택되지 않았는지 확인합니다.
- 창 하단에서 고급 구성을 클릭합니다.
- 오래된 경우에도 게재에서 오래된 경우에는 제공 사용 중지를 선택합니다.
- 업데이트를 클릭합니다.
- 업데이트를 다시 클릭합니다.
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 }