캐시 무효화 개요

이 페이지는 Cloud CDN 캐시 무효화 개요를 설명합니다.

캐시 무효화란 무엇인가요?

객체가 캐시된 후 일반적으로 객체가 만료되거나 새 콘텐츠를 위한 공간 확보를 위해 삭제될 때까지 캐시에 남아 있습니다. 정상적인 만료 시간 전에 캐시에서 객체를 삭제해야 하는 경우가 있습니다. 이런 경우 캐시 무효화를 요청하여 캐시가 객체 또는 객체 집합을 무시하도록 할 수 있습니다.

캐시 삭제라고도 부르는 캐시 무효화는 캐시된 콘텐츠를 무효로 선언하는 프로세스입니다. 이 과정으로 인해 항목이 캐시에서 삭제되고 다음에 콘텐츠를 요청할 때 백엔드 서버에서 다시 채워집니다.

Cloud CDN은 무효화 요청에 캐시 태그(미리보기) 및 무효화 일치자(예: 호스트 및 URL 경로)를 사용하는 것을 지원합니다.

특정 캐시된 응답을 대상으로 지정하고 이후 캐시 채우기에서 백엔드 부하를 최소화하기 위해 무효화 파라미터를 조합할 수 있습니다.

캐시 무효화를 요청하기 전에 백엔드 서버가 올바른 콘텐츠를 반환하는지 확인하는 것이 중요합니다. 그렇지 않으면 Cloud CDN이 콘텐츠를 다시 요청할 때 잘못된 콘텐츠를 캐시할 수 있습니다.

무효화 요청에는 다음과 같이 비율 제한이 적용됩니다.

  • 캐시 태그(미리보기)의 경우 분당 최대 500개의 무효화 요청을 제출할 수 있습니다. 각 무효화 요청은 약 10초 후에 적용됩니다.
  • 다른 무효화 일치자의 경우 1분에 하나의 무효화를 제출할 수 있습니다. 각 무효화 요청은 약 1~3분 후에 적용됩니다.

Cloud CDN은 각 요청에 대해 객체 수 또는 무효화된 모든 객체의 총 크기를 제한하지 않습니다.

URL별 무효화

