AEM Edge 함수에서 캐싱 edge-functions-caching

IMPORTANT
AEM Edge 함수는 공개 베타 기능이므로 Adobe에 연결하여 활성화하지 않고도 셀프서비스 방식으로 사용해 볼 수 있습니다. Adobe에서는 사용 사례를 설명하기 위해 aemcs-edgecompute-feedback@adobe.com에 전자 메일을 보내서 Adobe에서 이를 지원하고 모든 지침을 제공할 것을 권장합니다. 프로덕션 트래픽에 대한 기능을 배포하기 전에 Adobe에 문의하는 것이 특히 중요합니다.
AEM Edge 기능 Beta을 사용하면 아직 개발 중이므로 기술의 올바른 기능이나 데이터 가용성에 의존해서는 안 된다는 것을 알게 됩니다. 이 기능은 있는 그대로 제공되며, 예고 없이 변경될 수 있으며, 생산에 포함되지 않습니다.

이 페이지에서는 2개 캐시 아키텍처, 코드에서 캐싱 동작을 제어하는 방법, 콘텐츠가 변경될 때 캐시 항목을 제거하는 방법 등을 포함하여, AEM Edge 기능 내에서 캐싱이 작동하는 방식에 대한 자세한 기술 지침을 제공합니다.

AEM as a Cloud Service 캐싱이 작동하는 방식에 대한 일반적인 배경은 AEM as a Cloud Service에서 캐싱AEM as a Cloud Service의 CDN을 참조하십시오. 코드 예제는 AEM Edge 함수 빌러플레이트 — 캐싱을 참조하십시오.

캐싱 아키텍처 architecture

AEM Edge 함수는 CDN과 함수가 가져오는 백엔드 서비스 사이에 배치됩니다. 이러한 백엔드는 AEM 게시 인스턴스, 타사 API, 외부 데이터베이스 또는 코드 호출의 HTTP 끝점일 수 있습니다. 요청 흐름에 각각 독립적으로 작동하는 2개의 고유한 캐시​가 있습니다.

Browser → AEM CDN (CDN Cache) → AEM Edge Functions (Fetch Cache) → Backend (AEM, APIs, etc.)
캐시
캐시하는 항목
영향을 주는 요소
제거 방법
CDN 캐시
브라우저에 대한 Edge 함수의 응답
Edge 함수(Cache-Control, Surrogate-Control, Surrogate-Key)에 의해 설정된 응답 헤더
CDN 캐시 제거 API
Edge 함수 가져오기 캐시
Edge 함수 내의 fetch() 호출에 대한 백엔드 응답 및 Core Cache API를 통해 저장된 데이터
백 엔드 응답 헤더, 가져오기 호출의 CacheOverride 또는 코어 캐시 API를 통한 프로그래밍 대리 키
aio aem edge-functions purge-cache CLI 명령 또는 purgeSurrogateKey()

각 캐시에는 서로 다른 범위, 다른 컨트롤 및 다른 제거 메커니즘이 있으므로 이 두 레이어 아키텍처를 이해하는 것은 필수적입니다. 효과적인 캐싱은 두 수준에서 의도적인 구성이 필요합니다.

CDN 캐시(외부) cdn-cache

CDN 캐시는 브라우저와 Edge 함수 사이에 있습니다. Edge 함수의 응답​을 캐시합니다. Edge 함수 응답에서 표준 HTTP 캐시 헤더를 설정하여 해당 동작을 제어할 수 있습니다.

return new Response(body, {
  headers: {
    'Surrogate-Key': 'page-home product-123',
    'Cache-Control': 'public, max-age=3600'
  }
});

여러 개의 서로게이트 키는 공백으로 구분됩니다. 이러한 대리 키는 CDN 캐시 제거 API를 사용하여 CDN 캐시를 제거하는 데 사용할 수 있습니다. 대리 키 삭제의 개념은 리소스 그룹의 캐시 제거에 설명된 것과 같습니다. 중요한 차이점은 여기에 있는 CDN 대리 키가 백엔드가 아닌 Edge 함수 코드에 의해 설정된다는 것입니다.

