

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

# Node.js용 X-Ray AWS SDK를 사용하여 SDK 호출 추적
<a name="xray-sdk-nodejs-awssdkclients"></a>

**참고**  
X-Ray SDK/데몬 유지 관리 공지 - 2026년 2월 25일에 AWS X-Ray SDKs/데몬은 유지 관리 모드로 전환되며, 여기서 AWS 는 보안 문제만 해결하도록 X-Ray SDK 및 데몬 릴리스를 제한합니다. 지원 일정에 대한 자세한 내용은 [X-Ray SDK 및 데몬 지원 타임라인](xray-sdk-daemon-timeline.md) 섹션을 참조하세요. OpenTelemetry로 마이그레이션하는 것이 좋습니다. OpenTelemetry로 마이그레이션하는 방법에 대한 자세한 내용은 [X-Ray 계측에서 OpenTelemetry 계측으로 마이그레이션](https://docs.aws.amazon.com/xray/latest/devguide/xray-sdk-migration.html)을 참조하세요.

애플리케이션이를 호출 AWS 서비스 하여 데이터를 저장하거나, 대기열에 쓰거나, 알림을 보내면 Node.js용 X-Ray SDK는 [하위 세그먼트의 다운스트림 호출을 추적합니다](xray-sdk-nodejs-subsegments.md). 추적 AWS 서비스및 해당 서비스 내에서 액세스하는 리소스(예: Amazon S3 버킷 또는 Amazon SQS 대기열)는 X-Ray 콘솔의 추적 맵에 다운스트림 노드로 표시됩니다.

[AWS SDK for JavaScript V2](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/welcome.html) 또는 [AWS SDK for JavaScript V3](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/welcome.html)를 통해 생성한 AWS SDK 클라이언트를 계측합니다. 각 AWS SDK 버전은 AWS SDK 클라이언트를 계측하기 위한 다양한 방법을 제공합니다.

**참고**  
현재 Node.js용 AWS X-Ray SDK는 AWS SDK for JavaScript V2 클라이언트를 계측할 때와 비교하여 V3 클라이언트를 계측할 때 더 적은 세그먼트 정보를 반환합니다. V2 예를 들어, DynamoDB에 대한 직접 호출을 나타내는 하위 세그먼트는 테이블 이름을 반환하지 않습니다. 트레이스에이 세그먼트 정보가 필요한 경우 AWS SDK for JavaScript V2 사용을 고려하세요.

------
#### [ AWS SDK for JavaScript V2 ]

에 대한 호출에서 `aws-sdk` 필수 문을 래핑하여 모든 AWS SDK V2 클라이언트를 계측할 수 있습니다`AWSXRay.captureAWS`.

**Example app.js - AWS SDK 계측**  

```
const AWS = AWSXRay.captureAWS(require('aws-sdk'));
```

개별 클라이언트를 계측하려면에 대한 호출로 AWS SDK 클라이언트를 래핑합니다`AWSXRay.captureAWSClient`. 예를 들어, `AmazonDynamoDB` 클라이언트를 구성하려면

**Example app.js - DynamoDB 클라이언트 계측**  

```
    const AWSXRay = require('aws-xray-sdk');
...
    const ddb = AWSXRay.captureAWSClient(new AWS.DynamoDB());
```

**주의**  
`captureAWS` 및 `captureAWSClient`를 함께 사용하지 마십시오. 이렇게 하면 하위 세그먼트가 중복됩니다.

[TypeScript](https://www.typescriptlang.org/docs/handbook/typescript-in-5-minutes.html)와 [ECMAScript 모듈](https://nodejs.org/api/esm.html)(ESM)을 사용하여 JavaScript 코드를 로드하려는 경우 다음 예제를 사용하여 라이브러리를 가져옵니다.

**Example app.js - AWS SDK 계측**  

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
```

ESM을 사용하여 모든 AWS 클라이언트를 계측하려면 다음 코드를 사용합니다.

**Example app.js - AWS SDK 계측**  

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
const XRAY_AWS = AWSXRay.captureAWS(AWS);
const ddb = new XRAY_AWS.DynamoDB();
```

모든 서비스의 경우, X-Ray 콘솔에서 호출된 API의 이름을 볼 수 있습니다. 서비스 하위 집합에 대해서는 X-Ray SDK가 세그먼트에 정보를 추가하여 서비스 맵에서 추가 세분화를 제공합니다.

예를 들어 계측된 DynamoDB 클라이언트에서 직접 호출을 생성하는 경우 SDK가 특정 테이블을 대상으로 한 직접 호출에 대해 테이블 이름을 세그먼트에 추가합니다. 콘솔에서, 각 테이블이 개별 노드로 서비스 맵에 표시되고, 특정 테이블을 대상으로 하지 않은 직접 호출에 대해 일반 DynamoDB 노드가 표시됩니다.

**Example 항목을 저장하기 위한 DynamoDB 직접 호출에 대한 하위 세그먼트**  

```
{
  "id": "24756640c0d0978a",
  "start_time": 1.480305974194E9,
  "end_time": 1.4803059742E9,
  "name": "DynamoDB",
  "namespace": "aws",
  "http": {
    "response": {
      "content_length": 60,
      "status": 200
    }
  },
  "aws": {
    "table_name": "scorekeep-user",
    "operation": "UpdateItem",
    "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG",
  }
}
```

명명된 리소스에 액세스할 때 다음 서비스를 호출할 경우 서비스 맵에 추가 노드가 생성됩니다. 특정 리소스를 대상으로 하지 않는 경우 서비스를 직접 호출하면 해당 서비스에 대한 일반 노드가 생성됩니다.
+ **Amazon DynamoDB** – 테이블 이름
+ **Amazon Simple Storage Service** –버킷 및 키 이름
+ **Amazon Simple Queue Service** – 대기열 이름

------
#### [ AWS SDK for JavaScript V3 ]

 AWS SDK for JavaScript V3는 모듈식이므로 코드는 필요한 모듈만 로드합니다. 따라서 V3는 `captureAWS` 메서드를 지원하지 않으므로 모든 AWS SDK 클라이언트를 계측할 수 없습니다.

TypeScript와 ECMAScript 모듈(ESM)을 사용하여 JavaScript 코드를 로드하려는 경우 다음 예제를 사용하여 라이브러리를 가져올 수 있습니다.

```
import * as AWS from 'aws-sdk';
import * as AWSXRay from 'aws-xray-sdk';
```

`AWSXRay.captureAWSv3Client` 메서드를 사용하여 각 AWS SDK 클라이언트를 계측합니다. 예를 들어, `AmazonDynamoDB` 클라이언트를 구성하려면

**Example app.js - Javascript V3용 SDK를 사용한 DynamoDB 클라이언트 계측**  

```
    const AWSXRay = require('aws-xray-sdk');
    const { DynamoDBClient } = require("@aws-sdk/client-dynamodb");
...
    const ddb = AWSXRay.captureAWSv3Client(new DynamoDBClient({ region: "{{region}}" }));
```

 AWS SDK for JavaScript V3를 사용할 때 테이블 이름, 버킷 및 키 이름 또는 대기열 이름과 같은 메타데이터는 현재 반환되지 않으므로 V AWS SDK for JavaScript V2를 사용하여 AWS SDK 클라이언트를 계측할 때와 마찬가지로 트레이스 맵에는 이름이 지정된 각 리소스에 대한 개별 노드가 포함되지 않습니다.

**Example AWS SDK for JavaScript V3 사용 시 DynamoDB를 호출하여 항목을 저장하기 위한 하위 세그먼트**  

```
{
  "id": "24756640c0d0978a",
  "start_time": 1.480305974194E9,
  "end_time": 1.4803059742E9,
  "name": "DynamoDB",
  "namespace": "aws",
  "http": {
    "response": {
      "content_length": 60,
      "status": 200
    }
  },
  "aws": {
    "operation": "UpdateItem",
    "request_id": "UBQNSO5AEM8T4FDA4RQDEB94OVTDRVV4K4HIRGVJF66Q9ASUAAJG",
  }
}
```

------