TransactionInProgressException
TL;DR — TransactWriteItems번의 재시도는 아직 실행 중인 시도와 동일한 ClientRequestToken을 수행했습니다. 이는 일반적으로 트랜잭션이 완료되는 것보다 더 빠르게 클라이언트 시간 초과를 의미하므로 SDK의 재시도가 진행 중인 원본과 충돌합니다. 백오프로 계속 재시도하고(원본 완료 후 나중에 재시도하면 멱등성 성공 반환) 최대 5초 후에 최소 한 번의 재시도가 이루어지도록 시간 초과를 조정합니다.
무엇을 의미하는가
TransactionInProgressException: The transaction with the given request token
is already in progress.ClientRequestToken은 TransactWriteItems`을 멱등성으로 만듭니다. 10분 이내에 동일한 호출이 하나의 트랜잭션으로 계산됩니다. 첫 번째 시도가 아직 처리되는 동안 동일한 토큰을 사용한 두 번째 호출은 아직 응답할 수 없습니다. 이는 완료된 트랜잭션의 중복도 아니고 새 트랜잭션도 아닙니다. 따라서 DynamoDB는 이 예외를 제외하고 이를 거부합니다. 이는 데이터 오류가 아닌 타이밍 신호입니다.
왜 발생하는가
- 트랜잭션 대기 시간보다 짧은 클라이언트 시간 초과 — 요청 시간 초과가 발생하고 SDK가 재시도하며 원래 트랜잭션이 커밋되는 동안 재시도가 발생합니다.
- 공격적인 재시도 정책 — 매우 짧은 백오프는 몇 초가 필요한 트랜잭션에 여러 번의 재시도가 누적될 수 있음을 의미합니다.
- 두 명의 호출자가 하나의 토큰을 공유 — 의도적으로(또는 실수로) 동일한
ClientRequestToken를 동시에 발행하는 별도의 프로세스입니다.
어떻게 해결하는가
지수 백오프로 재시도를 계속하도록 합니다 — 진행 중인 트랜잭션이 완료되면 동일한 토큰을 사용한 재시도는 쓰기를 두 번 적용하지 않고 성공을 반환합니다. 이 예외를 재시도 가능한 것으로 처리하십시오.
문서화된 지침에 따라 시간 제한을 조정하여 트랜잭션이 완료된 후 재시도가 이루어질 수 있도록 합니다.
- 첫 번째 시도 이후 5초가 경과한 후 최소한 한 번의 재시도가 처리되도록 허용합니다.
- 요청당 시간 초과를 약 1초 이상으로 설정합니다.
- 소켓 시간 초과를 요청 시간 초과 약간 아래로 유지합니다.
- 시도 사이에 지수 백오프를 사용합니다.
재시도 시 토큰을 회전하지 마세요 — 시도당 새로운
ClientRequestToken를 생성하면 자동으로 재시도가 _새 트랜잭션_으로 변환됩니다(쓰기를 이중 적용). 최대 10분 동안 동일한 의도, 동일한 토큰:const token = randomUUID(); // one token per logical transaction await client.send(new TransactWriteItemsCommand({TransactItems, ClientRequestToken: token}));의도적인 동시 호출자를 직렬화 — 두 명의 작업자가 동일한 논리적 트랜잭션을 제출할 수 있는 경우 한 명을 소유자로 만들거나 둘 다 대기열을 통해 라우팅합니다.
재시도할 때마다 토큰 및 경과 시간을 기록합니다. 5초 지침이 문서화되어 있습니다. 로그에는 재시도가 너무 일찍 도착하는지 여부가 표시되어야 합니다.
DynoTable 경로
시간 초과를 조정하기 전에 긴 트랜잭션이 접촉하는 항목을 검사하십시오. ⌘K로 해당 항목을 열고 병렬 작성기의 단축키 경합이 없는지 확인하십시오. 스테이징(⌘S)을 사용하면 먼저 개발 데이터에 대해 더 작은 트랜잭션을 재생할 수 있습니다.
pricing calculator을 사용하여 트랜잭션 쓰기 비용을 추정합니다. ⌘P로 프로필을 전환합니다. 설정 → 프로필에서 연결 테스트를 수행합니다. Connect to AWS 및 Install를 참조하세요.
출처
- TransactWriteItems — Amazon DynamoDB API Reference (2026-07-13 검증)
- Amazon DynamoDB Transactions: How it works (2026-07-13 검증)
관련 오류
- IdempotentParameterMismatchException — 동일한 토큰, 다른 페이로드.
- TransactionCanceledException — 거래 자체가 실패했습니다.
- TransactionConflictException — 다른 거래와 아이템 수준 충돌.
- 코드 예: TransactWriteItems in Node.js — ClientRequestToken 사용법을 보여줍니다.
- 학습: DynamoDB transactions
참고 자료
- TransactWriteItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.