

 [AWS SDK for JavaScript V3 API 참조 안내서](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/)는 AWS SDK for JavaScript 버전 3(V3)의 모든 API 작업을 자세히 설명합니다.

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

# Node.js 고려 사항
<a name="node-js-considerations"></a>

Node.js 코드는 JavaScript이지만 Node.js AWS SDK for JavaScript 에서를 사용하는 것은 브라우저 스크립트에서 SDK를 사용하는 것과 다를 수 있습니다. 일부 API 메서드는 Node.js에서 작동하지만 브라우저 스크립트에서는 작동하지 않습니다. 마찬가지로 브라우저 스크립트에서는 작동하지만 Node.js에서 작동하지 않는 API 메서드도 있습니다. 또한 일부 API를 성공적으로 사용할 수 있는지는 `File System (fs)` 모듈 등의 여러 Node.js 모듈을 가져와 사용하는 것과 같은 일반적인 Node.js 코딩 패턴에 익숙한지 여부에 달려 있습니다.

**참고**  
AWS 에서는 개발을 위해 Node.js의 활성 LTS 버전을 사용할 것을 권장합니다.

## 기본 제공 Node.js 모듈 사용
<a name="node-common-modules"></a>

Node.js는 설치하지 않고도 사용할 수 있는 기본 제공 모듈 모음을 제공합니다. 이러한 모듈을 사용하려면 `require` 메서드로 객체를 생성하여 모듈 이름을 지정합니다. 예를 들어 기본 제공 HTTP 모듈을 포함시키려면 다음을 사용합니다.

```
import http from 'http';
```

모듈의 메서드가 해당 객체의 메서드인 것처럼 모듈의 메서드를 호출합니다. 예를 들어 다음은 HTML 파일을 읽는 코드입니다.

```
// include File System module
import fs from "fs"; 
// Invoke readFile method 
fs.readFile('index.html', function(err, data) {
  if (err) {
    throw err;
  } else {
    // Successful file read
  }
});
```

Node.js가 제공하는 모든 기본 제공 모듈의 전체 목록은 Node.js 웹 사이트의 [Node.js documentation](https://nodejs.org/api/modules.html)을 참조하세요.

## npm 패키지 사용
<a name="node-npm-packages"></a>

기본 제공 모듈 외에도 Node.js 패키지 관리자인 `npm`의 타사 코드를 포함 및 통합할 수 있습니다. 이는 오픈 소스 Node.js 패키지와 이러한 패키지를 설치하기 위한 명령줄 인터페이스의 리포지토리입니다. `npm`과 현재 사용 가능한 패키지 목록에 대한 자세한 내용은 [https://www.npmjs.com](https://www.npmjs.com)을 참조하세요. [GitHub](https://github.com/sindresorhus/awesome-nodejs)에서 사용할 수 있는 추가 Node.js 패키지에 대해 알아볼 수도 있습니다.

# Node.js에서 maxSockets 구성
<a name="node-configuring-maxsockets"></a>

Node.js에서 오리진당 최대 연결 수를 설정할 수 있습니다. ` maxSockets`이 설정된 경우, 하위 HTTP 클라이언트가 요청을 대기열에 넣고 소켓이 사용 가능해지면 소켓에 요청을 할당합니다.

그러면 지정된 오리진에 한 번에 동시 요청할 수 있는 수의 상한을 설정할 수 있습니다. 이 값을 낮추면 수신하는 조절 또는 시간 초과 오류 수를 줄일 수 있습니다. 그러나 소켓이 사용 가능해질 때까지 요청이 대기되므로 메모리 사용량도 증가할 수 있습니다.

다음 예는 DynamoDB 클라이언트에 대해 `maxSockets`를 설정하는 방법을 보여줍니다.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import https from "https";    
let agent = new https.Agent({
  maxSockets: 25
});

let dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    requestTimeout: 3_000,
    httpsAgent: agent
  });
});
```

값 또는 `Agent` 객체를 제공하지 않는 경우 SDK for JavaScript는 50의 `maxSockets` 값을 사용합니다. `Agent` 객체를 제공하면 해당 `maxSockets` 값이 사용됩니다. Node.js에서 `maxSockets` 설정에 대한 자세한 내용은 [Node.js 설명서](https://nodejs.org/dist/latest/docs/api/http.html#http_agent_maxsockets)를 참조하세요.

의 v3.521.0부터 다음 [간편 구문을 사용하여 ](https://github.com/aws/aws-sdk-js-v3/blob/main/supplemental-docs/CLIENTS.md#new-in-v35210)를 구성할 AWS SDK for JavaScript수 있습니다`requestHandler`.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";

const client = new DynamoDBClient({
  requestHandler: {
    requestTimeout: 3_000,
    httpsAgent: { maxSockets: 25 },
  },
});
```

