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

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

HTTP 클라이언트

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

HTTP JavaSDK용 에서 사용 가능한 클라이언트

동기식 HTTP 클라이언트

JavaSDK용 의 동기HTTP식 클라이언트는 SdkHttpClient 인터페이스를 구현합니다. S3Client 또는 와 같은 동기 서비스 클라이언트는 동기 HTTP 클라이언트를 사용해야 DynamoDbClient합니다. 는 세 개의 동기 HTTP 클라이언트를 AWS SDK for Java 제공합니다.

ApacheHttpClient (기본값)

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

AwsCrtHttpClient

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

UrlConnectionHttpClient

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

비동기 클라이언트

JavaSDK용 의 비동기 HTTP 클라이언트는 SdkAsyncHttpClient 인터페이스를 구현합니다. S3AsyncClient 또는 와 같은 비동기 서비스 클라이언트는 비동기 HTTP 클라이언트를 사용해야 DynamoDbAsyncClient합니다. 는 두 개의 비동기 HTTP 클라이언트를 AWS SDK for Java 제공합니다.

NettyNioAsyncHttpClient (기본값)

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

AwsCrtAsyncHttpClient

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

HTTP 클라이언트 권장 사항

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

권장 사항 순서도

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

HTTP 클라이언트 권장 사항의 순서도입니다.

HTTP 클라이언트 비교

다음 표에서는 각 HTTP 클라이언트에 대한 자세한 정보를 제공합니다.

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

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

동기화 높은 처리량보다 낮은 지연 시간을 선호하는 경우 사용 다른 HTTP 클라이언트에 비해 시작 시간이 느림
URLConnection기반 HTTP 클라이언트 동기화 타사 종속성을 제한해야 하는 까다로운 요구 사항이 있는 경우 사용 Amazon APIGateway Update 작업APIS과 같은 일부 에서 요구하는 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와 같은 HTTP/2 지원이 필요한 를 호출APIs하는 경우 사용 API SubscribeToShard

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

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

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

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

KinesisAsynClient 및 와 같은 HTTP/2 지원이 필요한 서비스 클라이언트를 지원하지 않음 TranscribeStreamingAsyncClient

다음 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 SDKs 및 도구 참조 안내서를 참조하세요.

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

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 클라이언트는 connectTimeoutInMillis 및 에 대해 전역적으로 설정된 기본 모드 값을 재정의합니다tlsNegotiationTimeoutInMillis.