AEM Edge 함수에서 캐싱 edge-functions-caching
이 페이지에서는 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.)
Cache-Control, Surrogate-Control, Surrogate-Key)에 의해 설정된 응답 헤더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에 쓸 때 프로그래밍 방식으로 할당하는 대리 키가 영향을 미칩니다. 영향을 받지 않습니다.
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의 백엔드에 있으므로(원본 선택기를 통해 연결 가능), 다른 캐시 레이어 없이 하나의 캐시 레이어를 삭제하면 예기치 않은 결과가 발생할 수 있습니다.
- CDN 캐시만 제거하는 중 다음 요청에서 Edge 함수를 호출하게 됩니다. Edge 함수의 가져오기 캐시에 오래된 데이터가 여전히 있으면 이전 콘텐츠가 반환되고 CDN이 이 콘텐츠를 다시 캐시합니다.
- 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-456 및 category-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
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);
--all 플래그를 신중하게 사용하고 가능한 경우 타깃팅된 대리 키 삭제를 선호합니다.