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

클라이언트 구성

1.x에서는 클라이언트 또는 클라이언트 빌더에서 ClientConfiguration 인스턴스를 설정하여 SDK 클라이언트 구성을 수정했습니다. 버전 2.x에서는 클라이언트 구성이 별도의 구성 클래스로 분할됩니다. 별도의 구성 클래스를 사용하면 비동기 클라이언트와 동기 클라이언트에 대해 서로 다른 HTTP 클라이언트를 구성할 수 있지만 여전히 동일한 클래스를 사용할 수 있습니다. ClientOverrideConfiguration

예 버전 1.x의 클라이언트 구성
AmazonDynamoDBClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build()
예 버전 2.x의 동기식 클라이언트 구성
ProxyConfiguration.Builder proxyConfig = ProxyConfiguration.builder(); ApacheHttpClient.Builder httpClientBuilder = ApacheHttpClient.builder() .proxyConfiguration(proxyConfig.build()); ClientOverrideConfiguration.Builder overrideConfig = ClientOverrideConfiguration.builder(); DynamoDbClient client = DynamoDbClient.builder() .httpClientBuilder(httpClientBuilder) .overrideConfiguration(overrideConfig.build()) .build();
예 버전 2.x의 동기식 클라이언트 구성
NettyNioAsyncHttpClient.Builder httpClientBuilder = NettyNioAsyncHttpClient.builder(); ClientOverrideConfiguration.Builder overrideConfig = ClientOverrideConfiguration.builder(); ClientAsyncConfiguration.Builder asyncConfig = ClientAsyncConfiguration.builder(); DynamoDbAsyncClient client = DynamoDbAsyncClient.builder() .httpClientBuilder(httpClientBuilder) .overrideConfiguration(overrideConfig.build()) .asyncConfiguration(asyncConfig.build()) .build();

HTTP 클라이언트

주목할 만한 변경 사항

  • 버전 2.x에서는 clientBuilder.httpClientBuilder를 사용하여 구현을 지정하여 런타임에 사용할 HTTP 클라이언트를 변경할 수 있습니다.

  • clientBuilder.httpClient를 사용하여 HTTP 클라이언트를 서비스 클라이언트 빌더에 전달하면 서비스 클라이언트가 닫힐 때 기본적으로 HTTP 클라이언트는 닫히지 않습니다. 이렇게 하면 서비스 클라이언트 간에 HTTP 클라이언트를 공유할 수 있습니다.

  • 비동기식 HTTP 클라이언트는 이제 비차단 I/O를 사용합니다.

  • 이제 일부 작업에서는 성능 향상을 위해 HTTP/2를 사용합니다.

설정 변경

설정 1.x 2.x 동기식, Apache 2.x 비동기식, Netty
ClientConfiguration clientConfig = new ClientConfiguration()
ApacheHttpClient.Builder httpClientBuilder = ApacheHttpClient.builder()
NettyNioAsyncHttpClient.Builder httpClientBuilder = NettyNioAsyncHttpClient.builder()
최대 연결 수
clientConfig.setMaxConnections(...) clientConfig.withMaxConnections(...)
httpClientBuilder.maxConnections(...)
httpClientBuilder.maxConcurrency(...)
연결 제한 시간
clientConfig.setConnectionTimeout(...) clientConfig.withConnectionTimeout(...)
httpClientBuilder.connectionTimeout(...) httpClientBuilder.connectionAcquisitionTimeout(...)
httpClientBuilder.connectionTimeout(...)
소켓 제한 시간
clientConfig.setSocketTimeout(...) clientConfig.withSocketTimeout(...)
httpClientBuilder.socketTimeout(...)
httpClientBuilder.writeTimeout(...) httpClientBuilder.readTimeout(...)
연결 시 TTL
clientConfig.setConnectionTTL(...) clientConfig.withConnectionTTL(...)
httpClientBuilder.connectionTimeToLive(...)
httpClientBuilder.connectionTimeToLive(...)
연결 시 최대 유휴
clientConfig.setConnectionMaxIdleMillis(...) clientConfig.withConnectionMaxIdleMillis(...)
httpClientBuilder.connectionMaxIdleTime(...)
httpClientBuilder.connectionMaxIdleTime(...)
비활성화 후 유효성 확인
clientConfig.setValidateAfterInactivityMillis(...) clientConfig.withValidateAfterInactivityMillis(...)
비지원(요청 기능) 비지원(요청 기능)
로컬 주소
clientConfig.setLocalAddress(...) clientConfig.withLocalAddress(...)
httpClientBuilder.localAddress(...)
지원되지 않음
Expect-continue 사용
clientConfig.setUseExpectContinue(...) clientConfig.withUseExpectContinue(...)
httpClientBuilder.expectContinueEnabled(...)
비지원(요청 기능)
연결 리퍼
clientConfig.setUseReaper(...) clientConfig.withReaper(...)
httpClientBuilder.useIdleConnectionReaper(...)
httpClientBuilder.useIdleConnectionReaper(...)
AmazonDynamoDBClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build()
DynamoDbClient.builder() .httpClientBuilder(httpClientBuilder) .build()
DynamoDbAsyncClient.builder() .httpClientBuilder(httpClientBuilder) .build()

