DynamoDB는 ACID를 준수하나요?
네. DynamoDB는 TransactWriteItems와 TransactGetItems API를 통해 ACID 트랜잭션을 지원합니다. 이들은 최대 100개의 작업을 하나의 전부 아니면 전무인 작업으로 묶으며, 하나의 AWS 리전 안에서 원자성, 일관성, 격리성, 내구성을 보장합니다. 단일 항목 쓰기도 원자적이고 내구성이 있지만, 여러 항목에 걸친 ACID에는 트랜잭션 API가 필요합니다.
여기서 ACID가 뜻하는 것
DynamoDB 트랜잭션은 모든 작업을 적용하거나 하나도 적용하지 않고(원자성), 데이터를 유효한 상태로 남기며(일관성), 동시에 실행되는 다른 트랜잭션으로부터 격리되고, 성공을 반환한 시점에 내구성 있게 커밋됩니다. 이 보장은 트랜잭션 API가 호출된 AWS 리전 안에서 유효합니다.
트랜잭션 API
TransactWriteItems—Put,Update,Delete,ConditionCheck작업을 묶는 동기적이고 멱등한 쓰기.TransactGetItems— 여러 항목에 대한 원자적이고 일관된 읽기.
하나의 트랜잭션에서 같은 항목을 두 번 대상으로 삼을 수는 없습니다.
한도는 25가 아니라 100입니다
API 레퍼런스는 TransactWriteItems가 "groups up to 100 action requests"이며 "the aggregate size of the items in the transaction cannot exceed 4 MB"라고 말합니다(2026-07-28 확인). 이 숫자는 2022년 이전에 25였고, 낡은 숫자가 아직도 널리 반복되고 있으니 블로그 글이 아니라 API 레퍼런스로 확인할 값어치가 있습니다.
100개 작업 트랜잭션은 받아들여집니다. 101개짜리는 거부됩니다:
ValidationException: Member must have length less than or equal to 100그 메시지에 없는 것에 주목하세요. "transaction"이라는 단어입니다. 이는 일반적인 배열 길이 불평이므로, 트랜잭션 오류를 찾는 로그 검색에는 걸리지 않습니다. 배치 API는 그 점에서 덜 수줍습니다. 키 101개를 넣은 BatchGetItem은 Too many items requested for the BatchGetItem call을 반환하고, 26개를 넣은 BatchWriteItem은 자기 이름이 들어간 같은 문장을 반환합니다.
한 항목을 두 번 대상으로 삼는 것도 실패합니다. 각 작업이 따로였다면 성공했을 경우에도 그렇습니다:
ValidationException: Transaction request cannot include multiple operations on one item들어오는 이벤트를 도는 루프에서 키로 중복 제거를 하지 않고 작업 목록을 만드는 코드가 걸리는 지점이 바로 이것입니다.
트랜잭션은 과금도 두 배입니다. 1 KB 항목 100개를 트랜잭션으로 쓰면 쓰기 단위 200개를 소비하는데, 같은 항목을 개별로 쓸 때는 100개입니다. 즉 아무것도 실패하지 않아도 원자성에는 값이 붙습니다.
글로벌 테이블은 어떤가요?
트랜잭션은 그것이 호출된 리전에서만 ACID입니다. 기본값인 다중 리전 최종적 일관성(MREC) 모드의 글로벌 테이블에서는 트랜잭션 쓰기가 한 덩어리로 복제되지 않습니다. 변경이 전파되는 동안 다른 리전이 부분적으로 복제된 트랜잭션을 잠시 볼 수 있습니다. 다중 리전 강력한 일관성(MRSC)으로 구성된 글로벌 테이블은 트랜잭션 API를 아예 지원하지 않습니다.
더 알아보기
DynamoDB 트랜잭션에서 이를 안전하게 모델링하는 법을 익히고, 필요한 조건 표현식은 Expression Builder로 만드세요. 자신의 테이블에 시험해 보려면 DynoTable을 다운로드하세요.
참고 자료
- Amazon DynamoDB Transactions: How it works — Amazon DynamoDB Developer Guide
- TransactWriteItems — Amazon DynamoDB API Reference
- How DynamoDB global tables work — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했으며, 100개 작업과 4 MB 한도는 2026-07-28에 API 레퍼런스에서 다시 가져왔습니다.
위의 거부 사례는 2026-07-28에 @aws-sdk/client-dynamodb 3.1095.0으로 DynamoDB Local 3.3.0(amazon/dynamodb-local:latest)에 대해 재현했습니다. 인용된 모든 문자열은 엔진 출력을 그대로 옮긴 것입니다.