

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

# 에서 SDK 클라이언트 워밍업 AWS SDK for Java 2.x
<a name="sdk-warmup"></a>

의 `SdkWarmUp` 유틸리티를 사용하여 애플리케이션 초기화 중에 SDK 클라이언트 AWS SDK for Java 2.x 를 워밍업합니다. 이렇게 하면 시작 또는 복원 후 애플리케이션이 처리하는 첫 번째 요청의 지연 시간이 줄어듭니다.

워밍업은 애플리케이션이 실제 트래픽을 처리하기 전에 SDK 요청 경로(클라이언트 빌드 및 작업 호출)를 연습합니다. [Lambda SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html)와 같은 checkpoint-and-restore 기능과 함께 사용합니다. 이러한 기능은 초기화된 애플리케이션의 스냅샷을 생성한 다음 해당 스냅샷에서 복원하여 콜드 스타트 지연 시간을 줄입니다.

이 없으면 각 체크포인트 앞에 자체 워밍업 코드를 작성해야 `SdkWarmUp`합니다. 이는 번거롭습니다. 를 사용하면 단일 호출을 `SdkWarmUp`수행하여 모든 클라이언트를 웜합니다. 클래스 경로의 모든 SDK 클라이언트를 워밍하거나 애플리케이션이 사용하는 특정 클라이언트만 워밍할 수 있습니다.

이 주제에서는 CRaC 및 AWS Lambda SnapStart와 `SdkWarmUp` 함께를 구성하고 사용하는 방법을 알아봅니다. Lambda의 시작 시간을 줄이는 다른 기법에 대한 자세한 내용은 섹션을 참조하세요[의 SDK 시작 시간 단축 AWS Lambda](lambda-optimize-starttime.md).

## SdkWarmUp API
<a name="sdk-warmup-api"></a>

`SdkWarmUp`는 `sdk-core` 모듈의 일부이므로 추가 종속성 없이 모든 서비스 클라이언트에서 사용할 수 있습니다. 버전 2.54.0 이상을 사용하도록 프로젝트를 구성합니다 AWS SDK for Java 2.x. 그런 다음 다음 섹션에 설명된 두 가지 정적 메서드 중 하나를 호출합니다. 두 방법 중 하나를 호출하면 `SdkWarmUp`는 HTTP 클라이언트를 웜하기 위해 하나의 네트워크 호출을 수행합니다. 서비스 클라이언트를 워밍하기 위해 로컬의 미리 준비된 응답을 사용합니다. 자격 증명이나 IAM 권한이 필요하지 않으며 AWS AWS 요금이 부과되지 않습니다.

### 클래스 경로에서 모든 SDK 클라이언트 워밍업
<a name="sdk-warmup-api-noarg"></a>

`warmUp()` 메서드는 클래스 경로에서 모든 SDK 서비스 클라이언트를 검색하고 사용하는 HTTP 클라이언트와 함께 각 SDK 서비스 클라이언트를 워밍합니다. 소수의 서비스 모듈에 의존하고 제공하는 대부분의 클라이언트를 호출할 때이 방법을 사용합니다. 다음 Java 코드 예제에서는 인수 `warmUp()` 없이를 호출합니다.

```
import software.amazon.awssdk.core.warmup.SdkWarmUp;

SdkWarmUp.warmUp();
```

이 메서드는 JVM당 최대 한 번 실행됩니다. 성공적인 호출 후 후속 호출은 즉시 반환됩니다.

### 특정 SDK 클라이언트 워밍업
<a name="sdk-warmup-api-targeted"></a>

`warmUp(Class<? extends SdkClient>... clients)` 메서드는 사용자가 지정한 클라이언트만 워밍합니다. 동기식 클라이언트 클래스를 전달하여 동기식 경로를 웜하거나 비동기식 클라이언트 클래스를 전달하여 비동기식 경로를 웜합니다.

클래스 경로에 애플리케이션 호출보다 더 많은 서비스 클라이언트가 포함된 경우이 방법을 사용합니다. 예를 들어 종속성이 사용하지 않는 서비스 모듈을 가져올 때 발생합니다. 필요한 클라이언트만 명명하면 전체 클래스 경로가 아닌 애플리케이션의 실제 사용량에 비례하여 워밍업 시간이 유지됩니다. 다음 Java 코드 예제에서는 `S3Client` 및 `DynamoDbClient` 클래스만 워밍합니다.

```
import software.amazon.awssdk.core.warmup.SdkWarmUp;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;

SdkWarmUp.warmUp(S3Client.class, DynamoDbClient.class);
```

## Lambda SnapStart SdkWarmUp 사용
<a name="sdk-warmup-lambda-snapstart"></a>

