기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Apache 기반 HTTP 클라이언트 구성
의 동기 서비스 클라이언트는 ApacheHttpClientApacheHttpClient
기반으로 합니다HttpClient
SDK 또한 는 더 빠르게 UrlConnectionHttpClientUrlConnectionHttpClient
구성에 대한 내용은 URLConnection기반 HTTP 클라이언트 구성을 참조하세요.
에 사용할 수 있는 전체 구성 옵션 세트를 보려면 ApacheHttpClient.BuilderApacheHttpClient
참조하세요.
ApacheHttpClient
액세스
대부분의 경우 명시적인 구성 없이 ApacheHttpClient
를 사용합니다. 서비스 클라이언트를 선언하면 SDK가 표준 값으로 ApacheHttpClient
를 구성합니다.
ApacheHttpClient
를 명시적으로 구성하거나 여러 서비스 클라이언트와 함께 사용하려면 구성에 사용할 수 있도록 해야 합니다.
구성 불필요
Maven에서 서비스 클라이언트에 대한 종속성을 선언하면 가 apache-client
아티팩트에 대한 런타임 종속성을 SDK 추가합니다. 이렇게 하면 런타임에는 ApacheHttpClient
코드에서 클래스를 사용할 수 있지만 컴파일 타임에는 사용할 수 없습니다. Apache 기반 HTTP 클라이언트를 구성하지 않는 경우 해당 클라이언트에 대한 종속성을 지정할 필요가 없습니다.
Maven pom.xml
파일의 다음 XML 조각에서 로 선언된 종속성은 Apache 기반 HTTP 클라이언트를 <artifactId>s3</artifactId>
자동으로 가져옵니다. 따로 종속성을 선언할 필요는 없습니다.
<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> <dependencies> <!-- The s3 dependency automatically adds a runtime dependency on the ApacheHttpClient--> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> </dependencies>
이러한 종속성을 사용하면 ApacheHttpClient
라이브러리가 런타임 클래스 경로에만 있기 때문에 명시적 HTTP 구성을 변경할 수 없습니다.
구성 필요
ApacheHttpClient
를 구성하려면 컴파일 때 apache-client
라이브러리에 대한 종속성을 추가해야 합니다.
ApacheHttpClient
를 구성하려면 다음 Maven pom.xml
파일 예제를 참조하세요.
<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> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- By adding the apache-client dependency, ApacheHttpClient will be added to the compile classpath so you can configure it. --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>apache-client</artifactId> </dependency> </dependencies>
ApacheHttpClient
사용 및 구성
서비스 클라이언트 구축과 함께 ApacheHttpClient
의 인스턴스를 구성하거나 여러 서비스 클라이언트에서 공유하도록 단일 인스턴스를 구성할 수 있습니다.
두 접근 방식 중 하나를 사용하여 Apache 기반 HTTP 클라이언트의 속성을 ApacheHttpClient.Builder
구성합니다.
모범 사례: 서비스 클라이언트 전용 ApacheHttpClient
인스턴스 지정
ApacheHttpClient
의 인스턴스를 구성해야 하는 경우 전용 ApacheHttpClient
인스턴스를 구축하는 것이 좋습니다. 서비스 클라이언트 빌더의 httpClientBuilder
메서드를 사용하면 됩니다. 이렇게 하면 HTTP 클라이언트의 수명 주기가 에서 관리SDK되므로 ApacheHttpClient
인스턴스가 더 이상 필요하지 않을 때 종료되지 않을 경우 메모리 누수가 발생하는 것을 방지할 수 있습니다.
다음 예제에서는 S3Client
인스턴스를 생성하고 maxConnections
및 connectionTimeout
값과 함께 ApacheHttpClient
의 내장 인스턴스를 구성합니다. HTTP 인스턴스는 httpClientBuilder
메서드를 사용하여 생성됩니다S3Client.Builder
.
가져오기
import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.s3.S3Client; import java.time.Duration;
코드
S3Client s3Client = S3Client // Singleton: Use the s3Client for all requests. .builder() .httpClientBuilder(ApacheHttpClient.builder() .maxConnections(100) .connectionTimeout(Duration.ofSeconds(5)) ).build(); // Perform work with the s3Client. s3Client.close(); // Requests completed: Close all service clients.
대안 접근 방식: ApacheHttpClient
인스턴스 공유
애플리케이션의 리소스 및 메모리 사용량을 낮추려면 ApacheHttpClient
를 구성하고 여러 서비스 클라이언트에서 공유할 수 있습니다. HTTP 연결 풀이 공유되므로 리소스 사용량이 줄어듭니다.
참고
ApacheHttpClient
인스턴스를 공유한 경우 폐기할 준비가 되면 인스턴스를 닫아야 합니다. SDK 는 서비스 클라이언트가 닫힐 때 인스턴스를 닫지 않습니다.
다음 예제에서는 두 서비스 HTTP 클라이언트에서 사용하는 Apache 기반 클라이언트를 구성합니다. 구성된 ApacheHttpClient
인스턴스는 각 빌더의 httpClient
메서드로 전달됩니다. 서비스 클라이언트와 HTTP 클라이언트가 더 이상 필요하지 않으면 코드가 명시적으로 닫습니다. 코드는 HTTP 클라이언트를 마지막으로 닫습니다.
가져오기
import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.apache.ApacheHttpClient; import software.amazon.awssdk.services.dynamodb.DynamoDbClient; import software.amazon.awssdk.services.s3.S3Client;
코드
SdkHttpClient apacheHttpClient = ApacheHttpClient.builder() .maxConnections(100).build(); // Singletons: Use the s3Client and dynamoDbClient for all requests. S3Client s3Client = S3Client.builder() .httpClient(apacheHttpClient).build(); DynamoDbClient dynamoDbClient = DynamoDbClient.builder() .httpClient(apacheHttpClient).build(); // Perform work with the s3Client and dynamoDbClient. // Requests completed: Close all service clients. s3Client.close(); dynamoDbClient.close(); apacheHttpClient.close(); // Explicitly close apacheHttpClient.
프록시 구성 예제
다음 코드 조각은 Apache HTTP 클라이언트 에 대한 프록시 구성 빌더를
SdkHttpClient apacheHttpClient = ApacheHttpClient.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 = ApacheHttpClient.builder() .proxyConfiguration(ProxyConfiguration.builder() .useSystemPropertyValues(Boolean.FALSE) .build()) .build(); // Run the application. // $ java -cp ... App
참고
Apache HTTP 클라이언트는 현재 HTTPS 프록시 시스템 속성 또는 HTTPS_PROXY 환경 변수를 지원하지 않습니다.