HTTP 클라이언트 - AWS SDK for Java 2.x

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

HTTP 클라이언트

이 섹션에서는 서비스 클라이언트에 사용할 HTTP 클라이언트를 변경하고 AWS SDK for Java 2.x를 사용하여 HTTP 클라이언트의 기본 구성을 변경할 수 있습니다. 이 단원에서는 SDK의 HTTP 클라이언트 및 설정에 대해 설명합니다.

SDK for Java에서 사용 가능한 HTTP 클라이언트

동기식 HTTP 클라이언트

SDK for Java의 동기식 HTTP 클라이언트는 SdkHttpClient 인터페이스를 구현합니다. 동기식 서비스 클라이언트(예: S3Client 또는 DynamoDbClient)를 사용하려면 동기식 HTTP 클라이언트를 사용해야 합니다. 는 세 개의 동기 HTTP 클라이언트를 AWS SDK for Java 제공합니다.

ApacheHttpClient(기본값)

ApacheHttpClient는 동기 서비스 클라이언트를 위한 기본 HTTP 클라이언트입니다. ApacheHttpClient 구성에 대한 내용은 Apache 기반 HTTP 클라이언트 설정을 참조하세요.

AwsCrtHttpClient

AwsCrtHttpClient는 높은 처리량과 비차단 IO를 제공합니다. 이는 AWS 공통 런타임(CRT) Http 클라이언트를 기반으로 합니다. AwsCrtHttpClient를 구성하고 서비스 클라이언트와 함께 사용하는 방법에 대한 자세한 내용은 AWS CRT 기반 HTTP 클라이언트 구성을 참조하세요.

UrlConnectionHttpClient

애플리케이션에서 사용하는 항아리 및 타사 라이브러리 수를 최소화하려면 UrlConnectionHttpClient를 사용하면 됩니다. UrlConnectionHttpClient 구성에 대한 내용은 URL 연결 기반 HTTP 클라이언트 구성을 참조하세요.

비동기 클라이언트

SDK for Java의 비동기 HTTP 클라이언트는 SdkAsyncHttpClient 인터페이스를 구현합니다. 비동기 서비스 클라이언트(예: S3AsyncClient 또는 DynamoDbAsyncClient)를 사용하려면 비동기 HTTP 클라이언트를 사용해야 합니다. 는 두 개의 비동기 HTTP 클라이언트를 AWS SDK for Java 제공합니다.

NettyNioAsyncHttpClient(기본값)

NettynioAsynchTPClient는 비동기 클라이언트가 사용하는 기본 HTTP 클라이언트입니다. NettyNioAsyncHttpClient 구성에 대한 내용은 Netty 기반 HTTP 클라이언트를 구성을 참조하세요.

AwsCrtAsyncHttpClient

AwsCrtAsyncHttpClient는 AWS 공통 런타임(CRT) HTTP 클라이언트를 기반으로 합니다. AwsCrtAsyncHttpClient 구성에 대한 내용은 AWS CRT 기반 HTTP 클라이언트 구성을 참조하세요.

HTTP 클라이언트 권장 사항

HTTP 클라이언트 구현을 선택할 때는 몇 가지 요인이 작용합니다. 다음 정보는 결정을 하는 데 도움을 줍니다.

권장 사항 순서도

다음 순서도는 사용할 HTTP 클라이언트를 결정하는 데 도움이 되는 일반적인 지침을 제공합니다.

HTTP 클라이언트 권장 사항 순서도.

HTTP 클라이언트 비교

다음 표에는 각 HTTP 클라이언트에 대한 자세한 정보가 나와 있습니다.

HTTP 클라이언트 동기 또는 비동기 사용해야 하는 경우 제한 및 단점
Apache 기반 HTTP 클라이언트

(기본 동기화 HTTP 클라이언트)

동기화 높은 처리량보다 낮은 지연 시간을 선호하는 경우 사용 다른 HTTP 클라이언트에 비해 시작 시간이 느림
URLConnection 기반 HTTP 클라이언트 동기화 타사 종속성을 제한해야 하는 까다로운 요구 사항이 있는 경우 사용 Amazon APIGateway Update 작업과 같은 일부 API에 필요한 HTTP PATCH 메서드를 지원하지 않
AWS CRT 기반 동기화 HTTP 클라이언트1 동기화

• 애플리케이션이에서 실행 중인 경우 사용 AWS Lambda

• 짧은 지연 시간보다 높은 처리량을 선호하는 경우 사용

• SDK 클라이언트 동기화를 선호하는 경우 사용