[AWS Lambda SnapStart](https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html)는 Java 함수의 시작 성능을 개선합니다. 함수의 새 버전을 게시하면 Lambda SnapStart가 함수를 초기화하고 메모리 및 디스크 상태의 스냅샷을 생성합니다. 그런 다음 재사용을 위해 스냅샷을 캐싱합니다. 지원되는 런타임과 함수에 대해 SnapStart를 활성화하는 방법에 대한 자세한 내용은 *AWS Lambda 개발자 안내서*를 참조하세요.

Lambda는 핸들러의 생성자가 실행된 후 스냅샷을 생성하기 때문에 생성자`SdkWarmUp.warmUp()`에서를 호출합니다. 그런 다음 스냅샷에는 워밍업된 클라이언트가 포함되며 스냅샷에서 복원되는 각 호출은 워밍업의 이점을 누릴 수 있습니다. 다음 Java 코드 예제는 Lambda 핸들러 생성자`SdkWarmUp.warmUp()`에서를 호출합니다.

```
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import software.amazon.awssdk.core.warmup.SdkWarmUp;

public class MyHandler implements RequestHandler<String, String> {

    public MyHandler() {
        SdkWarmUp.warmUp();
        // Your other initialization here.
    }

    @Override
    public String handleRequest(String input, Context context) {
        // Your handler logic here.
    }
}
```

Lambda가 스냅샷을 생성하기 전에 또는 복원 후 함수가 사용자 지정 코드를 실행해야 하는 경우 SnapStart 런타임 후크를 구현합니다. 자세한 내용은 *AWS Lambda 개발자 안내서*의 [Java용 SnapStart 런타임 후크](https://docs.aws.amazon.com/lambda/latest/dg/snapstart-runtime-hooks-java.html)를 참조하세요.

## 독립 실행형 CRaC에서 SdkWarmUp 사용
<a name="sdk-warmup-standalone-crac"></a>

자체 체크포인트를 관리하는 애플리케이션에서 `SdkWarmUp`와 함께를 CRaC 직접 사용할 수도 있습니다. 이 섹션에서는에 대해 이미 구성된 애플리케이션에서 워밍업 호출이 속하는 위치를 보여줍니다CRaC. 에 대한 애플리케이션을 구성하려면의 [Step-by-step CRaC 지원을](https://github.com/CRaC/docs/blob/master/STEP-BY-STEP.md) CRaC참조하세요GitHub. 이 연습에서는 지원되는 JDK 배포, 플랫폼 사전 조건 및 수명 주기 인터페이스에 필요한 `org.crac:crac` 종속성을 다룹니다.

### 체크포인트 전에 워밍업
<a name="sdk-warmup-crac-step1"></a>

체크포인트를 사용하기 전에 초기화 `SdkWarmUp.warmUp()` 중에를 호출합니다. 애플리케이션은 이미 자신을 CRaC로 등록`Resource`하여 체크포인트 주위의 연결을 닫고 다시 엽니다. 다음 Java 코드 예제와 같이 동일한 생성자에 워밍업 호출을 추가합니다.

```
import org.crac.Context;
import org.crac.Core;
import org.crac.Resource;
import software.amazon.awssdk.core.warmup.SdkWarmUp;

public class MyApp implements Resource {

    public MyApp() {
        SdkWarmUp.warmUp();
        // Your other initialization here.
        Core.getGlobalContext().register(this);
    }

    @Override
    public void beforeCheckpoint(Context<? extends Resource> context) throws Exception {
        // Close your service clients here.
    }

    @Override
    public void afterRestore(Context<? extends Resource> context) throws Exception {
        // Create your service clients again here.
    }
}
```

**참고**  
파일 설명자가 열려 있는 동안에는 CRaC가 체크포인트를 가져오지 않습니다. AWS CRT 기반 HTTP 클라이언트를 사용하는 경우 클라이언트가 공유 이벤트 루프를 열어 두기 때문에 서비스 클라이언트만 닫는 것만으로는 충분하지 않습니다. 다음 Java 코드 예제`beforeCheckpoint`와 같이에서 릴리스합니다.  

```
import org.crac.Context;
import org.crac.Resource;
import software.amazon.awssdk.crt.CrtResource;
import software.amazon.awssdk.crt.io.EventLoopGroup;

@Override
public void beforeCheckpoint(Context<? extends Resource> context) {
    EventLoopGroup.closeStaticDefault();
    CrtResource.waitForNoResources();
}
```
Netty기반 및 Apache기반 HTTP 클라이언트는 서비스 클라이언트를 닫을 때 리소스를 해제하므로 추가 해체가 필요하지 않습니다.

평소와 같이 체크포인트를 사용합니다.

## 추가 리소스
<a name="sdk-warmup-additional-resources"></a>

다음 리소스는이 섹션에서 다루는 주제에 대한 자세한 정보를 제공합니다.
+ 의 [CRaC 설명서](https://github.com/CRaC/docs) GitHub