Edge 기능 가져오기 캐시(내부) fetch-cache

Edge 함수 가져오기 캐시는 Edge 함수와 이 함수가 호출하는 백엔드 사이에 있습니다. Edge 함수 코드 내에서 수행된 fetch() 호출에 대한 백 엔드의 응답​을 캐시합니다. 또한 코어 캐시 API 또는 단순 캐시 API를 통해 코드가 저장하는 모든 데이터를 보유합니다. 프로그래밍 방식의 캐싱 인터페이스를 통해 캐시되는 항목, 캐시되는 기간 및 대체 키를 세부적으로 제어할 수 있습니다.

Edge 함수의 송신 응답에 설정한 헤더가 영향을 미치거나 — 백엔드의 응답 헤더만, 가져오기 호출의 CacheOverride 옵션 또는 Core Cache API에 쓸 때 프로그래밍 방식으로 할당하는 대리 키가 영향을 미칩니다. 영향을 받지 않습니다.

NOTE
브라우저에 대한 Edge 함수의 발신 응답​에 설정한 Surrogate-Key 헤더는 이 내부 캐시가 아닌 외부 CDN 캐시​를 제어합니다. 내부 캐시의 대리 키는 백엔드의 Surrogate-Key 응답 헤더 또는 Core Cache API에 쓸 때 할당하는 키에서 가져옵니다.

백엔드 응답 캐싱 cache-override

특정 기간 동안 백엔드 응답을 캐시하려면 다음을 수행합니다.

import { CacheOverride } from "fastly:cache-override";

const response = await fetch(request, {
  backend: "my-origin",
  cacheOverride: new CacheOverride({ ttl: 300 })
});

캐시 우회 cache-pass

가져오기 캐시를 완전히 무시하고 항상 백엔드에서 가져오려면 pass 모드를 사용하십시오.

import { CacheOverride } from "fastly:cache-override";

const response = await fetch(request, {
  backend: "my-origin",
  cacheOverride: new CacheOverride({ mode: "pass" })
});

캐시 삭제 cache-purging

캐시된 콘텐츠가 부실해지면 명시적으로 제거해야 합니다. 두 캐시는 독립적으로 작동하므로 무효화하는 레이어와 상호 작용하는 방법을 이해하는 것이 중요합니다.

두 레이어 간 삭제 조정 coordinating-purges

Edge 함수는 CDN의 백엔드에 있으므로(원본 선택기를 통해 연결 가능), 다른 캐시 레이어 없이 하나의 캐시 레이어를 삭제하면 예기치 않은 결과가 발생할 수 있습니다.

  1. CDN 캐시만 제거하는 중 다음 요청에서 Edge 함수를 호출하게 됩니다. Edge 함수의 가져오기 캐시에 오래된 데이터가 여전히 있으면 이전 콘텐츠가 반환되고 CDN이 이 콘텐츠를 다시 캐시합니다.
  2. Edge 함수 캐시만 지우는​은(는) 내부 상태를 지우지만 CDN은 만료되거나 별도로 삭제될 때까지 이전에 캐시된 복사본을 계속 제공합니다.

모범 사례: 기본 데이터가 변경되면 모두 캐시를 제거하십시오. 외부 레이어에는 CDN 캐시 제거 API를 사용하고 내부 Edge 함수 레이어에는 purge-cache(또는 purgeSurrogateKey())을(를) 사용하십시오. 두 레이어 모두에서 일관된 대리 키를 사용하면 조정된 무효화가 간단해집니다. 이 패턴의 전체 예제를 보려면 AEM Edge 함수 보일러판 — 제거를 참조하십시오.

CDN 캐시 삭제 purge-cdn-cache

외부 CDN 캐시(CDN 계층에서 캐시된 Edge 함수의 응답)를 제거하려면 CDN 캐시 제거 API를 사용하십시오. CDN에 캐시된 모든 AEM as a Cloud Service 컨텐츠에 사용되는 것과 동일한 제거 메커니즘입니다. 단계별 지침은 CDN 캐시를 제거하는 방법을 참조하십시오.

