

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

# 를 사용하여 AWS 서비스 요청 AWS SDK for Java 2.x
<a name="work-witih-clients"></a>

## 서비스 클라이언트를 사용하여 요청 만들기
<a name="using-service-client"></a>

[SDK 설정](setup.md)의 단계를 완료하고 [서비스 클라이언트를 구성하는](configuring-service-clients.md) 방법을 이해하면 Amazon S3, Amazon DynamoDB, , AWS Identity and Access Management Amazon EC2 등과 같은 AWS 서비스에 요청할 준비가 된 것입니다.

### 서비스 클라이언트 생성
<a name="work-with-clients-create"></a>

에 요청하려면 먼저 정적 팩토리 메서드를 사용하여 해당 서비스에 대한 서비스 클라이언트를 인스턴스화 AWS 서비스해야 합니다`builder()`. 이 `builder()` 메서드는 서비스 클라이언트를 사용자 지정할 수 있는 `builder` 객체를 반환합니다. 유용한 setter 메서드는 `builder` 객체를 반환해 읽기 쉽고 편리하도록 메서드 호출을 묶을 수 있게 도와줍니다. 원하는 속성을 구성한 후에는 `build()` 메서드를 호출하여 클라이언트를 생성할 수 있습니다.

예를 들어, 이 코드 조각은 `Ec2Client` 객체를 Amazon EC2용 서비스 클라이언트로 인스턴스화합니다.

```
Region region = Region.US_WEST_2;
Ec2Client ec2Client = Ec2Client.builder()
        .region(region)
        .build();
```

**참고**  
SDK의 서비스 클라이언트는 스레드 세이프입니다. 최상의 성능을 위해 수명이 긴 객체로 처리합니다. 각 클라이언트마다 클라이언트에서 가비지가 수집될 때 릴리스되는 고유한 연결 풀 리소스가 있습니다.  
서비스 클라이언트 객체는 변경할 수 없으므로 요청하는 각 서비스에 대해 또는 동일한 서비스에 대한 요청을 위해 다른 구성을 사용하려는 경우 새 클라이언트를 만들어야 합니다.  
서비스 클라이언트 빌더`Region`에서를 지정하는 것은 모든 AWS 서비스에 필수는 아니지만 애플리케이션에서 수행하는 API 호출에 대해 리전을 설정하는 것이 좋습니다. 자세한 내용은 [AWS 리전 선택을](region-selection.md) 참조하세요.

### 기본 클라이언트 구성
<a name="using-default-client"></a>

