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

IMPORTANT
AEM Edge 함수는 베타 기능입니다. 기능 및 설명서는 예고 없이 변경될 수 있습니다. 조기 액세스 프로그램에 참여하고 피드백을 제공하려면 aemcs-edgecompute-feedback@adobe.com에 전자 메일을 보내세요.

이 페이지에서는 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