다음 Java 시스템 속성은 지원되지 않습니다.

  • javax.net.ssl.keyStore

  • javax.net.ssl.keyStorePassword

  • javax.net.ssl.trustStore

  • javax.net.ssl.trustStorePassword

Netty 기반 HTTP 클라이언트

(기본 비동기 HTTP 클라이언트)

비동기

• 애플리케이션에서 Kinesis API SubscribeToShard와 같이 HTTP/2 지원이 필요한 API를 호출하는 경우에 사용

다른 HTTP 클라이언트에 비해 시작 시간이 느림
AWS CRT 기반 비동기 HTTP 클라이언트1 비동기

• 애플리케이션이 AWS Lambda에서 실행 중인 경우 사용

• 짧은 지연 시간보다 높은 처리량을 선호하는 경우 사용

• SDK 클라이언트 비동기화를 선호하는 경우 사용

KinesisAsynClientTranscribeStreamingAsyncClient와 같이 HTTP/2 지원이 필요한 서비스 클라이언트는 지원하지 않음

다음 Java 시스템 속성은 지원되지 않습니다.

  • javax.net.ssl.keyStore

  • javax.net.ssl.keyStorePassword

  • javax.net.ssl.trustStore

  • javax.net.ssl.trustStorePassword

1추가 이점이 있으므로 가능하면 AWS CRT 기반 HTTP 클라이언트를 사용하는 것이 좋습니다.

스마트 구성 기본값

AWS SDK for Java 2.x (버전 2.17.102 이상)는 스마트 구성 기본 기능을 제공합니다. 이 기능은 HTTP 클라이언트에 영향을 주지 않는 다른 속성과 함께 두 개의 HTTP 클라이언트 속성을 최적화합니다.

스마트 구성 기본값은 사용자가 제공한 기본값 모드 값을 기반으로 connectTimeoutInMillistlsNegotiationTimeoutInMillis 속성에 적절한 값을 설정합니다. 애플리케이션의 특성에 따라 기본 모드 값을 선택합니다.

스마트 구성 기본값 및 애플리케이션에 가장 적합한 기본값 모드 값을 선택하는 방법에 대한 자세한 내용은 AWS SDK 및 도구 참조 안내서를 참조하세요.

다음은 애플리케이션의 기본값 모드를 설정하는 네 가지 방법입니다.

Service client

서비스 클라이언트 빌더를 사용하여 서비스 클라이언트에서 직접 기본 모드를 구성하세요. 다음 예제에서는 DynamoDbClient에 대한 기본 출력 형식을 auto로 설정합니다.

DynamoDbClient ddbClient = DynamoDbClient.builder() .defaultsMode(DefaultsMode.AUTO) .build();
System property

aws.defaultsMode 시스템 속성을 사용하여 기본 모드를 지정할 수 있습니다. Java에서 시스템 속성을 설정하는 경우 서비스 클라이언트를 초기화하기 전에 속성을 설정해야 합니다.

다음 예제에서는 Java에서 설정된 시스템 속성을 사용하여 기본 모드를 auto로 설정하는 방법을 보여줍니다.

System.setProperty("aws.defaultsMode", "auto");

다음 예제는 java 명령의 -D 옵션을 사용하여 기본값 모드를 auto로 설정하는 방법을 보여줍니다.

java -Daws.defaultsMode=auto
Environment variable

환경 변수 AWS_DEFAULTS_MODE의 값을 설정하여 애플리케이션의 기본 모드를 선택합니다.

다음 정보는 환경 변수를 auto 사용하여 기본값 모드의 값을 설정하기 위해 실행하는 명령을 보여줍니다.

운영 체제 환경 변수를 설정하는 방법

Linux, macOS 또는 Unix

export AWS_DEFAULTS_MODE=auto

Windows

set AWS_DEFAULTS_MODE=auto
AWS config file

다음 예제와 같이 공유 AWS config 파일에 defaults_mode 구성 속성을 추가할 수 있습니다.

[default] defaults_mode = auto

시스템 속성, 환경 변수 또는 AWS 구성 파일을 사용하여 기본 모드를 전역으로 설정하는 경우 HTTP 클라이언트를 빌드할 때 설정을 재정의할 수 있습니다.

httpClientBuilder() 메서드로 HTTP 클라이언트를 빌드하면 빌드 중인 인스턴스에만 설정이 적용됩니다. 여기에 그 예제가 나와 있습니다. 이 예제의 Netty 기반 HTTP 클라이언트는 connectTimeoutInMillistlsNegotiationTimeoutInMillis에 대해 전역적으로 설정된 모든 기본 모드 값을 재정의합니다.