[Alpha]{class="badge informative"}
인스턴스 및 요청
브라우저에서 각 페이지 로드는 단일 방문자에게 제공되는 웹 SDK의 새 복사본을 시작합니다. 서버가 다릅니다. 오래 실행되는 한 프로세스가 많은 방문자의 요청을 처리하며, 종종 동시에 처리됩니다. 서버 SDK은 프로세스당 한 번 발생하는 작업과 각 방문자의 요청에 대해 발생하는 작업을 분리합니다.
- 프로세스당 한 번: 인스턴스를 만들고 서버가 시작될 때
configure을(를) 호출합니다. - 요청당 한 번:
forRequest을(를) 호출하여 요청한 방문자에게 범위가 지정된 핸들을 가져온 다음 해당 핸들에서sendEvent과(와) 같은 메서드를 호출합니다.
서버가 시작될 때 한 번 구성 configure-once
서버가 요청을 수락하기 전에 인스턴스 하나를 만들고 구성합니다. 구성을 완료하기 전에 호출하면 forRequest에서 오류가 발생하므로 configure이(가) 해결될 때까지 기다리십시오.
import { createInstance } from "@adobe/alloy-node";
const alloy = createInstance();
await alloy.configure({
datastreamId: "ebebf826-a01f-4458-8cec-ef61de241c93",
orgId: "ADB3LETTERSANDNUMBERS@AdobeOrg",
edgeCredentials: {
clientId: process.env.ADOBE_CLIENT_ID,
clientSecret: process.env.ADOBE_CLIENT_SECRET,
scopes: process.env.ADOBE_SCOPES.split(",")
}
});
옵션이 잘못되었기 때문에 configure이(가) 거부할 경우 인스턴스가 구성되지 않은 상태로 유지되며 forRequest은(는) configure에 대한 호출이 성공할 때까지 계속 발생합니다.
각 요청에 대해 forRequest 호출 for-request
들어오는 각 요청에 대해 forRequest을(를) 호출하고 들어오는 요청 개체를 전달하십시오. 반환된 핸들에 configure 및 forRequest을(를) 제외하고 인스턴스와 동일한 메서드가 있습니다.
다음 예제에서는 Node.js 기본 제공 node:http 모듈을 사용합니다. Express 또는 Fastify와 같이 수신 요청 개체를 제공하는 모든 프레임워크에서 동일한 패턴이 작동합니다.
import { createServer } from "node:http";
createServer(async (req, res) => {
const visitor = alloy.forRequest({ request: req });
try {
await visitor.sendEvent({
xdm: {
eventType: "web.webpagedetails.pageViews",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
}
});
} catch (error) {
console.error("Failed to send event to Adobe", error);
}
res.end("OK");
}).listen(3000);
런타임 또는 프레임워크가 Fetch API Request을(를) 처리기에 전달하고 그 대가로 Response이(가) 필요한 경우 동일한 패턴을 사용하십시오. 런타임 또는 프레임워크에 필요한 방식으로 처리기를 등록합니다.
async function handleRequest(request) {
const visitor = alloy.forRequest({ request });
try {
await visitor.sendEvent({
xdm: {
eventType: "web.webpagedetails.pageViews",
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
}
});
} catch (error) {
console.error("Failed to send event to Adobe", error);
}
return new Response("OK");
}
각 핸들은 configure에 전달한 옵션과 동일한 옵션으로 구성된 자체 SDK 인스턴스에서 지원됩니다. 핸들은 방문자 상태를 서로 공유하지 않으므로 한 방문자의 ID 또는 동의가 다른 방문자의 요청으로 유출될 수 없습니다.
request을(를) 전달하면 SDK이 방문자의 헤더(예: User-Agent, Accept-Language 및 X-Forwarded-For)를 Edge Network으로 전달할 수 있습니다. 컨텍스트 및 전달된 헤더를 참조하십시오.
공유된 항목 및 요청당 항목 scope
configure이(가) 한 번 설정합니다. 모든 핸들은 동일한 구성을 사용합니다.forRequest에 전달하는 cookie 서비스를 읽고 씁니다.storage 서비스를 forRequest에 전달하지 않는 한 각 핸들은 새 메모리 내 저장소를 가져옵니다.forRequest에 전달한 request에서 읽습니다.요청 간 ID 및 동의 identity
SDK은 웹 SDK과 동일한 방식으로 방문자의 ECID(Experience Cloud ID) 및 동의 환경 설정을 쿠키에 저장합니다. 서버에서 SDK은 사용자가 forRequest에 cookie 속성으로 전달하는 쿠키 서비스를 통해 이러한 쿠키를 읽고 씁니다.
cookie서비스를 전달하지 않는 경우 각 핸들은 빈 메모리 내 쿠키 저장소로 시작합니다. Edge Network은 모든 요청에 새 ECID를 할당하며setConsent(으)로 설정한 동의는 방문자의 다음 요청에 기억되지 않습니다.- 각 방문자의 요청에 대해 동일한 쿠키 데이터를 전달하는 경우 SDK에서 저장된 ID를 Edge Network으로 보내므로 방문자는 동일한 ECID를 유지합니다. 동의 환경 설정 도 이월됩니다.
SDK에는 HTTP Cookie 및 Set-Cookie 헤더를 읽고 쓰는 쿠키 서비스가 포함되어 있지 않습니다. 방문자의 ID와 요청 간 동의를 유지하려면 쿠키 서비스 인터페이스에 대한 자체 구현을 제공하십시오. 플랫폼 서비스를 참조하세요.
sendEvent이(가) 보내는 이벤트에는 쿠키 서비스를 전달하는지 여부에 관계없이 xdm.identityMap의 기본 ID가 포함되어야 합니다. ECID만으로는 이 요구 사항을 충족하지 않습니다.방문자 트래픽에 대한 최상위 인스턴스 방지 top-level
createInstance이(가) 반환하는 인스턴스에서 직접 sendEvent과(와) 같은 메서드를 호출할 수 있습니다. 이렇게 하면 설정을 테스트하거나 특정 방문자에게 속하지 않는 이벤트를 전송하는 데 유용합니다. 그러나 최상위 인스턴스는 프로세스 기간 동안 단일 인메모리 쿠키 저장소를 유지합니다. 이 페이지에서 수행된 모든 호출은 트리거된 방문자에 관계없이 동일한 ID를 공유합니다. 대신 각 방문자의 요청에 대해 forRequest 핸들을 사용하십시오.