DynamoDB TransactionConflectException
TL;DR — 귀하의 요청과 동일한 항목에 대해 다른 트랜잭션이 이미 작동 중이므로 DynamoDB는 격리를 유지하기 위해 귀하의 트랜잭션을 거부했습니다. 이는 데이터의 버그가 아니라 일시적인 경합입니다. 지수 백오프로 재시도하고, 트랜잭션을 작게 유지하고, 동일한 핫 항목에 대한 동시 쓰기를 줄입니다.
무엇을 의미하는가
TransactionConflictException: Transaction is ongoing for the itemDynamoDB는 진행 중인 트랜잭션에 대해 충돌하는 쓰기를 직렬화합니다. 일반 PutItem, UpdateItem 또는 DeleteItem가 동일한 항목을 포함하는 기내 TransactWriteItems와 충돌할 때 이 예외가 발생합니다. DynamoDB는 차단하는 대신 TransactionConflictException(HTTP 400)를 사용한 단일 항목 쓰기를 거부합니다. 재시도 가능 — 다른 트랜잭션이 커밋되거나 중단되면 충돌이 사라집니다.
TransactionCanceledException와의 차이점에 유의하세요. 손실된 요청 자체가 TransactWriteItems 또는 TransactGetItems인 경우 DynamoDB는 대신 해당 전체 트랜잭션을 취소합니다. _cancellation_이 발생하며 CancellationReasons은 항목별 이유 코드로 TransactionConflict을 전달하지만 이 예외는 아닙니다.
왜 발생하는가
- 동일 항목에 동시 쓰기 — 일반
PutItem/UpdateItem가 해당 항목을 터치하는 기내TransactWriteItems와 겹칩니다. - 항목을 공유하는 두 개의 트랜잭션 — 두 개의
TransactWriteItems요청에 동시에 동일한 키가 포함됩니다. 하나는 승리하고 다른 하나는TransactionConflict이유 코드(TransactionCanceledException로 표시됨)와 함께 취소됩니다. - 과도한 동시 업데이트가 발생하는 인기 항목 — 예: 요청이 업데이트될 때마다 공유 카운터 또는 단일 집계 행.
- 다른 작성자와 겹칠 만큼 긴 항목을 보유하는 길거나 큰 거래.
- 재시도 폭주 — 백오프 없이 재시도하면 동일한 경합 항목에 대해 더 많은 동시 시도가 누적됩니다.
어떻게 해결하는가
- 지수 백오프 + 지터를 사용하여 재시도합니다. 이것이 기본 수정 사항입니다. 충돌은 일시적이며 다른 트랜잭션이 해결되면 사라집니다. 재시도가 다른 충돌로 다시 동기화되지 않도록 지터를 유지하세요.
- 거래를 작고 짧게 유지 —
TransactWriteItems당 품목 수가 적다는 것은 보유 기간이 짧고 중복이 적다는 것을 의미합니다. - 핫 항목에 대한 경합 감소 — 여러 항목에 걸쳐 핫 카운터를 분할하고 집계하거나 전부 아니면 전무 의미 체계가 필요하지 않은 경우 트랜잭션 대신 일반
UpdateItem(ADD)과 함께 atomic counter를 사용합니다. - 가능하다면 동일한 항목에 대해 트랜잭션과 일반 쓰기를 동시에 혼합하지 마십시오**. 둘 다 동일한 경로를 통해 라우팅합니다.
TransactionConflictCloudWatch 지표를 모니터링하여 경합이 증가하는지 여부와 발생 위치를 확인합니다.
DynoTable에서 검사
동시 작성자가 귀하인 경우 스테이징(⌘S)을 통한 일괄 수동 편집 — DynoTable은 겹치는 단일 항목 업데이트 스트림 대신 하나의 검토된 쓰기로 이를 커밋합니다. ⌘K로 경합 항목을 열고 재시도하기 전에 라이브 상태를 검사하세요.
pricing calculator을 사용하여 트랜잭션 트래픽 크기를 조정합니다. ⌘P로 프로필을 전환합니다. 설정 → 프로필에서 연결 테스트를 수행합니다. Connect to AWS 및 Install를 참조하세요.
출처
- Amazon DynamoDB Transactions: How it works (2026-07-13 인증)
- PutItem — Amazon DynamoDB API Reference (2026-07-13 인증)
FAQ
DynamoDB에서 TransactionConstrictException을 수정하려면 어떻게 해야 합니까? 지수 백오프 및 지터를 사용하여 요청을 재시도합니다. 충돌은 동일한 항목에 대한 다른 진행 중인 트랜잭션과의 일시적인 경합입니다. 또한 트랜잭션을 작게 유지하고 핫 항목을 샤딩하고 동일한 항목에 대해 트랜잭션과 일반 쓰기를 동시에 실행하지 마십시오.
TransactionConflectException은 TransactionCanceledException과 동일합니까? 아니요. TransactionConflectException은 해당 항목에 대해 현재 다른 트랜잭션이 작동 중임을 의미합니다. TransactionCanceledException은 전체 트랜잭션이 롤백되었음을 의미합니다. CancellationReasons는 이유를 설명하며, 트랜잭션 충돌은 이러한 이유 중 하나일 수 있습니다.
관련 오류
- TransactionCanceledException — 전체 트랜잭션이 롤백되었습니다(조건, 용량 또는 충돌).
- ConditionalCheckFailedException — 단일 쓰기 조건이 실패했습니다.
- 코드 예: TransactWriteItems in Node.js — 적응을 위해 재시도/백오프가 포함된 트랜잭션입니다.
- 학습: DynamoDB transactions · Atomic counters
참고 자료
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
- TransactWriteItems — Amazon DynamoDB API Reference
- DynamoDB metrics and dimensions — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.