클라이언트 빌더에는 `create()`라는 또 다른 팩토리 메서드가 있습니다. 기본 구성을 사용해 서비스 클라이언트를 생성하는 메서드입니다. [기본 공급자 체인](credentials-chain.md)을 사용하여 자격 증명을 로드하고 [기본 AWS 리전 공급자 체인](region-selection.md#automatically-determine-the-aws-region-from-the-environment)을 로드합니다. 애플리케이션이 실행되는 환경에서 자격 증명이나 리전을 확인할 수 없는 경우 `create` 에 대한 호출이 실패합니다. SDK가 사용할 자격 증명 및 리전을 결정하는 방법에 대한 자세한 내용은 [자격 증명 사용](credentials.md) 및 [리전 선택](region-selection.md)을 참조하세요.

예를 들어, 이 코드 조각은 `DynamoDbClient` 객체를 Amazon DynamoDB용 서비스 클라이언트로 인스턴스화합니다.

```
DynamoDbClient dynamoDbClient = DynamoDbClient.create();
```

### 서비스 클라이언트 구성
<a name="using-configure-service-clients"></a>

서비스 클라이언트를 구성하는 방법에 대한 자세한 내용은 [외부에서 클라이언트 구성](configuring-service-clients-ext.md) 및 [코드의 클라이언트 구성](configuring-service-clients-code.md) 섹션을 참조하세요.

### 서비스 클라이언트 닫기
<a name="using-closing-client"></a>

가장 좋은 방법은 애플리케이션 수명 동안 여러 API 서비스 호출에 서비스 클라이언트를 사용하는 것입니다. 하지만 일회용으로 사용할 서비스 클라이언트가 필요하거나 더 이상 필요 없는 서비스 클라이언트는 닫으세요.

리소스를 확보하는 데 서비스 클라이언트가 더 이상 필요하지 않을 때 `close()` 메서드를 호출하세요.

```
ec2Client.close();
```

일회용으로 사용할 서비스 클라이언트가 필요한 경우 `try`-with-resources 문을 사용하여 서비스 클라이언트를 리소스로 인스턴스화할 수 있습니다. 서비스 클라이언트가 `[Autoclosable](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/AutoCloseable.html)` 인터페이스를 구현하므로 JDK는 명령문 끝에서 `close()` 메서드를 자동으로 호출합니다.

다음 예제에서는 서비스 클라이언트를 사용하여 일회성 호출을 실행하는 방법을 보여줍니다. 를 호출`StsClient`하는 AWS Security Token Service 는 계정 ID를 반환한 후 닫힙니다.

```
import software.amazon.awssdk.services.sts.StsClient;

String getAccountID() {
    try (StsClient stsClient = StsClient.create()) {
       return stsClient.getCallerIdentity().account();
    }
}
```

## 요청을 생성
<a name="using-making-requests"></a>

서비스 클라이언트를 사용하여 해당에 요청합니다 AWS 서비스.

예를 들어, 이 코드 조각은 `RunInstancesRequest` 객체를 생성하여 새 Amazon EC2 인스턴스를 생성하는 방법을 보여줍니다.

```
// Create the request by using the fluid setter methods of the request builder.
RunInstancesRequest runInstancesRequest = RunInstancesRequest.builder()
        .imageId(amiId)
        .instanceType(InstanceType.T1_MICRO)
        .maxCount(1)
        .minCount(1)
        .build();

// Use the configured request with the service client.
RunInstancesResponse response = ec2Client.runInstances(runInstancesRequest);
```

요청을 만들고 인스턴스를 전달하는 대신 SDK는 요청을 만드는 데 사용할 수 있는 유용한 API를 제공합니다. 유용한 API를 사용하면 Java lambda 표현식을 사용하여 요청을 '인라인'으로 만들 수 있습니다.

다음 예제에서는 [빌더를 사용](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/Ec2Client.html#runInstances(java.util.function.Consumer))하여 요청을 생성하는 `runInstances` 메서드의 버전을 사용하여 이전 예제를 다시 작성합니다.

```
// Create the request by using a lambda expression.
RunInstancesResponse response = ec2.runInstances(r -> r
                .imageId(amiId)
                .instanceType(InstanceType.T1_MICRO)
                .maxCount(1)
                .minCount(1));
```

### 요청을 사용하여 클라이언트 구성 재정의
<a name="using-override-client-config-request"></a>

서비스 클라이언트는 변경할 수 없지만 요청 수준에서 많은 해당 설정을 재정의할 수 있습니다. 요청을 구축할 때 [AwsRequestOverrideConfiguration](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/awscore/AwsRequestOverrideConfiguration.html) 인스턴스를 제공하여 재정의된 설정을 제공할 수 있습니다. 클라이언트 설정을 재정의하는 데 사용할 수 있는 몇 가지 방법은 다음과 같습니다.
+ `apiCallAttemptTimeout`
+ `apiCallTimeout`
+ `credentialProvider`
+ `compressionConfiguration`
+ `putHeader`

클라이언트 설정을 요청으로 재정의하는 예제의 경우 기본 설정을 사용하는 다음 S3 클라이언트가 있다고 가정합니다.

```
S3Client s3Client = S3Client.create();
```

대용량 파일을 다운로드하고 다운로드가 완료되기 전에 요청의 제한 시간이 초과되지 않도록 하려고 합니다. 이렇게 하려면 다음 코드와 같이 단일 `GetObject` 요청의 제한 시간 값만 늘립니다.

------
#### [ Standard API ]

```
AwsRequestOverrideConfiguration overrideConfiguration = AwsRequestOverrideConfiguration.builder()
    .apiCallTimeout(Duration.ofSeconds(100L))
    .apiCallAttemptTimeout(Duration.ofSeconds(25L))
    .build();

GetObjectRequest request = GetObjectRequest.builder()
    .bucket("amzn-s3-demo-bucket")
    .key("demo-key")
    .overrideConfiguration(overrideConfiguration)
    .build();

s3Client.getObject(request, myPath);
```

------
#### [ Fluent API ]

```
s3Client.getObject(b -> b
        .bucket("amzn-s3-demo-bucket")
        .key("demo-key")
        .overrideConfiguration(c -> c
            .apiCallTimeout(Duration.ofSeconds(100L))
            .apiCallAttemptTimeout(Duration.ofSeconds(25L))),
    myPath);
```

------

## 응답 처리
<a name="using-handling-responses"></a>

SDK는 대부분의 서비스 작업에 대한 응답 객체를 반환합니다. 코드는 필요에 따라 응답 객체의 정보를 처리할 수 있습니다.

예를 들어 다음 코드 조각은 이전 요청에서 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/model/RunInstancesResponse.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/ec2/model/RunInstancesResponse.html) 객체와 함께 반환된 첫 번째 인스턴스 ID를 출력합니다.

```
RunInstancesResponse runInstancesResponse = ec2Client.runInstances(runInstancesRequest);
System.out.println(runInstancesResponse.instances().get(0).instanceId());
```

그러나 일부 작업은 서비스별 데이터가 포함된 응답 객체를 반환하지 않습니다. 이러한 상황에서는 HTTP 응답 상태를 쿼리하여 작업이 성공했는지 확인할 수 있습니다.

예를 들어 다음 코드 조각의 코드는 HTTP 응답을 확인하여 Amazon Simple Email Service의 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sesv2/SesV2Client.html#deleteContactList(software.amazon.awssdk.services.sesv2.model.DeleteContactListRequest)](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/sesv2/SesV2Client.html#deleteContactList(software.amazon.awssdk.services.sesv2.model.DeleteContactListRequest)) 작업이 성공했는지 확인합니다.

```
SesV2Client sesv2Client = SesV2Client.create();

DeleteContactListRequest request = DeleteContactListRequest.builder()
    .contactListName("ExampleContactListName")
    .build();

DeleteContactListResponse response = sesv2Client.deleteContactList(request);
if (response.sdkHttpResponse().isSuccessful()) {
    System.out.println("Contact list deleted successfully");
} else {
    System.out.println("Failed to delete contact list. Status code: " + response.sdkHttpResponse().statusCode());
}
```