

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

# AWS SDK for Rust에서 재시도 구성
<a name="retries"></a>

 AWS SDK for Rust는 서비스 요청 및 사용자 지정 가능한 구성 옵션에 대한 기본 재시도 동작을 제공합니다. 를 호출하여 예기치 않은 예외 AWS 서비스 를 가끔 반환합니다. 직접 호출을 재시도하면 스로틀링 또는 일시적 오류와 같은 특정 유형의 오류가 성공할 수 있습니다.

공유 AWS `config` 파일의 환경 변수 또는 설정을 사용하여 전역적으로 재시도 동작을 구성할 수 있습니다. 이 접근법에 대한 정보는 *AWS SDK 및 도구 참조 설명서*의 [재시도 동작](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html)을 참조하세요. 또한 재시도 전략 구현에 대한 자세한 정보와 적절한 구현을 선택하는 방법도 포함되어 있습니다.

또는 다음 섹션과 같이 코드에서 이러한 옵션을 구성할 수도 있습니다.

## 기본 재시도 구성
<a name="defaultRetryConfig"></a>

 모든 서비스 클라이언트는 기본적으로 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html) 구조체를 통해 제공되는 `standard` 재시도 전략 구성을 사용합니다. 기본적으로 직접 호출은 세 번 시도됩니다(*초기 시도와 두 번의 재시도*). 또한 재시도 폭풍을 방지하기 위해 각 재시도는 임의의 짧은 기간을 두고 지연됩니다. 이 규칙은 대부분의 사용 사례에 적합하지만 처리량이 많은 시스템과 같은 특정 상황에서는 적합하지 않을 수 있습니다.

 일부 유형의 오류만 SDK에서 재시도 가능한 것으로 간주됩니다. 재시도 가능한 오류의 예는 다음과 같습니다.
+ 소켓 제한 시간
+ 서비스 측 스로틀링
+ HTTP 5XX 응답과 같은 일시적인 서비스 오류

다음 예제는 재시도 가능한 것으로 간주되지 **않습니다**.
+ 파라미터 누락 또는 유효하지 않음
+ 인증/보안 오류
+ 잘못된 구성 예외

최대 시도 횟수, 지연 횟수 및 백오프 구성을 설정하여 `standard` 재시도 전략을 사용자 지정할 수 있습니다.

## 최대 시도 횟수
<a name="maxAttempts"></a>

수정된 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)를 `aws_config::defaults`에 제공하여 코드의 최대 시도 횟수를 사용자 지정할 수 있습니다.

```
const CUSTOM_MAX_ATTEMPTS: u32 = 5;
let retry_config = RetryConfig::standard()
    // Set max attempts. When max_attempts is 1, there are no retries.
    // This value MUST be greater than zero.
    // Defaults to 3.
    .with_max_attempts(CUSTOM_MAX_ATTEMPTS);
  
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(retry_config)
    .load()
    .await;
```

## 지연 및 백오프
<a name="delays"></a>

재시도가 필요한 경우 기본 재시도 전략은 후속 시도를 수행하기 전에 대기합니다. 첫 번째 재시도의 지연 시간은 짧지만 이후 재시도에서는 기하급수적으로 증가합니다. 최대 지연 시간은 너무 크게 증가하지 않도록 제한됩니다.

무작위 지터는 모든 시도 사이의 지연에 적용됩니다. 지터는 재시도 폭풍을 일으킬 수 있는 대규모 플릿의 영향을 완화하는 데 도움이 됩니다. 지수 백오프 및 지터에 대한 자세한 내용은 *AWS 아키텍처 블로그*의 [지수 백오프 및 지터](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)를 참조하세요.

 수정된 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)를 `aws_config::defaults`에 제공하여 코드의 지연 설정을 사용자 지정할 수 있습니다. 다음 코드는 첫 번째 재시도를 최대 100밀리초 동안 지연하고 재시도 사이의 최대 시간이 5초가 되도록 구성을 설정합니다.

```
let retry_config = RetryConfig::standard()
    // Defaults to 1 second.
    .with_initial_backoff(Duration::from_millis(100))
    // Defaults to 20 seconds.
    .with_max_backoff(Duration::from_secs(5));
  
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(retry_config)
    .load() 
    .await;
```

## 적응형 재시도 모드
<a name="AdaptiveRetryMode"></a>

 `standard` 모드 재시도 전략의 대안으로 `adaptive` 모드 재시도 전략은 스로틀링 오류를 최소화하기 위해 이상적인 요청 속도를 찾는 고급 접근 방식입니다.

**참고**  
적응형 재시도는 고급 재시도 모드입니다. 이 전략의 사용은 일반적으로 권장되지 않습니다. *AWS SDK 및 도구 참조 안내서*의 [재시도 동작](https://docs.aws.amazon.com/sdkref/latest/guide/feature-retry-behavior.html#standardvsadaptive)을 참조하세요.

적응형 재시도에는 표준 재시도의 모든 기능이 포함됩니다. 비스로틀링 요청과 비교하여 스로틀링 요청의 속도를 측정하는 클라이언트 측 속도 제한 도구를 추가합니다. 또한 트래픽을 제한하여 안전한 대역폭 내에 유지하려는 시도로 스로틀링 오류가 발생하지 않는 것이 이상적입니다.

속도는 변화하는 서비스 조건 및 트래픽 패턴에 실시간으로 적응하며 그에 따라 트래픽 속도를 높이거나 낮출 수 있습니다. 트래픽이 많은 시나리오에서는 속도 제한 도구가 초기 시도를 지연시킬 수 있습니다.

수정된 [https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html](https://docs.rs/aws-smithy-types/latest/aws_smithy_types/retry/struct.RetryConfig.html)를 제공하여 코드에서 `adaptive` 재시도 전략을 선택할 수 있습니다.

```
let config = aws_config::defaults(BehaviorVersion::latest())
    .retry_config(RetryConfig::adaptive())
    .load()
    .await;
```