HTTP 클라이언트 프록시

설정 1.x 2.x 동기식, Apache 2.x 비동기식, Netty
ClientConfiguration clientConfig = new ClientConfiguration()
ProxyConfiguration.Builder proxyConfig = ProxyConfiguration.builder()
ProxyConfiguration.Builder proxyConfig = ProxyConfiguration.builder()
프록시 호스트
clientConfig.setProxyHost(...) clientConfig.withProxyHost(...)
proxyConfig.endpoint(...)
proxyConfig.host(...)
프록시 포트
clientConfig.setProxyPort(...) clientConfig.withProxyPort(...)
proxyConfig.endpoint(...)

프록시 포트endpoint에 포함되어 있습니다.

proxyConfig.port(...)
프록시 사용자 이름
clientConfig.setProxyUsername(...) clientConfig.withProxyUsername(...)
proxyConfig.username(...)
proxyConfig.username(...)
프록시 비밀번호
clientConfig.setProxyPassword(...) clientConfig.withProxyPassword(...)
proxyConfig.password(...)
proxyConfig.password(...)
프록시 도메인
clientConfig.setProxyDomain(...) clientConfig.withProxyDomain(...)
proxyConfig.ntlmDomain(...)
비지원(요청 기능)
프록시 워크스테이션
clientConfig.setProxyWorkspace(...) clientConfig.withProxyWorkstation(...)
proxyConfig.ntlmWorkstation(...)
비지원(요청 기능)
프록시 인증 메서드
clientConfig.setProxyAuthenticationMethods(...) clientConfig.withProxyAuthenticationMethods(...)

지원되지 않음

비지원(요청 기능)
선제적 기본 프록시 인증
clientConfig.setPreemptiveBasicProxyAuth(...) clientConfig.withPreemptiveBasicProxyAuth(...)
proxyConfig.preemptiveBasicAuthenticationEnabled(...)
비지원(요청 기능)
비프록시 호스트
clientConfig.setNonProxyHosts(...) clientConfig.withNonProxyHosts(...)
proxyConfig.nonProxyHosts(...)
proxyConfig.nonProxyHosts(...)
소켓 프록시 사용 해제
clientConfig.setDisableSocketProxy(...) clientConfig.withDisableSocketProxy(...)
비지원(요청 기능) 비지원(요청 기능)
AmazonDynamoDBClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build()
httpClientBuilder.proxyConfiguration( proxyConfig.build())
httpClientBuilder.proxyConfiguration( proxyConfig.build())

클라이언트 재정의

설정 1.x 2.x
ClientConfiguration clientConfig = new ClientConfiguration()
ClientOverrideConfiguration.Builder overrideConfig = ClientOverrideConfiguration.builder()
사용자 에이전트 접두사
clientConfig.setUserAgentPrefix(...) clientConfig.withUserAgentPrefix(...)
overrideConfig.advancedOption( SdkAdvancedClientOption.USER_AGENT_PREFIX, ...)
사용자 에이전트 접미사
clientConfig.setUserAgentSuffix(...) clientConfig.withUserAgentSuffix(...)
overrideConfig.advancedOption( SdkAdvancedClientOption.USER_AGENT_SUFFIX, ...)
Signer
clientConfig.setSignerOverride(...) clientConfig.withSignerOverride(...)
overrideConfig.advancedOption( SdkAdvancedClientOption.SIGNER, ...)
추가 헤더
clientConfig.addHeader(...) clientConfig.withHeader(...)
overrideConfig.putHeader(...)
요청 제한 시간
clientConfig.setRequestTimeout(...) clientConfig.withRequestTimeout(...)
overrideConfig.apiCallAttemptTimeout(...)
클라이언트 실행 제한 시간
clientConfig.setClientExecutionTimeout(...) clientConfig.withClientExecutionTimeout(...)
overrideConfig.apiCallTimeout(...)
Gzip 사용
clientConfig.setUseGzip(...) clientConfig.withGzip(...)

