

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

# 서비스 클라이언트 구성 재정의
<a name="override-client-config"></a>

[서비스 클라이언트가 생성되면 서비스 클라이언트는](creating-clients.md) 모든 작업에 고정 구성을 사용합니다. 그러나 경우에 따라 하나 이상의 특정 작업에 대한 구성을 재정의해야 할 수 있습니다.

각 서비스 클라이언트에는 기존 구성의 복사본을 수정할 수 있는 `withConfig` 확장이 있습니다. `withConfig` 확장은 수정된 구성으로 새 서비스 클라이언트를 반환합니다. 원래 클라이언트는 독립적으로 존재하며 원래 구성을 사용합니다.

다음 예제는 두 작업을 호출하는 `S3Client` 인스턴스의 생성을 보여줍니다.

```
val s3 = S3Client.fromEnvironment {
    logMode = LogMode.LogRequest
    region = "us-west-2"
    // ...other configuration settings...
}

s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

다음 코드 조각은 단일 `listObjectV2` 작업에 대한 구성을 재정의하는 방법을 보여줍니다.

```
s3.withConfig {
    region = "eu-central-1"
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```

`s3` 클라이언트에 대한 작업 호출은 클라이언트가 생성될 때 지정된 원래 구성을 사용합니다. 구성에는 리전에 `us-west-2 region` 대한 [요청 로깅](logging.md#sdk-log-mode) 및가 포함됩니다.

`overriddenS3` 클라이언트의 `listObjectsV2` 호출은 현재 인 리전을 제외하고 원래 `s3` 클라이언트와 동일한 설정을 사용합니다`eu-central-1`.

## 재정의된 클라이언트의 수명 주기
<a name="override-client-lifecycle"></a>

이전 예제에서 `s3` 클라이언트와 `overriddenS3` 클라이언트는 서로 독립적입니다. 작업은 열린 상태로 유지되는 한 클라이언트에서 호출할 수 있습니다. 각각은 별도의 구성을 사용하지만 기본 리소스(예: HTTP 엔진)도 재정의되지 않는 한 공유할 수 있습니다.

재정의된 구성으로 클라이언트를 닫고 원래 클라이언트를 별도로 닫습니다. 원래 클라이언트를 닫기 전이나 후에 재정의된 구성으로 클라이언트를 닫을 수 있습니다. 구성이 재정의된 클라이언트를 장기간 사용해야 하는 경우가 아니라면 `use` 메서드로 수명 주기를 래핑하는 것이 좋습니다. `use` 메서드는 예외가 발생할 경우 클라이언트가 닫히도록 합니다.

## 클라이언트 간에 공유되는 리소스
<a name="override-client-shared-res"></a>

를 사용하여 서비스 클라이언트를 생성하면 원래 클라이언트와 리소스를 공유할 `withConfig`수 있습니다. 반대로 [fromEnvironment](creating-clients.md#loading-from-the-environment)를 사용하여 클라이언트를 생성하거나 [명시적으로 구성](creating-clients.md#programmatic-config)하면 클라이언트는 독립 리소스를 사용합니다. HTTP 엔진 및 자격 증명 공급자와 같은 리소스는 `withConfig` 블록에서 재정의되지 않는 한 공유됩니다.

각 클라이언트의 수명 주기는 독립적이므로 공유 리소스는 마지막 클라이언트가 닫힐 때까지 열려 있고 사용할 수 있습니다. 따라서 더 이상 필요하지 않은 경우 재정의된 서비스 클라이언트를 닫는 것이 중요합니다. 이렇게 하면 공유 리소스가 열린 상태로 유지되고 메모리, 연결 및 CPU 주기와 같은 시스템 리소스가 소비되지 않습니다.

다음 예제에서는 공유 리소스와 독립 리소스를 모두 보여줍니다.

`s3` 및 `overriddenS3` 클라이언트는 캐싱 구성을 포함하여 동일한 자격 증명 공급자 인스턴스를 공유합니다. 캐시된 값이 `s3` 클라이언트의 호출에서 여전히 최신 상태인 경우 자격 증명을 `overriddenS3` 재사용하여 수행된 호출입니다.

 HTTP 엔진은 두 클라이언트 간에 공유되지 않습니다. 각 클라이언트에는 `withConfig` 호출에서 재정의되었기 때문에 독립 HTTP 엔진이 있습니다.

```
val s3 = S3Client.fromEnvironment {
    region = "us-west-2"
    credentialsProvider = CachedCredentialsProvider(CredentialsProviderChain(...))
    httpClientEngine = OkHttpEngine { ... }
}

s3.listBuckets { ... }

s3.withConfig {
    httpClientEngine = CrtHttpEngine { ... }
}.use { overriddenS3 ->
    overriddenS3.listObjectsV2 { ... }
}
```