기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
URLConnection기반 HTTP 클라이언트 구성
는 기본 와 비교하여 경량 UrlConnectionHttpClient
HTTP 클라이언트를 AWS SDK for Java 2.x 제공합니다ApacheHttpClient
. UrlConnectionHttpClient
는 Java의 URLConnection
를 기반으로 합니다.
는 Apache 기반 HTTP 클라이언트보다 더 빠르게 UrlConnectionHttpClient
로드되지만 기능이 더 적습니다. 로드 속도가 더 빠르기 때문에 Java AWS Lambda
함수에 적합한 솔루션입니다.
UrlConnectionHttpClient
에는 액세스할 수 있는 여러 구성 가능한 옵션
참고
UrlConnectionHttpClient
는 HTTP PATCH 메서드를 지원하지 않습니다.
몇 가지 AWS API 작업에는 PATCH 요청이 필요합니다. 이러한 작업 이름은 일반적으로 Update*
로 시작합니다. 다음은 몇 가지 예제입니다.
-
및 BatchUpdateFindings 의 여러
Update*
작업 AWS Security Hub API -
모든 Amazon API Gateway API
Update*
작업 -
Amazon의 여러
Update*
작업 WorkDocs API
를 사용할 수 있는 경우 UrlConnectionHttpClient
먼저 사용 중인 에 대한 API 참조를 참조 AWS 서비스 하세요. 필요한 작업이 PATCH 작업을 사용하는지 확인합니다.
UrlConnectionHttpClient
액세스
UrlConnectionHttpClient
를 구성하고 사용하려면 pom.xml
파일의 url-connection-client
Maven 아티팩트에 대한 종속성을 선언해야 합니다.
ApacheHttpClient
와 달리 UrlConnectionHttpClient
는 프로젝트에 자동으로 추가되지 않으므로 사용자는 이를 구체적으로 선언해야 합니다.
다음 pom.xml
파일 예제는 HTTP 클라이언트를 사용하고 구성하는 데 필요한 종속성을 보여줍니다.
<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> <!-- other dependencies such as s3 or dynamodb --> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>url-connection-client</artifactId> </dependency> </dependencies>
UrlConnectionHttpClient
사용 및 구성
서비스 클라이언트 구축과 함께 UrlConnectionHttpClient
의 인스턴스를 구성하거나 여러 서비스 클라이언트에서 공유하도록 단일 인스턴스를 구성할 수 있습니다.
두 접근 방식 중 하나를 사용하면 UrlConnectionHttpClient.Builder
모범 사례: 서비스 클라이언트 전용 UrlConnectionHttpClient
인스턴스 지정
UrlConnectionHttpClient
의 인스턴스를 구성해야 하는 경우 전용 UrlConnectionHttpClient
인스턴스를 구축하는 것이 좋습니다. 서비스 클라이언트 빌더의 httpClientBuilder
메서드를 사용하면 됩니다. 이렇게 하면 HTTP 클라이언트의 수명 주기가 에서 관리SDK되므로 UrlConnectionHttpClient
인스턴스가 더 이상 필요하지 않을 때 종료되지 않으면 메모리 누수가 발생하지 않습니다.
다음 예제에서는 S3Client
인스턴스를 생성하고 socketTimeout
및 proxyConfiguration
값과 함께 UrlConnectionHttpClient
의 내장 인스턴스를 구성합니다. 이 proxyConfiguration
메서드는 Consumer<ProxyConfiguration.Builder
유형의 Java 람다 표현식을 사용합니다.
가져오기
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import java.net.URI; import java.time.Duration;
코드
// Singleton: Use the s3Client for all requests. S3Client s3Client = S3Client.builder() .httpClientBuilder(UrlConnectionHttpClient.builder() .socketTimeout(Duration.ofMinutes(5)) .proxyConfiguration(proxy -> proxy.endpoint(URI.create("http://proxy.mydomain.net:8888")))) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close the s3client.
대안 접근 방식: UrlConnectionHttpClient
인스턴스 공유
애플리케이션의 리소스 및 메모리 사용량을 낮추려면 UrlConnectionHttpClient
를 구성하고 여러 서비스 클라이언트에서 공유할 수 있습니다. HTTP 연결 풀이 공유되므로 리소스 사용량이 줄어듭니다.
참고
UrlConnectionHttpClient
인스턴스를 공유한 경우 폐기할 준비가 되면 인스턴스를 닫아야 합니다. SDK 는 서비스 클라이언트가 닫힐 때 인스턴스를 닫지 않습니다.
다음 예제에서는 두 서비스 HTTP 클라이언트에서 사용하는 URLConnection기반 클라이언트를 구성합니다. 구성된 UrlConnectionHttpClient
인스턴스는 각 빌더의 httpClient
메서드로 전달됩니다. 서비스 클라이언트와 HTTP 클라이언트가 더 이상 필요하지 않으면 코드가 명시적으로 닫습니다. 코드는 HTTP 클라이언트를 마지막으로 닫습니다.
가져오기
import software.amazon.awssdk.auth.credentials.EnvironmentVariableCredentialsProvider; import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.urlconnection.ProxyConfiguration; import software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client; import java.net.URI; import java.time.Duration;
코드
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.create(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(urlHttpClient) .defaultsMode(DefaultsMode.IN_REGION) .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); urlHttpClient.close();
애플리케이션에서 UrlConnectionHttpClient
를 사용하는 경우 서비스 클라이언트 빌더의 httpClientBuilder
메서드를 사용하여 각 서비스 클라이언트에 URLConnectionHttpClient
인스턴스 또는 ApacheHttpClient
인스턴스를 제공해야 합니다.
프로그램에서 여러 서비스 클라이언트를 사용하고 다음 두 가지 조건을 모두 만족할 때 예외가 발생합니다.
-
한 서비스 클라이언트가
UrlConnectionHttpClient
인스턴스를 사용하도록 구성되어 있습니다. -
다른 서비스 클라이언트는
httpClient()
또는httpClientBuilder()
메서드로 명시적으로 빌드하지 않고 기본값ApacheHttpClient
을 사용합니다.
예외는 클래스 경로에서 여러 HTTP 구현이 발견되었음을 나타냅니다.
다음 예제 코드 조각은 예외로 이어집니다.
// The dynamoDbClient uses the UrlConnectionHttpClient DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); // The s3Client below uses the ApacheHttpClient at runtime, without specifying it. // An SdkClientException is thrown with the message that multiple HTTP implementations were found on the classpath. S3Client s3Client = S3Client.create(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
S3Client
를 ApacheHttpClient
로 명시적으로 구성하여 예외를 방지하세요.
DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(UrlConnectionHttpClient.create()) .build(); S3Client s3Client = S3Client.builder() .httpClient(ApacheHttpClient.create()) // Explicitly build the ApacheHttpClient. .build(); // Perform work with the s3Client and dynamoDbClient. dynamoDbClient.close(); s3Client.close();
참고
ApacheHttpClient
를 명시적으로 만들려면 Maven 프로젝트 파일의 apache-client
아티팩트에 대한 종속성을 추가해야 합니다.
프록시 구성 예제
다음 코드 조각은 URL 연결 HTTP 클라이언트 에 프록시 구성 빌더를
SdkHttpClient urlHttpClient = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .endpoint(URI.create("http://example.com:1234")) .username("username") .password("password") .addNonProxyHost("localhost") .addNonProxyHost("host.example.com") .build()) .build();
프록시 구성에 해당하는 Java 시스템 속성은 다음 명령줄 코드 조각에 나와 있습니다.
$ java -Dhttp.proxyHost=example.com -Dhttp.proxyPort=1234 -Dhttp.proxyUser=username \ -Dhttp.proxyPassword=password -Dhttp.nonProxyHosts=localhost|host.example.com -cp ... App
환경 변수를 사용하는 동등한 설정은 다음과 같습니다.
// Set the following environment variables. // $ export HTTP_PROXY="http://username:password@example.com:1234" // $ export NO_PROXY="localhost|host.example.com" // Set the 'useSystemPropertyValues' to false on the proxy configuration. SdkHttpClient apacheHttpClient = UrlConnectionHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
참고
URLConnection기반 HTTP 클라이언트는 현재 HTTPS 프록시 시스템 속성 또는 HTTPS_PROXY 환경 변수를 지원하지 않습니다.