비지원(요청 기능)

소켓 버퍼 크기 힌트
clientConfig.setSocketBufferSizeHints(...) clientConfig.withSocketBufferSizeHints(...)
비지원(요청 기능)
캐시 응답 메타데이터
clientConfig.setCacheResponseMetadata(...) clientConfig.withCacheResponseMetadata(...)
비지원(요청 기능)
응답 메타데이터 캐시 크기
clientConfig.setResponseMetadataCacheSize(...) clientConfig.withResponseMetadataCacheSize(...)
비지원(요청 기능)
DNS 해석기
clientConfig.setDnsResolver(...) clientConfig.withDnsResolver(...)
비지원(요청 기능)
TCP 킵얼라이브
clientConfig.setUseTcpKeepAlive(...) clientConfig.withTcpKeepAlive(...)

이제 이 옵션은 HTTP 클라이언트 구성에 포함됩니다.

- ApacheHttpClient.builder().tcpKeepAlive(true) - NettyNioAsyncHttpClient.builder().tcpKeepAlive(true)
보안 임의
clientConfig.setSecureRandom(...) clientConfig.withSecureRandom(...)
비지원(요청 기능)
AmazonDynamoDBClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build()
DynamoDbClient.builder() .overrideConfiguration(overrideConfig.build()) .build()

클라이언트 재정의 재시도

설정 1.x 2.x
ClientConfiguration clientConfig = new ClientConfiguration()
ClientOverrideConfiguration.Builder overrideConfigBuilder = ClientOverrideConfiguration.builder();
최대 오류 재시도
clientConfig.setMaxErrorRetry(...) clientConfig.withMaxErrorRetry(...)
// Configure the default retry strategy. overrideConfigBuilder.retryStrategy(b -> b.maxAttempts(...));
스로틀링 재시도 사용
clientConfig.setUseThrottleRetries(...) clientConfig.withUseThrottleRetries(...)
지원되지 않음
스로틀링 전 최대 연속 재시도 횟수
clientConfig.setMaxConsecutiveRetriesBeforeThrottling(...) clientConfig.withMaxConsecutiveRetriesBeforeThrottling(...)
지원되지 않음
AmazonDynamoDBClientBuilder.standard() .withClientConfiguration(clientConfiguration) .build()
DynamoDbClient.builder() .overrideConfiguration(overrideConfigBuilder.build()) .build(); // You also have the option to use a lambda expression to configure and // build the 'ClientOverrideConfiguration.Builder'. DynamoDbClient client = DynamoDbClient.builder() .overrideConfiguration(o -> o.retryStrategy(b -> b.maxAttempts(5))) .build();

비동기 클라이언트

설정 1.x 2.x
ClientAsyncConfiguration.Builder asyncConfig = ClientAsyncConfiguration.builder()
실행자
AmazonDynamoDBAsyncClientBuilder.standard() .withExecutorFactory(...) .build()
asyncConfig.advancedOption( SdkAdvancedAsyncClientOption.FUTURE_COMPLETION_EXECUTOR, ...)
DynamoDbAsyncClient.builder() .asyncConfiguration(asyncConfig) .build()

기타 클라이언트 변경 사항

1.x의 다음 ClientConfiguration 옵션은 SDK의 2.x에서 변경되었으며 동등한 직접 기능이 없습니다.

설정 1.x 2.x 동등
프로토콜
clientConfig.setProtocol(Protocol.HTTP) clientConfig.withProtocol(Protocol.HTTP)

프로토콜 설정은 기본적으로 HTTPS입니다. 설정을 수정하려면 클라이언트 빌더에서 HTTP 엔드포인트를 설정하는 프로토콜을 지정합니다.

clientBuilder.endpointOverride( URI.create("http://..."))