

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

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

# 서비스 객체 생성 및 직접 호출
<a name="creating-and-calling-service-objects"></a>

JavaScript API는 사용 가능한 대부분의 AWS 서비스를 지원합니다. JavaScript API의 각 서비스는 서비스에서 지원하는 모든 API를 간접적으로 호출하는 데 사용되는 `send` 메서드를 클라이언트 클래스에 제공합니다. JavaScript API의 서비스 클래스, 작업 및 파라미터에 관한 자세한 내용은 [API Reference](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-transcribe/)를 확인하세요.

Node.js에서 SDK를 사용하는 경우 `import`를 사용하여 애플리케이션에 필요한 각 서비스에 대한 SDK 패키지를 추가합니다. 이 패키지는 현재의 모든 서비스를 지원합니다. 다음 예에서는 `us-west-1` 리전에 Amazon S3 서비스 객체를 생성합니다.

```
// Import the Amazon S3 service client
import { S3Client } from "@aws-sdk/client-s3"; 
// Create an S3 client in the us-west-1 Region
const s3Client = new S3Client({
    region: "us-west-1"
});
```

## 서비스 객체 파라미터 지정
<a name="specifying-service-object-parameters"></a>

서비스 객체의 메서드를 호출할 때 API에서 요구하는 대로 파라미터를 JSON으로 전달합니다. 예를 들어 Amazon S3에서 지정된 버킷 및 키에 대한 객체를 가져오려면 `S3Client`의 `GetObjectCommand` 메서드에 다음 파라미터를 전달합니다. JSON 파라미터 전달에 대한 자세한 내용은 [JSON 작업](working-with-json.md) 섹션을 참조하세요.

```
s3Client.send(new GetObjectCommand({Bucket: 'bucketName', Key: 'keyName'}));
```

Amazon S3 파라미터에 관한 자세한 내용은 API 참조의 [@aws-sdk/client-s3](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/Package/-aws-sdk-client-s3/) 섹션을 참조하세요.

## TypeScript에서 생성된 클라이언트에 @smithy/types 사용
<a name="smithy-types"></a>

TypeScript를 사용하는 경우 `@smithy/types` 패키지를 사용하여 클라이언트의 입력 및 출력 셰이프를 조작할 수 있습니다.

### 시나리오: 입력 및 출력 구조에서 `undefined` 제거
<a name="remove-undefined-from-input"></a>

생성된 셰이프의 멤버는 입력 셰이프의 경우 `undefined`와 결합되고 출력 셰이프의 경우 `?`입니다(선택 사항). 입력의 경우 서비스에 대한 검증이 연기됩니다. 출력의 경우 출력 데이터를 런타임으로 확인하는 것이 좋습니다.

이 단계를 건너뛰려면 `AssertiveClient` 또는 `UncheckedClient` 유형 도우미를 사용합니다. 다음 예제에서는 Amazon S3 서비스와 함께 유형 도우미를 사용합니다.

```
import { S3 } from "@aws-sdk/client-s3";
import type { AssertiveClient, UncheckedClient } from "@smithy/types";

const s3a = new S3({}) as AssertiveClient<S3>;
const s3b = new S3({}) as UncheckedClient<S3>;

// AssertiveClient enforces required inputs are not undefined
// and required outputs are not undefined.
const get = await s3a.getObject({
  Bucket: "",
  // @ts-expect-error (undefined not assignable to string)
  Key: undefined,
});

// UncheckedClient makes output fields non-nullable.
// You should still perform type checks as you deem
// necessary, but the SDK will no longer prompt you
// with nullability errors.
const body = await (
  await s3b.getObject({
    Bucket: "",
    Key: "",
  })
).Body.transformToString();
```

`Command` 구문과 함께 집계되지 않은 클라이언트에서 트랜스포밍을 사용하는 경우 아래 예제와 같이 다른 클래스를 거치기 때문에 입력을 검증할 수 없습니다.

```
import { S3Client, ListBucketsCommand, GetObjectCommand, GetObjectCommandInput } from "@aws-sdk/client-s3";
import type { AssertiveClient, UncheckedClient, NoUndefined } from "@smithy/types";

const s3 = new S3Client({}) as UncheckedClient<S3Client>;

const list = await s3.send(
  new ListBucketsCommand({
    // command inputs are not validated by the type transform.
    // because this is a separate class.
  })
);

/**
 * Although less ergonomic, you can use the NoUndefined<T>
 * transform on the input type.
 */
const getObjectInput: NoUndefined<GetObjectCommandInput> = {
  Bucket: "undefined",
  // @ts-expect-error (undefined not assignable to string)
  Key: undefined,
  // optional params can still be undefined.
  SSECustomerAlgorithm: undefined,
};

const get = s3.send(new GetObjectCommand(getObjectInput));

// outputs are still transformed.
await get.Body.TransformToString();
```

### 시나리오: Smithy-TypeScript 생성 클라이언트의 출력 페이로드 Blob 유형 좁히기
<a name="remove-undefined-from-input"></a>

이 시나리오는 AWS SDK for JavaScript v3`S3Client`의 내에서와 같이 스트리밍 본문이 있는 작업과 대부분 관련이 있습니다.

Blob 페이로드 유형은 플랫폼에 따라 다르므로 애플리케이션에서 클라이언트가 특정 환경에서 실행 중임을 표시하도록 하고 싶을 수 있습니다. 이렇게 하면 다음 예제와 같이 Blob 페이로드 유형이 좁아집니다.

```
import { GetObjectCommand, S3Client } from "@aws-sdk/client-s3";
import type { NodeJsClient, SdkStream, StreamingBlobPayloadOutputTypes } from "@smithy/types";
import type { IncomingMessage } from "node:http";

// default client init.
const s3Default = new S3Client({});

// client init with type narrowing.
const s3NarrowType = new S3Client({}) as NodeJsClient<S3Client>;

// The default type of blob payloads is a wide union type including multiple possible
// request handlers.
const body1: StreamingBlobPayloadOutputTypes = (await s3Default.send(new GetObjectCommand({ Key: "", Bucket: "" })))
  .Body!;

// This is of the narrower type SdkStream<IncomingMessage> representing
// blob payload responses using specifically the node:http request handler.
const body2: SdkStream<IncomingMessage> = (await s3NarrowType.send(new GetObjectCommand({ Key: "", Bucket: "" })))
  .Body!;
```