가장자리에 데이터 저장

IMPORTANT
AEM Edge 함수는 현재 베타 버전입니다. 기능 및 설명서는 변경될 수 있습니다. 피드백을 받으려면 aemcs-edgecompute-feedback@adobe.com에 문의하십시오.
NOTE
샌드박스 프로그램에서는 구성, 시크릿 및 KV 스토어를 사용할 수 없습니다. 샌드박스가 아닌 환경 또는 RDE를 사용하여 KV 스토어를 테스트합니다.

AEM Edge 함수는 종종 데이터를 가장자리에 두고 방문자와 가까이에서 유지한 다음 원본을 왕복하지 않고 함수 호출 간에 재사용해야 합니다. AEM Edge 함수는 KV 스토어​를 통해 이 에지 데이터 저장소를 제공합니다.

KV 스토어는 런타임 시 읽고 쓰는 키-값 스토어입니다. 해당 데이터는 함수 호출 사이에 유지되므로 AEM Edge 함수 코드의 모든 부분에서 이전에 다른 부분이 기록한 내용을 읽을 수 있습니다. 계산된 결과를 캐시하거나, 리디렉션 맵을 유지하거나, 요청 간에 데이터를 공유하는 데 사용합니다.

KV 스토어를 사용하는 경우

배포 시 읽기 전용으로 설정한 configs과(와) 달리 KV 스토어는 런타임 시 읽고 씁니다. AEM Edge 함수에 대해 하나의 kv_default 저장소가 프로비저닝되며, 해당 모듈 또는 종단점은 해당 저장소에 읽고 쓸 수 있습니다.

configs
스토어
액세스
런타임 시 읽기 전용
런타임 시 읽기 및 쓰기
설정 기준
edgeFunctions.yaml에 배포 시
런타임 시 함수 코드
저장소 이름
config_default
kv_default
다음에 사용
환경당 정적 설정
런타임 시 변경되는 데이터

KV 스토어 활성화

edgeFunctions.yamldata 아래에 kvs: true을(를) functions의 동위 멤버로 설정합니다. 이 토글을 통해 AEM Edge 함수에 대한 kv_default 스토어를 프로비저닝할 수 있습니다.

# config/edgeFunctions.yaml
kind: "EdgeFunctions"
version: "1"
data:
  functions:
    - name: my-edge-function
  kvs: true # enable the KV store

Cloud Manager 구성 파이프라인을 통해 또는 RDE에서 aio aem rde:install -t env-config ./config을(를) 사용하여 업데이트된 구성을 배포합니다. 자세한 내용은 AEM에서 Edge 기능 설정 또는 Edge Delivery Services에서 AEM Edge 기능 설정을 참조하십시오.

코드에서 읽기 및 쓰기

kv_default 스토어를 연 다음 get(key)put(key, value, options?)을(를) 호출합니다. 두 호출은 모두 비동기적입니다. 값은 문자열로 저장되므로 쓰기 시 JSON.stringify()을(를) 사용하여 개체를 serialize합니다. 읽을 때 get(key)에서 반환된 항목이 text(), json()arrayBuffer()을(를) 노출하므로 entry.json()을(를) 호출하여 저장된 개체를 구문 분석합니다.

// src/index.js or handler file
import { KVStore } from "fastly:kv-store";

// open the KV store
const kv = new KVStore("kv_default");

// write a value (serialize objects to a string)
await kv.put("greeting", JSON.stringify({ text: "Hello from the edge" }));

// read a value (get returns an entry, or null when the key is missing)
const entry = await kv.get("greeting");
const value = entry ? await entry.json() : null;

KV 스토어로 데이터 캐시

일반적인 패턴은 캐시 전용입니다. 핸들러가 먼저 KV 스토어에서 읽고 누락된 경우에만 백엔드를 호출합니다. put()ttl(초)을(를) 전달하면 스토어에서 자동으로 항목을 만료하므로 직접 만료를 추적하지 않습니다.

// src/lib/cache.js
import { KVStore } from "fastly:kv-store";

const kv = new KVStore("kv_default");

// Read a cached value, or null when the key is missing or expired
export async function getCached(key) {
  const entry = await kv.get(key);
  return entry ? await entry.json() : null;
}

// Cache a value; the store expires it after ttlSeconds
export async function setCached(key, payload, ttlSeconds) {
  await kv.put(key, JSON.stringify(payload), { ttl: ttlSeconds });
}

핸들러에서 캐시를 읽고 실패 시 백엔드로 폴백한 다음 결과를 다시 씁니다.

let data = await getCached("inventory:west");
if (!data) {
  data = await fetchFromBackend();
  await setCached("inventory:west", data, 60); // store expires the entry after 60 seconds
}

KV 스토어 채우기

edgeFunctions.yaml에서 KV 스토어에 배포 시간 시드가 없습니다. 함수 코드는 런타임에 모든 값을 기록합니다. 두 가지 일반적인 접근 방식은 다음과 같습니다.

  • 요청 시. 위의 캐시 보조 패턴처럼 항목을 처음 요청할 때 채웁니다.
  • 유지 관리 끝점을 통해. 항목을 재구축하는 끝점을 노출한 다음 일정에 따라 호출합니다. 이 기능은 리디렉션 맵과 같이 크기가 크고 변경 속도가 느린 데이터 세트에 적합합니다.

지침

  • 코드를 읽거나 쓰기 전에 kvs: true을(를) 사용하여 스토어를 사용하도록 설정합니다.
  • 저장소는 모든 AEM Edge 함수 코드에서 공유됩니다. 서로 다른 모듈 또는 끝점이 충돌하지 않도록 redirect: 또는 inventory:과(와) 같은 접두사를 사용하여 키에 네임스페이스를 지정하십시오.
  • 키 이름은 대소문자를 구분합니다.
  • 값은 문자열입니다. 개체를 JSON.stringify()(으)로 serialize하고 읽을 때 구문 분석합니다.
  • 누락된 키를 처리합니다. 키가 없으면 get()에서 null을(를) 반환합니다.
  • KV 매장은 결국 일관성이 있습니다. 쓰기 직후 읽기는 이전 값을 잠시 반환할 수 있으므로 중요한 논리에 대한 쓰기 후 읽기에 의존하지 않도록 합니다.

완전한 예

AEM Edge 기능 예 저장소에는 전체 config/ 및 코드가 있는 KV 스토어 예가 포함됩니다.

저장소
보여 주는 내용
리디렉션 맵 조회
publish-delivery-redirect-maps
요청 시 KV 스토어에서 리디렉션 대상을 읽고, 유지 관리 끝점을 통해 공유된 맵 항목을 다시 빌드하고, 누락시 원본으로 폴백합니다

추가 리소스

recommendation-more-help
experience-manager-learn-help-cloud-service