각 무효화 요청마다 무효화해야 하는 객체 또는 객체 조합을 식별하는 경로 패턴을 지정합니다. 경로 패턴은 /cat.jpg같은 특정 경로이거나 /pictures/*같은 전체 디렉터리 구조일 수 있습니다. 경로 패턴에는 다음 규칙이 적용됩니다.

  • 경로 패턴은 /로 시작되어야 합니다.
  • ? 또는 #은 포함할 수 없습니다.
  • / 뒤에 오는 마지막 문자를 제외하고 *를 포함해서는 안 됩니다.
  • /*로 끝나면 앞의 문자열은 프리픽스이며, 경로가 이 프리픽스로 시작하는 모든 객체는 무효화됩니다.

경로 패턴은 호스트 이름과 혹시 존재할 수 있는 ? 또는 # 사이의 모든 것인 URL의 경로 구성요소와 비교됩니다.

쿼리 문자열(예 : /images.php?image=fred.png)이 포함된 URL이 있는 경우 쿼리 문자열만 다른 객체를 선택적으로 무효화할 수 없습니다. 예를 들어 /images.php?image=fred.png/images.php?image=barney.png의 두 이미지가 있는 경우 fred.png만 무효화할 수 없습니다. images.php가 제공하는 모든 이미지를 무효화하려면 /images.php를 경로 패턴으로 사용하세요.

단일 호스트 무효화

캐시 무효화는 모든 호스트 이름의 경로를 무효화합니다. 예를 들어 example.comexample2.com이 동일한 부하 분산기를 가리키고 /images/cat.jpg를 무효화하는 경우 example.com/images/cat.jpgexample2.com/images/cat.jpg가 무효화됩니다.

명령어에 --host 플래그를 추가하여 호스트 중 하나에 대해서만 무효화를 제한할 수 있습니다.

캐시 태그별 무효화

캐시 태그(또는 서로게이트 키)를 사용하면 임의 메타데이터를 기준으로 콘텐츠를 무효화할 수 있습니다.

이러한 태그는 백엔드 응답에서 Cache-Tag HTTP 헤더로 정의됩니다. Cache-Tag HTTP 응답 헤더의 백엔드 캐시 태그가 클라이언트로 전송됩니다.

캐시 태그에는 다음과 같은 제한이 있습니다.

  • 태그당 120바이트를 초과하지 않아야 합니다.
  • 캐시된 객체당 총 태그 이름이 4KiB(4,096바이트)를 초과하지 않아야 합니다.
  • 객체당 태그 50개를 초과하지 않아야 합니다.

이러한 태그 한도가 초과되면 응답이 캐시되지 않으며 이 결정은 LoadBalancerLogEntry.cacheDecision에서 RESPONSE_CACHE_TAG_INVALID로 로깅됩니다.

무효화 요청당 최대 10개의 캐시 태그를 지정할 수 있습니다. 단일 무효화 요청에 여러 태그가 지정된 경우 논리 OR로 취급됩니다. 다음과 같이 캐시된 객체가 있는 예시를 고려해 보겠습니다.

  • js, 2020-12-23, prod 태그를 포함하는 캐시된 객체 #1
  • css, 2020-11-30, prod 태그를 포함하는 캐시된 객체 #2
  • img, 2020-11-30, staging 태그를 포함하는 캐시된 객체 #3

tags="prod,2020-11-30"와 일치하는 객체를 무효화하는 요청을 실행하면 캐시된 객체 3개 모두 무효화됩니다. 이 접근 방식을 사용하면 객체의 무효화하고자 할 때 가능한 모든 태그 조합을 알거나 지정할 필요가 없습니다.

캐시 태그와 함께 무효화 일치자를 지정하면 무효화 요청이 무효화 일치자와 일치하는 태그가 지정된 객체에만 적용됩니다. 다음과 같이 캐시된 객체의 예시를 살펴보겠습니다.

  • https://staging.example.com/img/cat.jpg URL 및 a 태그를 포함하는 캐시된 객체 #1
  • https://example.com/img/cat.jpg URL 및 a 태그를 포함하는 캐시된 객체 #2
  • https://staging.example.com/js/cat.js URL 및 a 태그를 포함하는 캐시된 객체 #3
  • https://staging.example.com/img/logo.jpg URL 및 b 태그를 포함하는 캐시된 객체 #4

--host="staging.example.com" --path="/img/*" --tags="a"와 일치하는 객체를 무효화하는 요청을 실행하면 객체 #1만 무효화됩니다. 객체 #2, #3, #4가 각각 호스트, 경로 또는 태그와 일치하지 않습니다.

무효화 지연 시간

Cloud CDN은 분산 시스템이므로 일부 캐시가 아직 무효화 요청을 처리하지 않았더라도 무효화가 완료되었다고 보고할 수 있습니다. 이러한 상황은 드물게 발생하며 자동으로 수정됩니다.

권장사항

무효화가 너무 많으면 캐시가 제공하는 요청이 폭증하여 인스턴스 또는 버킷에 영향을 미칠 수 있으므로 필요한 사항만 무효화합니다.

무효화는 일반적인 워크플로의 일부가 아닌 예외적인 상황에서 사용하기 위한 것입니다. 무효화는 웹브라우저 캐시 또는 제3자 인터넷 서비스 제공업체가 운영하는 캐시의 캐시된 사본에 영향을 주지 않습니다.

일상적인 무효화의 대안으로 응답에 사전에 적절한 만료 시간을 설정하거나, 서로 다른 버전의 콘텐츠에 다른 URL을 사용할 수 있습니다. 만료 시간에 대한 자세한 내용은 만료 시간 및 유효성 검사 요청을 참조하세요.

공유 VPC 프로젝트 간 서비스 참조를 사용한 무효화

캐시 무효화는 프런트엔드 프로젝트(즉, 부하 분산기의 전달 규칙, 대상 프록시, URL 맵을 포함하는 프로젝트)에서 구성됩니다. 따라서 기본적으로 공유 VPC 프로젝트 간 서비스 참조가 포함된 전역 외부 애플리케이션 부하 분산기를 사용하는 경우, 서비스 프로젝트 관리자에게는 캐시 무효화를 요청하는 데 필요한 권한이 없습니다.

캐시 무효화는 프런트엔드 프로젝트에서 부하 분산기 리소스를 구성하는 Identity and Access Management(IAM) 역할(예: Compute 네트워크 관리자 역할(roles/compute.networkAdmin))이 있는 주 구성원만 실행할 수 있습니다.

개별 프로젝트에서 백엔드 서비스 프로비저닝을 제어하는 서비스 관리자는 프런트엔드 프로젝트의 부하 분산기 관리자와 협력하여 프로젝트 간 서비스의 캐시 무효화를 수행할 수 있습니다. URL 재작성의 경우 무효화가 클라이언트가 전송하는 사전 재작성 호스트 및 경로와 일치하는지 확인합니다.

다음 단계

  • Cloud CDN 캐시된 콘텐츠를 무효화하는 방법을 알아보려면 캐시된 콘텐츠 무효화를 참조하세요.

  • 어떤 콘텐츠를 캐시할 수 있는지의 여부를 알아보려면 캐싱 개요를 참조하세요.