# Node.js에서 연결 유지를 이용해 연결 재사용
<a name="node-reusing-connections"></a>

기본 Node.js HTTP/HTTPS 에이전트는 모든 새 요청에 대해 새로운 TCP 연결을 생성합니다. 새 연결 설정 비용을 방지하기 위해는 *기본적으로* TCP 연결을 AWS SDK for JavaScript 재사용합니다.

Amazon DynamoDB 쿼리와 같은 수명이 짧은 작업의 경우 TCP 연결 설정에 따른 지연 시간 오버헤드가 작업 자체보다 클 수 있습니다. 또한 저장 시 DynamoDB 암호화가와 통합되므로 데이터베이스에서 각 작업에 대해 새 AWS KMS 캐시 항목을 다시 설정해야 하는 지연 시간이 [AWS KMS](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html)발생할 수 있습니다. [https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/encryption.howitworks.html) 

TCP 연결을 재사용하지 않으려면, 다음 DynamoDB 클라이언트 예시에서와 같이 서비스별 클라이언트 기준으로 `keepAlive`를 사용하여 활성 상태의 연결 재사용을 비활성화할 수 있습니다.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";

const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpsAgent: new Agent({ keepAlive: false })
    })
});
```

`keepAlive`가 활성화된 경우 기본값이 1000ms인 `keepAliveMsecs`를 사용하여 TCP 연결 유지 패킷에 대한 초기 지연을 설정할 수도 있습니다. 자세한 내용은 [Node.js 설명서](https://nodejs.org/api/http.html#new-agentoptions)를 참조하세요.

# Node.js용 프록시 구성
<a name="node-configuring-proxies"></a>

인터넷에 직접 연결할 수 없는 경우 SDK for JavaScript는 타사 HTTP 에이전트를 통해 HTTP 또는 HTTPS 프록시 사용을 지원합니다.

타사 HTTP 에이전트를 찾으려면 [npm](https://www.npmjs.com/)에서 "HTTP proxy"를 검색하세요.

타사 HTTP 에이전트 프록시를 설치하려면 명령 프롬프트에 다음을 입력합니다. 여기서 *PROXY*는 `npm` 패키지의 이름입니다.

```
npm install PROXY --save
```

애플리케이션에서 프록시를 사용하려면 DynamoDB 클라이언트에 대한 다음 예와 같이 `httpAgent` 및 ` httpsAgent` 속성을 사용합니다.

```
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { HttpsProxyAgent } from "hpagent";
const agent = new HttpsProxyAgent({ proxy: "http://internal.proxy.com" });
const dynamodbClient = new DynamoDBClient({
    requestHandler: new NodeHttpHandler({
        httpAgent: agent,
        httpsAgent: agent
    }),
});
```

**참고**  
`httpAgent`는 `httpsAgent`와 동일하지 않으며 클라이언트에서 대부분의 직접 호출이 `https`로 이루어지므로 둘 다 설정해야 합니다.

# Node.js에서 인증서 번들 등록
<a name="node-registering-certs"></a>

Node.js용 기본 트러스트 스토어에는 AWS 서비스에 액세스하는 데 필요한 인증서가 포함되어 있습니다. 일부 경우에는 특정 인증서 집합만 포함하는 것이 좋을 수도 있습니다.

이 예제에서는 지정된 인증서가 제공되지 않은 경우 디스크의 특정 인증서를 사용하여 연결을 거부하는 ` https.Agent`를 생성합니다. 새로 생성한 `https.Agent`는 DynamoDB 클라이언트에서 사용됩니다.

```
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { NodeHttpHandler } from "@smithy/node-http-handler";
import { Agent } from "https";
import { readFileSync } from "fs";
const certs = [readFileSync("/path/to/cert.pem")];
const agent = new Agent({
  rejectUnauthorized: true,
  ca: certs
});
const dynamodbClient = new DynamoDBClient({
  requestHandler: new NodeHttpHandler({
    httpAgent: agent,
    httpsAgent: agent
  })
});
```