

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 도메인 데이터세트 그룹 시작하기(JavaScript v3용 SDK)


이 가이드에서는 AWS SDK for JavaScriptv3를 사용하여 VIDEO\$1ON\$1DEMAND 도메인에 대한 도메인 데이터세트 그룹을 만드는 방법을 보여줍니다. 이 자습서에서는 가장 적합한 추천 제품 사용 사례를 위한 추천자를 생성합니다.**

 GitHub에서 이 자습서에 사용된 코드를 보려면 AWSSDK 코드 예제 리포지토리에서 [JavaScript v3용 SDK의 Personalize 코드 예제](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/javascriptv3/example_code/personalize)를 참조하세요.**

시작하기 연습을 마쳤을 때 불필요한 요금이 발생하지 않도록 하려면 생성한 리소스를 삭제합니다. 자세한 내용은 [Amazon Personalize 리소스 삭제 요구 사항](deleting-resources.md) 섹션을 참조하세요.

**Topics**
+ [

## 사전 조건
](#gs-js-sdk-domain-prerequisites)
+ [

## 자습서
](#domain-gs-js-domain-tutorial)

## 사전 조건


이 자습서를 완료하기 위한 필수 조건 단계는 다음과 같습니다.
+ [시작하기 전제 조건](gs-prerequisites.md)를 완료하여 필요한 권한을 설정하고 학습 데이터를 생성합니다. [도메인 데이터세트 그룹 시작하기(콘솔)](getting-started-console-domain.md)를 완료한 경우에도 동일한 소스 데이터를 재사용할 수 있습니다. 고유한 소스 데이터를 사용하는 경우 필수 조건 단계와 같이 데이터의 형식이 지정되었는지 확인합니다.
+ AWS SDK for JavaScript 개발자 안내서의 [JavaScript용 SDK 설정](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-up.html) 절차에 지정된 대로 JavaScript용 SDK 및 AWS보안 인증을 설정합니다.**

## 자습서


다음 단계에서는 필수 종속 항목을 설치합니다. 그런 다음 데이터세트 그룹을 만들고, 데이터를 가져오고, 가장 적합한 추천 제품 사용 사례를 위한 추천자를 생성한 다음 추천을 받습니다.**

Node.js를 사용하는 경우 샘플을 JavaScript 파일로 저장한 다음 `node <fileName.js>`을 실행하여 각 코드 샘플을 실행할 수 있습니다.

### 1단계: Personalize 종속 항목 설치


필수 조건을 완료한 후에는 다음과 같은 Personalize 종속 항목을 설치합니다.
+ @aws-sdk/client-personalize
+ @aws-sdk/client-personalize-runtime
+ @aws -sdk/client-personalize-events(이 자습서에서는 선택 사항이지만 추천자를 만든 후 [이벤트를 기록](recording-events.md)하려는 경우 필수)

다음은 사용할 수 있는 `package.json`파일의 예제입니다. Node.js를 사용하여 종속 항목을 설치하려면 `package.json`파일을 저장한 위치로 이동하여 `npm install`를 실행합니다.

```
{
  "name": "personalize-js-project",
  "version": "1.0.0",
  "description": "personalize operations",
  "type": "module",
  "author": "Author Name <email@address.com>",
  "license": "ISC",
  "dependencies": {
    "@aws-sdk/client-personalize": "^3.350.0",
    "@aws-sdk/client-personalize-events": "^3.350.0",
    "@aws-sdk/client-personalize-runtime": "^3.350.0",
    "fs": "^0.0.1-security"
  },
  "compilerOptions": {
    "resolveJsonModule": true,
    "esModuleInterop": true
  }
}
```

### 2단계: Personalize 클라이언트 생성


종속 항목을 설치한 후 Personalize 클라이언트를 생성합니다. 이 자습서의 코드 샘플에서는 `libs`라는 디렉토리에 `personalizeClients.js`라는 이름의 파일에 클라이언트를 생성한다고 가정합니다.

다음은 `personalizeClient.js`파일의 예제입니다.

```
import { PersonalizeClient } from "@aws-sdk/client-personalize";
import { PersonalizeRuntimeClient } from "@aws-sdk/client-personalize-runtime";
import { PersonalizeEventsClient } from "@aws-sdk/client-personalize-events";
// Set your AWS region.
const REGION = "region"; //e.g. "us-east-1"

const personalizeClient = new PersonalizeClient({ region: REGION});
const personalizeEventsClient = new PersonalizeEventsClient({ region: REGION});
const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: REGION});

export { personalizeClient, personalizeEventsClient, personalizeRuntimeClient };
```

### 3단계: 데이터 가져오기


Personalize 클라이언트를 생성한 후에는 [시작하기 전제 조건](gs-prerequisites.md)완료 시 생성한 과거 데이터를 가져옵니다. 과거 데이터를 Personalize로 가져오려면 다음과 같이 합니다.

1.  다음 Avro 스키마를 작업 디렉토리에 JSON 파일로 저장합니다. 이 스키마는 [학습 데이터 생성(도메인 데이터세트 그룹)](gs-prerequisites.md#gs-data-prep-domain)을 완료할 때 만든 CSV 파일의 열과 일치합니다.

   ```
   {
     "type": "record",
     "name": "Interactions",
     "namespace": "com.amazonaws.personalize.schema",
     "fields": [
         {
             "name": "USER_ID",
             "type": "string"
         },
         {
             "name": "ITEM_ID",
             "type": "string"
         },
         {
             "name": "EVENT_TYPE",
             "type": "string"
         },
         {
             "name": "TIMESTAMP",
             "type": "long"
         }
     ],
     "version": "1.0"
   }
   ```

1. 다음 `createDomainSchema.js`코드를 사용하여 Personalize에서 도메인 스키마를 생성합니다. `SCHEMA_PATH`을 방금 생성한 schema.json 파일의 경로로 바꿉니다. `createSchemaParam`을 업데이트하여 스키마의 이름을 지정하고 `domain`에 대해 `VIDEO_ON_DEMAND`을 지정합니다.

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateSchemaCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   import fs from "node:fs";
   
   const schemaFilePath = "SCHEMA_PATH";
   let mySchema = "";
   
   try {
     mySchema = fs.readFileSync(schemaFilePath).toString();
   } catch (err) {
     mySchema = "TEST"; // for unit tests.
   }
   
   // Set the domain schema parameters.
   export const createDomainSchemaParam = {
     name: "NAME" /* required */,
     schema: mySchema /* required */,
     domain:
       "DOMAIN" /* required for a domain dataset group, specify ECOMMERCE or VIDEO_ON_DEMAND */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateSchemaCommand(createDomainSchemaParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 다음 `createDomainDatasetGroup.js`코드를 사용하여 Personalize에서 도메인 데이터세트 그룹을 생성합니다. `domainDatasetGroupParams`을 업데이트하여 데이터세트 그룹의 이름을 지정하고 `domain`에 대해 `VIDEO_ON_DEMAND`을 지정합니다.

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetGroupCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the domain dataset group parameters.
   export const domainDatasetGroupParams = {
     name: "NAME" /* required */,
     domain:
       "DOMAIN" /* required for a domain dsg, specify ECOMMERCE or VIDEO_ON_DEMAND */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetGroupCommand(domainDatasetGroupParams),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 다음 `createDataset.js` 코드를 사용하여 Amazon Personalize에서 항목 상호 작용 데이터 세트를 생성합니다. `createDatasetParam`을 업데이트하여 방금 생성한 데이터세트 그룹 및 스키마의 리소스 이름(ARN)을 지정하고, 데이터세트에 이름을 지정한 다음, `datasetType`에 대해 `Interactions`을 지정합니다.

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset's parameters.
   export const createDatasetParam = {
     datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
     datasetType: "DATASET_TYPE" /* required */,
     name: "NAME" /* required */,
     schemaArn: "SCHEMA_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetCommand(createDatasetParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

1. 다음 `createDatasetImportJob.js`코드를 사용하여 데이터를 가져옵니다. `datasetImportJobParam`을 업데이트하여 다음을 지정합니다.
   + 작업 이름을 지정하고 상호작용 데이터세트의 ARN을 지정합니다.
   + `dataLocation`의 경우, 학습 데이터를 저장한 S3 버킷 경로(`s3://https://amzn-s3-demo-bucket.s3.region-code.amazonaws.com/folder name/ratings.csv`)를 지정합니다.
   + `roleArn`의 경우, Personalize 서비스 역할에 대한 리소스 이름을 지정합니다. [시작하기 전제 조건](gs-prerequisites.md)의 일부로 이 역할을 생성했습니다.

   ```
   // Get service clients module and commands using ES6 syntax.
   import { CreateDatasetImportJobCommand } from "@aws-sdk/client-personalize";
   import { personalizeClient } from "./libs/personalizeClients.js";
   
   // Or, create the client here.
   // const personalizeClient = new PersonalizeClient({ region: "REGION"});
   
   // Set the dataset import job parameters.
   export const datasetImportJobParam = {
     datasetArn: "DATASET_ARN" /* required */,
     dataSource: {
       /* required */
       dataLocation: "S3_PATH",
     },
     jobName: "NAME" /* required */,
     roleArn: "ROLE_ARN" /* required */,
   };
   
   export const run = async () => {
     try {
       const response = await personalizeClient.send(
         new CreateDatasetImportJobCommand(datasetImportJobParam),
       );
       console.log("Success", response);
       return response; // For unit tests.
     } catch (err) {
       console.log("Error", err);
     }
   };
   run();
   ```

### 4단계: 추천자 생성


데이터세트 가져오기 작업이 완료되면 추천자를 생성할 준비가 된 것입니다. 추천자를 생성하려면 다음 `createRecommender.js`코드를 사용합니다. 다음과 같이 `createRecommenderParam`을 업데이트합니다. 추천자 이름을 지정하고, 데이터세트 그룹의 ARN을 지정하고, `recipeArn`에 대해 `arn:aws:personalize:::recipe/aws-vod-top-picks`을 지정합니다.

```
// Get service clients module and commands using ES6 syntax.
import { CreateRecommenderCommand } from "@aws-sdk/client-personalize";
import { personalizeClient } from "./libs/personalizeClients.js";

// Or, create the client here.
// const personalizeClient = new PersonalizeClient({ region: "REGION"});

// Set the recommender's parameters.
export const createRecommenderParam = {
  name: "NAME" /* required */,
  recipeArn: "RECIPE_ARN" /* required */,
  datasetGroupArn: "DATASET_GROUP_ARN" /* required */,
};

export const run = async () => {
  try {
    const response = await personalizeClient.send(
      new CreateRecommenderCommand(createRecommenderParam),
    );
    console.log("Success", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```

### 5단계: 추천 받기


추천자를 만든 후에는 이를 사용하여 추천을 받을 수 있습니다. 사용자에 대한 추천을 받으려면 다음 `getRecommendations.js`코드를 사용합니다. `getRecommendationsParam`을 업데이트하여 이전 단계에서 생성한 추천자의 ARN을 지정하고 사용자 ID(예: `123`)를 지정합니다.

```
// Get service clients module and commands using ES6 syntax.
import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime";
import { personalizeRuntimeClient } from "./libs/personalizeClients.js";
// Or, create the client here.
// const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"});

// Set the recommendation request parameters.
export const getRecommendationsParam = {
  recommenderArn: "RECOMMENDER_ARN" /* required */,
  userId: "USER_ID" /* required */,
  numResults: 15 /* optional */,
};

export const run = async () => {
  try {
    const response = await personalizeRuntimeClient.send(
      new GetRecommendationsCommand(getRecommendationsParam),
    );
    console.log("Success!", response);
    return response; // For unit tests.
  } catch (err) {
    console.log("Error", err);
  }
};
run();
```