TransactionInProgressException
요약 — 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}));의도적인 동시 호출자를 직렬화하세요 — 두 워커가 같은 논리적 트랜잭션을 제출할 수 있다면, 하나를 소유자로 만들거나 둘 다 큐로 라우팅하세요.
트랜잭션이 타임아웃을 발동시킬 만큼 오래 실행되면 무엇에 경합하는지 확인하세요 — DynoTable 데스크톱 앱은 관련된 항목을 검사하게 해주고, DynamoDB 요금 계산기는 트랜잭션 쓰기의 두 배 쓰기 용량 비용을 보여줍니다.
관련 오류
- IdempotentParameterMismatchException — 같은 토큰, 다른 페이로드.
- TransactionCanceledException — 트랜잭션 자체가 실패함.
- TransactionConflictException — 다른 트랜잭션과의 항목 수준 충돌.
- 코드 예제: TransactWriteItems in Node.js — ClientRequestToken 사용을 보여줌.
- 학습: DynamoDB transactions
References
- 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-07-13에 마지막으로 검증되었습니다.