

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

# Amazon DocumentDB에서 재시도 가능한 쓰기
<a name="retryable-writes"></a>

엔진 버전 8.0.2부터 Amazon DocumentDB는 재시도 가능한 쓰기를 지원합니다. 일시적인 네트워크 오류 또는 기본 선택으로 인해 쓰기 작업이 실패하면 드라이버는 작업을 정확히 한 번 재시도할 수 있습니다. Amazon DocumentDB는 재시도된 쓰기를 중복 제거하므로 작업이 최대 한 번 적용되어 멱등성을 유지합니다.

재시도 가능한 쓰기에는 재시도 가능한 쓰기 프로토콜을 지원하는 MongoDB 호환 드라이버가 필요합니다. 대부분의 현재 MongoDB 호환 드라이버는 기본적으로 재시도 가능한 쓰기를 활성화합니다(`retryWrites=true`연결 문자열에서 ). 이전 버전에서 엔진 8.0.2로 업그레이드하는 경우 연결 문자열`retryWrites=false`에서를 제거하여이 기능을 활성화할 수 있습니다.

## 요구 사항
<a name="retryable-writes-requirements"></a>

재시도 가능한 쓰기를 사용하려면 다음 요구 사항을 충족해야 합니다.
+ Amazon DocumentDB 엔진 버전 8.0.2 이상.
+ 재시도 가능한 쓰기를 지원하는 MongoDB 호환 드라이버입니다. 최소 버전은 드라이버 설명서를 참조하세요.
+ 연결 문자열에가 포함`retryWrites=true`되거나 드라이버가 기본적으로 재시도 가능한 쓰기(대부분의 현재 드라이버가 수행)여야 합니다.

## 지원되는 연산자
<a name="retryable-writes-supported-operations"></a>

재시도 가능한 쓰기는 각 개별 쓰기가 최대 하나의 문서에 영향을 미치는 쓰기 작업에 적용됩니다. 배치 내의 각 쓰기는 별도로 중복 제거되므로 배치 작업은 한정됩니다.

다음 쓰기 작업을 재시도할 수 있습니다.
+ `insertOne`
+ `insertMany`
+ `updateOne`
+ `deleteOne`
+ `findOneAndUpdate`
+ `findOneAndDelete`
+ `findOneAndReplace`
+ `bulkWrite` (`insertOne`, `updateOne``deleteOne`, 또는 `replaceOne` 작업으로 구성된 경우)

`insertMany` 및의 경우 배치의 `bulkWrite`각 문서는 개별적으로 중복 제거됩니다. 재시도가 필요한 경우 아직 적용되지 않은 문서만 삽입됩니다.

