TransactWriteItems 호출에 작업이 너무 많습니다.
TL;DR — DynamoDB 트랜잭션은 100개의 작업으로 제한됩니다. TransactWriteItems(및 TransactGetItems)은 100개 이상의 Put/Update/Delete/ConditionCheck 작업이 있는 요청을 거부합니다. 작업을 여러 트랜잭션으로 분할하거나, 전부 아니면 전무의 원자성이 필요하지 않은 경우 대신 BatchWriteItem(호출당 25)를 사용하세요.
무엇을 의미하는가
ValidationException: 1 validation error detected: Value '<your request>' at 'transactItems' failed to satisfy constraint: Member must have length less than or equal to 100이 서비스는 약 65,000자의 101개 작업 트랜잭션에 대해 <your request>이 있는 일련화된 요청 전체를 반영합니다. 결론은 마지막 문장이다.
TransactWriteItems은 모두 커밋하거나 모두 롤백하는 작업을 그룹화하지만 단일 트랜잭션은 최대 100개의 작업을 보유할 수 있으며 트랜잭션 항목의 총 크기는 4MB를 초과할 수 없습니다. 더 많이 전달하면 DynamoDB가 실행 전에 전체 호출을 거부합니다. 메시지는 종종 목록 길이에 대한 제약으로 읽혀집니다. 클라이언트측 HTTP 400 ValidationException이며 트랜잭션이 작아질 때까지 재시도할 수 없습니다.
왜 발생하는가
- 너무 많은 쓰기를 원자적으로 일괄 처리 — 한 트랜잭션에 150개의 입력을 커밋하려고 합니다.
- 무제한 작업을 단일
TransactItems목록에 추가하는 루프입니다. - 100개를 초과하는 팬아웃 — 100개 이상의 항목을 다루며 단일 트랜잭션으로 모델링된 하나의 논리적 작업입니다.
- 쓰기만 계산 —
ConditionCheck작업도 100에 포함된다는 점을 기억하세요.
어떻게 해결하는가
- 각각 100개 이하의 작업으로 구성된 여러 트랜잭션으로 분할 — 각 트랜잭션은 독립적으로 원자적입니다(함께 롤백되지 않음).
- 트랜잭션이 필요한지 다시 생각해 보세요 — 쓰기에 전부 아니면 전무 의미 체계가 필요하지 않은 경우
BatchWriteItem(호출당 ≤25)가 더 저렴하고 처리량 친화적입니다. - 작업 횟수 줄이기 — 하나의 항목에 대한 여러 돌연변이를 결합된
UpdateExpression와 함께 단일Update로 접습니다. - 집계를 다르게 모델링하여 단일 논리적 변경 사항이 더 적은 수의 항목에 영향을 미치도록 합니다.
- 100개 작업 제한과 함께 4MB의 총 항목 크기 한도를 확인하세요. 큰 항목은 100개 작업 미만에서도 실패할 수 있습니다.
재현하기
101개의 작업이 있는 트랜잭션 중 하나가 한도를 초과했습니다. 거부는 트랜잭션별 오류가 아니라 배열 길이에 대한 일반 오류입니다.
const actions = Array.from({length: 101}, (_, i) => ({
Put: {TableName: 'orders', Item: {pk: {S: `T#${i}`}, sk: {S: 'META'}}}
}));
await client.send(new TransactWriteItemsCommand({TransactItems: actions}));실제 출력:
ValidationException: Member must have length less than or equal to 100
HTTP 400문구에 유의하세요. DynamoDB는 이를 TransactItems 배열의 길이 제약으로 거부하므로, 얻는 문자열에는 트랜잭션에 대한 언급이 전혀 포함되어 있지 않습니다. 메시지만 검색한다고 해서 여기로 연결되는 것은 아닙니다.
DynoTable 워크벤치
100개 이상의 쓰기를 원자적으로 커밋하기 전에 DynoTable에서 대상 항목을 검사합니다. ⌘K로 테이블을 열고 각 키가 있는지 확인합니다. 스테이징(⌘S)을 사용하면 더 작은 트랜잭션을 먼저 테스트할 수 있습니다.
Expression Builder에서 다중 항목 업데이트를 구축하고 하나의 키에 대한 중복 작업을 단일 Update로 접습니다. ⌘P로 프로필을 전환합니다. Connect to AWS 및 Install를 참조하세요.
출처
- TransactWriteItems — Amazon DynamoDB API Reference (2026-07-13 검증)
- Amazon DynamoDB Transactions: How it works (2026-07-13 인증)
관련 오류
- Transaction request cannot include multiple operations on one item — 거래에서 동일한 품목이 두 번 타겟팅되었습니다.
- TransactionCanceledException — 커밋 시 취소된 유효한 트랜잭션입니다.
- Too many items requested for the BatchWriteItem call — 비거래 배치 제한(25).
- 코드 예: TransactWriteItems in Node.js — 시작할 수 있는 올바른 크기의 트랜잭션입니다.
- 학습: DynamoDB transactions · Batch operations
참고 자료
- TransactWriteItems — Amazon DynamoDB API Reference
- TransactGetItems — Amazon DynamoDB API Reference
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- BatchWriteItem — Amazon DynamoDB API Reference
- Service, account, and table quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
JavaScript용 AWS SDK v3.1095.0을 사용하여 DynamoDB Local 2.x에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.