AEM as a Cloud Service 아키텍처에서 Edge 함수는 원본 선택기를 통해 CDN에서 트래픽을 수신합니다(CDN 라우팅 참조). 전체 요청 흐름은 다음과 같습니다.

Client → AEM CDN (VCL) → Origin Selector → Edge Function → Backend

CDN은 Edge 함수에서 반환된 최종 응답을 캐시합니다. CDN 제거는 외부 캐시 응답을 only​지웁니다. Edge 함수의 내부 캐시에 영향을 주지 않습니다.

Edge 기능 가져오기 캐시 제거 purge-fetch-cache

purge-cache CLI 명령은 Edge 함수 가져오기 캐시(Edge 함수 내에 캐시된 백 엔드 응답)를 삭제합니다. 외부 CDN 캐시를 not 제거합니다. 전체 CLI 옵션 및 플래그에 대해서는 purge-cache 명령 참조를 참조하십시오.

대리 키 출처 surrogate-key-origin

제거 명령에 사용된 서로게이트 키는 저장 당시 캐시된 콘텐츠에 태그가 지정된 키와 일치해야 합니다. 이는 AEM CDN에서 사용된 대리 키 기반 제거와 동일한 개념이지만 Edge 함수의 내부 캐시에 적용됩니다. 이러한 키는 다음에서 가져옵니다.

  • Edge 함수가 가져올 때 백엔드가 반환하는 Surrogate-Key 응답 헤더입니다.
  • 코어 캐시 API에 쓸 때 프로그래밍 방식으로 할당하는 키(예: 캐시 항목을 삽입할 때 surrogateKeys 옵션을 통해).

예를 들어 백엔드가 다음에 응답하는 경우:

HTTP/1.1 200 OK
Content-Type: text/html
Surrogate-Key: page-about product-456 category-shoes
Cache-Control: public, max-age=3600

그러면 캐시된 응답에 page-about, product-456category-shoes 세 개의 대리 키가 태그가 지정됩니다. 나중에 다음 키 중 하나를 사용하여 제거할 수 있습니다.

# Purge all cached content tagged with "product-456"
aio aem edge-functions purge-cache <function-name> --surrogateKey product-456

# Purge multiple keys at once
aio aem edge-functions purge-cache <function-name> -k page-about -k category-shoes
TIP
콘텐츠 모델에 매핑되는 대리 키 이름 지정 규칙을 선택합니다(예: 페이지 경로(page-about), 콘텐츠 ID(product-456) 또는 콘텐츠 유형(category-shoes)). 이렇게 하면 콘텐츠가 변경될 때 타깃팅된 캐시가 무효화됩니다.

모두 제거 purge-all

# Purge all cached content (use with caution)
aio aem edge-functions purge-cache <function-name> --all

소프트 삭제 soft-purge

--soft 플래그를 사용하여 소프트 제거를 수행합니다. 이 경우 오래된 항목을 캐시에 보관하고 오래된 유효성 재검사를 활성화하면서 백엔드 로드를 줄입니다.

aio aem edge-functions purge-cache <function-name> --surrogateKey product-456 --soft

프로그램 삭제 programmatic-purge

purgeSurrogateKey을(를) 사용하여 Edge 함수 코드 내에서 프로그래밍 방식으로 대리 키를 제거할 수도 있습니다.

import { purgeSurrogateKey } from "fastly:compute";

// Hard purge (immediate removal)
purgeSurrogateKey("product-456");

// Soft purge (retain stale entries for revalidation)
purgeSurrogateKey("product-456", true);
CAUTION
캐시된 콘텐츠를 모두 지우면 백엔드에 대한 트래픽이 증가합니다. --all 플래그를 신중하게 사용하고 가능한 경우 타깃팅된 대리 키 삭제를 선호합니다.
recommendation-more-help
experience-manager-cloud-service-help-main-toc