

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

# HTTP 인터셉터
<a name="interceptors"></a>

인터셉터를 사용하여 API 요청 및 응답 실행에 연결할 수 있습니다. 인터셉터는 SDK가 요청/응답 수명 주기에 동작을 주입하기 위해 작성하는 코드를 호출하는 개방형 메커니즘입니다. 이 방법으로 진행 중인 요청 수정, 요청 처리 디버그, 예외 보기 등의 작업을 수행할 수 있습니다.

다음 예제는 재시도 루프가 입력되기 전에 모든 발신 요청에 헤더를 추가하는 간단한 인터셉터를 보여줍니다.

```
class AddHeader(
    private val key: String,
    private val value: String
) : HttpInterceptor {
    override suspend fun modifyBeforeRetryLoop(context: ProtocolRequestInterceptorContext<Any, HttpRequest>): HttpRequest {
        val httpReqBuilder = context.protocolRequest.toBuilder()
        httpReqBuilder.headers[key] = value
        return httpReqBuilder.build()
    }
}
```

자세한 내용과 사용 가능한 인터셉션 후크는 [ 인터셉터 인터페이스를](https://docs.aws.amazon.com/smithy-kotlin/api/latest/smithy-client/aws.smithy.kotlin.runtime.client/-interceptor/index.html) 참조하세요.

## 인터셉터 등록
<a name="interceptor-registration"></a>

서비스 클라이언트를 구성하거나 특정 작업 세트에 대한 구성을 재정의할 때 인터셉터를 등록합니다.

### 모든 서비스 클라이언트 작업에 대한 인터셉터
<a name="interceptor-all-ops"></a>

다음 코드는 빌더의 인터셉터 속성에 `AddHeader` 인스턴스를 추가합니다. 이렇게 추가하면 재시도 루프가 입력되기 전에 모든 작업에 `x-foo-version` 헤더가 추가됩니다.

```
val s3 = S3Client.fromEnvironment {
    interceptors += AddHeader("x-foo-version", "1.0")
}

// All service operations invoked using 's3' will have the header appended.
s3.listBuckets { ... }
s3.listObjectsV2 { ... }
```

### 특정 작업 전용 인터셉터
<a name="interceptor-specific-ops"></a>

`withConfig` 확장을 사용하면 모든 [서비스 클라이언트에 대한 하나 이상의 작업에 대해 서비스 클라이언트 구성을 재정](override-client-config.md)의할 수 있습니다. 이 기능을 사용하면 작업 하위 집합에 대한 추가 인터셉터를 등록할 수 있습니다.

다음 예제에서는 `use` 확장 내의 작업에 대한 `s3` 인스턴스 구성을 재정의합니다. 에서 호출된 작업`s3Scoped`에는 `x-foo-version` 및 `x-bar-version` 헤더가 모두 포함됩니다.

```
// 's3' instance created in the previous code snippet.
s3.withConfig {
    interceptors += AddHeader("x-bar-version", "3.7")
}.use { s3Scoped ->
    // All service operations invoked using 's3Scoped' trigger interceptors
    // that were registered when the client was created and any added in the
    // withConfig { ... } extension.
}
```