

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

# AWS SDK for Rust에서 인터셉터 구성
<a name="interceptors"></a>

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

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

```
use std::borrow::Cow;
use aws_smithy_runtime_api::client::interceptors::{
    Intercept,
    context::BeforeTransmitInterceptorContextMut,   
};
use aws_smithy_runtime_api::client::runtime_components::RuntimeComponents;
use aws_smithy_types::config_bag::ConfigBag;
use aws_smithy_runtime_api::box_error::BoxError;

#[derive(Debug)]
struct AddHeaderInterceptor {
    key: Cow<'static, str>,
    value: Cow<'static, str>,
}

impl AddHeaderInterceptor {
    fn new(key: &'static str, value: &'static str) -> Self {
        Self {
            key: Cow::Borrowed(key),
            value: Cow::Borrowed(value),
        }
    }
}

impl Intercept for AddHeaderInterceptor {
    fn name(&self) -> &'static str {
        "AddHeader"
    }

    fn modify_before_retry_loop(
        &self,
        context: &mut BeforeTransmitInterceptorContextMut<'_>,
        _runtime_components: &RuntimeComponents,
        _cfg: &mut ConfigBag,
    ) -> Result<(), BoxError> {
        let headers = context.request_mut().headers_mut();
        headers.insert(self.key.clone(), self.value.clone());

        Ok(())
    }
}
```

자세한 내용과 사용 가능한 인터셉터 후크는 [인터셉트](https://docs.rs/aws-smithy-runtime-api/latest/aws_smithy_runtime_api/client/interceptors/trait.Intercept.html) 특성을 참조하세요.

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

서비스 클라이언트를 구성하거나 특정 작업에 대한 구성을 재정의할 때 인터셉터를 등록합니다. 등록은 인터셉터를 클라이언트의 모든 작업에 적용할지 아니면 특정 작업에만 적용할지에 따라 달라집니다.

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

전체 클라이언트에 대한 인터셉터를 등록하려면 `Builder` 패턴을 사용하여 인터셉터를 추가합니다.

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .load()
    .await;
    
// All service operations invoked using 's3' will have the header added.
let s3_conf = aws_sdk_s3::config::Builder::from(&config)
    .interceptor(AddHeaderInterceptor::new("x-foo-version", "2.7"))
    .build();

let s3 = aws_sdk_s3::Client::from_conf(s3_conf);
```

### 특정 작업에 대한 인터셉터
<a name="interceptors-registration-specific"></a>

단일 작업에 대해서만 인터셉터를 등록하려면 `customize` 확장을 사용합니다. 이 방법을 사용하여 작업별 수준에서 서비스 클라이언트 구성을 재정의할 수 있습니다. 사용자 지정 가능한 작업에 대한 자세한 내용은 [AWS SDK for Rust에서 클라이언트의 단일 작업 구성 재정의](peroperation.md) 섹션을 참조하세요.

```
// Only the list_buckets operation will have the header added.
s3.list_buckets()
    .customize()
    .interceptor(AddHeaderInterceptor::new("x-bar-version", "3.7"))
    .send()
    .await?;
```