**참고**  
`commitTransaction` 및 `abortTransaction`는 쓰기가 아닌 트랜잭션 제어 명령으로 재시도할 수도 있습니다. 트랜잭션 내의 개별 쓰기는 재시도할 수 없습니다. 자세한 내용은 [제한 사항](#retryable-writes-limitations) 섹션을 참조하세요.

## 제한 사항
<a name="retryable-writes-limitations"></a>

Amazon DocumentDB에서 재시도 가능한 쓰기에는 다음 제한 사항이 적용됩니다.
+ `updateMany` 및 `deleteMany`는 재시도할 수 없습니다.
+ 다중 문 트랜잭션 내의 쓰기는 재시도할 수 없습니다. 트랜잭션 커밋 및 중단 작업은 별도로 재시도할 수 있습니다.
+ 문서에는 재시도 가능한 삽입에 대한 `_id` 필드가 포함되어야 합니다.
+ 재시도 가능한 쓰기는 엔진 버전 8.0.2 이상에서만 사용할 수 있습니다. 이전 엔진 버전에서는 오류를 방지하기 위해 연결 문자열`retryWrites=false`에를 설정합니다.
+ 쿼리 플래너 버전 1.0을 사용하는 클러스터에서는 쓰기 작업을 재시도할 수 없습니다.
+ 대용량 문서를 반환하는 `findOneAndUpdate``findOneAndDelete`, 및 `findOneAndReplace` 작업의 경우 전체 결과 문서가 중복 제거를 위해 캐시되므로 재시도 가능한 쓰기로 인해 쓰기 지연 시간이 증가할 수 있습니다. 쓰기 성능이 중요하고 반환된 문서가 큰 경우 해당 워크로드에 `retryWrites=false` 대한 설정을 고려하세요.

## 재시도 가능한 쓰기 활성화
<a name="retryable-writes-enabling"></a>

재시도 가능한 쓰기를 활성화하려면 연결 문자열`retryWrites=true`에를 포함합니다.

```
mongodb://{{<username>}}:{{<password>}}@{{<cluster-endpoint>}}:27017/?tls=true&tlsCAFile=global-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=true
```

드라이버의 기본값이 인 경우 연결 문자열`retryWrites=false`에서 명시적인를 제거할 `retryWrites=true`수 있습니다.

전체 연결 문자열 연습은 섹션을 참조하세요[Amazon DocumentDB에 프로그래밍 방식으로 연결](connect_programmatically.md).

## 재시도 가능한 쓰기 작동 방식
<a name="retryable-writes-how-it-works"></a>

애플리케이션이를 사용하여 쓰기`retryWrites=true`를 전송하면 드라이버는 논리적 세션 ID(`lsid`)와 트랜잭션 번호(`txnNumber`)를 쓰기 명령에 연결합니다. Amazon DocumentDB는 다음 식별자를 사용하여 쓰기를 중복 제거합니다.
+ 첫 번째 시도에서 Amazon DocumentDB는 쓰기를 실행하고 결과를 캐싱합니다.
+ 드라이버가 동일한 쓰기( `lsid` 및 동일`txnNumber`)를 재시도하면 Amazon DocumentDB는 쓰기를 다시 실행하지 않고 캐시된 결과를 반환합니다.
+ Amazon DocumentDB는 원본 쓰기 후 60분 동안 재시도를 수행합니다. 드라이버는 즉시 재시도하므로이 기간은 드라이버에 필요한 시간보다 훨씬 더 깁니다.

원래 쓰기 후 60분 이상 후에 재시도가 도착하면 Amazon DocumentDB에 캐시된 결과가 더 이상 없으며 쓰기를 새 작업으로 실행합니다.

## 오류 처리
<a name="retryable-writes-errors"></a>

다음 오류는 Amazon DocumentDB에서 재시도 가능한 쓰기에만 해당됩니다.


| 오류 코드 | 이름 | 설명 | 
| --- | --- | --- | 
| 225 | TransactionTooOld | 동일한 세션 및 문에 대한 최신 트랜잭션 번호가 이미 커밋되었으므로이 재시도가 너무 오래되어 적용할 수 없습니다. | 
| 301 | 재시도 가능한 쓰기는 지원되지 않음 | 쓰기에는 재시도 가능한 쓰기 필드가 포함되어 있지만 엔진 버전은 재시도 가능한 쓰기를 지원하지 않거나 작업을 재시도할 수 없습니다. 8.0.2 이전의 엔진 버전에 연결할 retryWrites=false 때를 설정합니다. | 

## retryWrites=false에서 마이그레이션
<a name="retryable-writes-migration"></a>

엔진 버전 8.0.2로 업그레이드하고 현재 연결 문자열`retryWrites=false`에서를 사용하는 경우:

1. 클러스터를 엔진 버전 8.0.2 이상으로 업그레이드합니다.

1. 애플리케이션의 연결 문자열`retryWrites=false`에서를 제거하거나 로 변경합니다`retryWrites=true`.

1. 애플리케이션 코드를 변경할 필요가 없습니다. 드라이버는 재시도를 자동으로 처리합니다.