이 페이지에서

For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.

서버측 렌더링

JavaScript 서버 SDK와 JavaScript 클라이언트 SDK를 함께 사용하여 서버측 렌더링 환경을 생성하십시오.

완전한 예제를 보려면 GitHub의 experiment-node-server 데모 앱으로 이동하십시오.

설치

JavaScript 서버 SDK와 JavaScript 클라이언트 SDK를 모두 설치합니다.

npm install --save @amplitude/experiment-js-client @amplitude/experiment-node-server

서버 SDK 초기화

서버 스타트업 시 서버 SDK를 초기화합니다. 이 예제에서는 클라이언트 SDK Experiment 객체와 구별하기 위해 서버 SDK Experiment 객체를 ExperimentServer로 별칭화합니다.

js
let ExperimentServer;
if (typeof window === 'undefined') {
  console.debug('Initializing Server Experiment');
  ExperimentServer = require('@amplitude/experiment-node-server').Experiment.initialize(
    'server-IAxMYws9vVQESrrK88aTcToyqMxiiJoR',
    { debug: true },
  );
}
export { ExperimentServer };

요청 시 변형 가져오기

각 요청마다 서버측 SDK를 사용하여 변형을 가져옵니다. 그 결과, 피쳐 키를 변형 값에 매핑하는 일반 JavaScript 객체가 생성됩니다. 렌더링 코드가 서버측 및 클라이언트측 컨텍스트 모두에서 해당 결과에 액세스할 수 있는 위치에 결과를 저장합니다.

js
const allFlags = await experimentServer.fetchV2({
  id: 'userId',
});
// store the result where the rendering code can access it
global.appProps = { flags: allFlags };

렌더링 시 클라이언트 SDK 초기화

서버측 렌더링을 시작할 때 가져온 변형으로 클라이언트 SDK를 초기화합니다. 렌더 스코프가 접근할 수 있는 ExperimentClient를 인스턴스화합니다(예를 들어, React ContextProvider를 통해). 서버 측 컨텍스트에서는 매번 새로운 ExperimentClient를 생성합니다. 클라이언트측 컨텍스트에서는 ExperimentClient가 존재하지 않는 경우에만 새로 생성하십시오.

js
import { ExperimentClient } from '@amplitude/experiment-js-client';
let experimentClient;
const render = (appProps) => {
const isServerSide = typeof window === 'undefined';
  if (isServerSide) {
    console.debug('Initializing Client Experiment');
    // on the server, create a new ExperimentClient every time
    experimentClient = new ExperimentClient(
      'client-IAxMYws9vVQESrrK88aTcToyqMxiiJoR',
      {
        initialVariants: appProps['features'],
      },
    );
  } else if (!experiment) {
    // in the client, only create the ExperimentClient once
    experimentClient = Experiment.initialize(
      'client-IAxMYws9vVQESrrK88aTcToyqMxiiJoR',
      {
        initialVariants: appProps['features'],
      },
    );
  }
}
// use a provider or store the ExperimentClient so the render scope can access it

렌더링할 때 변형 가져오기

클라이언트 SDK를 초기화한 후 임의의 구성 요소에서 플래그 상태를 가져옵니다.

js
// experimentClient should be the same ExperimentClient instance from the previous step
experimentClient.variant('flag-key');

이 내용이 도움이 되었나요?