

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

# 에서 웨이터 사용 AWS SDK for Java 2.x
<a name="waiters"></a>

 AWS SDK for Java 2.x의 웨이터 유틸리티를 사용하면 해당 AWS 리소스에 대한 작업을 수행하기 전에 리소스가 지정된 상태에 있는지 확인할 수 있습니다.

*웨이터*는 원하는 상태에 도달할 때까지(또는 AWS 리소스가 원하는 상태에 도달하지 않을 것으로 결정될 때까지) DynamoDB 테이블 또는 Amazon S3 버킷과 같은 리소스를 폴링하는 데 사용되는 추상화입니다. 번거롭고 오류가 발생하기 쉬운 AWS 리소스를 지속적으로 폴링하는 로직을 작성하는 대신 웨이터를 사용하여 리소스를 폴링하고 리소스가 준비된 후 코드를 계속 실행하도록 할 수 있습니다.

## 사전 조건
<a name="prerequisiteswaiters"></a>

프로젝트에서와 함께 웨이터를 사용하려면 먼저 [AWS SDK for Java 2.x 설정의](setup.md) 단계를 완료해야 AWS SDK for Java합니다.

또한 AWS SDK for Java버전 `2.15.0` 또는 그 이상의 버전을 사용하도록 프로젝트 종속성(예: `pom.xml` 또는 `build.gradle` 파일)을 구성해야 합니다.

예제:

```
<project>
  <dependencyManagement>
   <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>2.27.21</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
   </dependencies>
  </dependencyManagement>
</project>
```

## 웨이터 사용
<a name="id1waiters"></a>

웨이터 객체를 인스턴스화하려면 먼저 서비스 클라이언트를 생성해야 합니다. 서비스 클라이언트의 `waiter()` 메서드를 웨이터 객체의 값으로 설정합니다. 웨이터 인스턴스가 존재하면 적절한 코드를 실행하도록 응답 옵션을 설정합니다.

### 동기 프로그래밍
<a name="synchronous-programming"></a>

다음 코드 조각은 DynamoDB 테이블이 존재하고 **ACTIVE** 상태가 될 때까지 기다리는 방법을 보여줍니다.

```
DynamoDbClient dynamo = DynamoDbClient.create();
DynamoDbWaiter waiter = dynamo.waiter();

WaiterResponse<DescribeTableResponse> waiterResponse =
  waiter.waitUntilTableExists(r -> r.tableName("myTable"));

// print out the matched response with a tableStatus of ACTIVE
waiterResponse.matched().response().ifPresent(System.out::println);
```

### 비동기 프로그래밍
<a name="asynchronous-programming"></a>

다음 코드 조각은 DynamoDB 테이블이 더 이상 존재하지 않을 때까지 기다리는 방법을 보여줍니다.

```
DynamoDbAsyncClient asyncDynamo = DynamoDbAsyncClient.create();
DynamoDbAsyncWaiter asyncWaiter = asyncDynamo.waiter();

CompletableFuture<WaiterResponse<DescribeTableResponse>> waiterResponse =
          asyncWaiter.waitUntilTableNotExists(r -> r.tableName("myTable"));

waiterResponse.whenComplete((r, t) -> {
  if (t == null) {
   // print out the matched ResourceNotFoundException
   r.matched().exception().ifPresent(System.out::println);
  }
}).join();
```

## 웨이터 설정
<a name="configuring-waiters"></a>

빌더에서 `overrideConfiguration()`를 사용하여 웨이터 구성을 사용자 지정할 수 있습니다. 일부 작업의 경우 요청 시 사용자 지정 구성을 적용할 수 있습니다.

### 웨이터 구성
<a name="configure-a-waiter"></a>

다음 코드 조각은 웨이터의 구성을 재정의하는 방법을 보여줍니다.

```
// sync
DynamoDbWaiter waiter =
   DynamoDbWaiter.builder()
          .overrideConfiguration(b -> b.maxAttempts(10))
          .client(dynamoDbClient)
          .build();
// async
DynamoDbAsyncWaiter asyncWaiter =
   DynamoDbAsyncWaiter.builder()
          .client(dynamoDbAsyncClient)
          .overrideConfiguration(o -> o.backoffStrategy(
               FixedDelayBackoffStrategy.create(Duration.ofSeconds(2))))
          .scheduledExecutorService(Executors.newScheduledThreadPool(3))
          .build();
```

### 특정 요청에 대한 구성 재정의
<a name="override-configuration-for-a-specific-request"></a>

다음 코드 조각은 요청별로 웨이터의 구성을 재정의하는 방법을 보여줍니다. 단, 일부 작업에만 사용자 지정 가능한 구성이 있습니다.

```
waiter.waitUntilTableNotExists(b -> b.tableName("myTable"),
               o -> o.maxAttempts(10));

asyncWaiter.waitUntilTableExists(b -> b.tableName("myTable"),
                 o -> o.waitTimeout(Duration.ofMinutes(1)));
```

## 코드 예제
<a name="code-examples"></a>

와 함께 웨이터를 사용하는 전체 예제는 AWS 코드 예제 리포지토리의 [CreateTable.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/dynamodb/src/main/java/com/example/dynamodb/CreateTable.java)를 DynamoDB참조하세요.

와 함께 웨이터를 사용하는 전체 예제는 AWS 코드 예제 리포지토리의 [S3BucketOps.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/s3/src/main/java/com/example/s3/S3BucketOps.java)를 Amazon S3참조하세요.