HTTP 클라이언트 구성 - AWS SDK for Kotlin

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

HTTP 클라이언트 구성

기본적으로는 OkHttp 기반 HTTP 클라이언트를 AWS SDK for Kotlin 사용합니다. 명시적으로 구성된 클라이언트를 제공하여 HTTP 클라이언트와 해당 구성을 재정의할 수 있습니다.

주의

사용하는 HTTP 엔진에 관계없이 프로젝트의 다른 종속성에는 SDK에 필요한 특정 엔진 버전과 충돌하는 전이적 종속성이 있을 수 있습니다. 특히 Spring Boot와 같은 프레임워크는 OkHttp와 같은 종속성을 관리하고 SDK보다 이전 버전을 사용하는 것으로 알려져 있습니다. 자세한 내용은 종속성 충돌을 해결하려면 어떻게 해야 합니까? 단원을 참조하십시오.

참고

기본적으로 각 서비스 클라이언트는 HTTP 클라이언트의 자체 복사본을 사용합니다. 애플리케이션에서 여러 서비스를 사용하는 경우 단일 HTTP 클라이언트를 구성하고 모든 서비스 클라이언트에서 공유할 수 있습니다.

기본 구성

서비스 클라이언트를 구성할 때 기본 엔진 유형을 구성할 수 있습니다. SDK는 결과 HTTP 클라이언트 엔진을 관리하고 더 이상 필요하지 않을 때 자동으로 닫습니다.

다음 예제에서는 DynamoDB 클라이언트를 초기화하는 동안 HTTP 클라이언트의 구성을 보여줍니다.

가져오기

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import kotlin.time.Duration.Companion.seconds

코드

DynamoDbClient { region = "us-east-2" httpClient { maxConcurrency = 64u connectTimeout = 10.seconds } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

고급 구성

기본 HTTP 구성은 대부분의 사용 사례에 적합합니다. 처리량이 많은 환경과 같은 일부 고급 사용 사례의 경우 다음 고급 구성 옵션은 추가 기능을 제공합니다.

HTTP 엔진 유형 지정

기본이 아닌 HTTP 엔진 유형을 지정하거나 특정 HTTP 엔진 유형에 특정한 구성을 사용자 지정하려면 엔진 유형을 httpClient 지정하는에 추가 파라미터를 전달할 수 있습니다.

다음 예제에서는 maxConcurrencyPerHost 속성을 구성하는 데 사용할 수 OkHttpEngine 있는를 지정합니다.

가져오기

import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine

코드

DynamoDbClient { region = "us-east-2" httpClient(OkHttpEngine) { // The first parameter specifies the HTTP engine type. // The following parameter is generic HTTP configuration available in any engine type. maxConcurrency = 64u // The following parameter is OkHttp-specific configuration. maxConcurrencyPerHost = 32u } }.use { ddb -> // Perform some actions with Amazon DynamoDB. }

엔진 유형에 사용할 수 있는 값은 OkHttpEngine, OkHttp4Engine및 입니다CrtHttpEngine.

HTTP 엔진과 관련된 구성 파라미터를 사용하려면 엔진을 컴파일 시간 종속성으로 추가해야 합니다. 의 OkHttpEngine경우 Gradle을 사용하여 다음 종속성을 추가합니다.

(X.Y.Z 링크로 이동하여 사용 가능한 최신 버전을 볼 수 있습니다.)

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-okhttp")

의 경우 다음 종속성을 CrtHttpEngine추가합니다.

implementation(platform("aws.smithy.kotlin:bom:X.Y.Z")) implementation("aws.smithy.kotlin:http-client-engine-crt")

OkHttp4Engine 사용

기본를 사용할 수 없는 OkHttp4Engine 경우를 사용합니다OkHttpEngine. smithy-kotlin GitHub 리포지토리에는를 구성하고 사용하는 방법에 대한 정보가 있습니다OkHttp4Engine.

명시적 HTTP 클라이언트 사용

명시적 HTTP 클라이언트를 사용하는 경우 더 이상 필요하지 않은 종료를 포함하여 클라이언트의 수명에 대한 책임은 사용자에게 있습니다. HTTP 클라이언트는 최소한 이를 사용하는 서비스 클라이언트만큼 지속되어야 합니다.

다음 코드 예제는 DynamoDbClient가 활성 상태인 동안 HTTP 클라이언트가 활성 상태를 유지하는 코드를 보여줍니다. use 함수는 HTTP 클라이언트가 제대로 닫히는지 확인합니다.

가져오기
import aws.sdk.kotlin.services.dynamodb.DynamoDbClient import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.seconds
코드
OkHttpEngine { maxConcurrency = 64u connectTimeout = 10.seconds }.use { okHttpClient -> DynamoDbClient { region = "us-east-2" httpClient = okHttpClient }.use { ddb -> { // Perform some actions with Amazon DynamoDB. } } }

유휴 연결 모니터링

OkHttpEngine는 원격 종료를 위해 유휴 연결을 모니터링하는 connectionIdlePollingInterval 구성 옵션을 제공합니다. 이 기능은 서비스에 아직 연결 풀에 있는 연결이 닫힌 경우를 감지하여 후속 요청에 대한 오류를 방지합니다.

connectionIdlePollingInterval이 null이 아닌 값으로 설정되면 엔진은 연결 풀로 다시 해제되는 연결을 폴링합니다. 폴링 프로세스는 소켓 제한 시간이 지정된 간격으로 설정된 읽기 차단을 수행합니다. 엔진이 풀에서 연결을 획득하거나 연결을 제거하고 닫으면 폴링이 자동으로 취소됩니다.

이 값이 null (기본값)이면 폴링이 비활성화됩니다. 원격으로 닫힌 풀의 유휴 연결은 후속 호출을 위해 획득할 때 오류가 발생할 수 있습니다.

참고

폴링 루프는 읽기 차단을 사용하기 때문에 연결을 획득하거나 닫기 위한 엔진 호출이 connectionIdlePollingInterval 간격만큼 지연될 수 있습니다. 간격에 대해 낮은 값을 선택하면 SDK가 유휴 리소스 사용량을 늘리지 않고 연결을 더 빠르게 획득합니다.

가져오기

import aws.sdk.kotlin.services.s3.S3Client import aws.smithy.kotlin.runtime.http.engine.okhttp.OkHttpEngine import kotlin.time.Duration.Companion.milliseconds

코드

S3Client.fromEnvironment { httpEngine(OkHttpEngine) { connectionIdlePollingInterval = 50.milliseconds } }.use { s3 -> // Use the Amazon S3 client }