DynamoDB는 스키마리스인가요?
예. DynamoDB는 스키마리스입니다. 테이블을 만들 때 기본 키 외에 속성이나 데이터 타입을 정의하지 않습니다. 각 항목은 자신만의 속성 집합을 가질 수 있고, 항목마다 자유롭게 달라집니다. 그래서 스키마 마이그레이션 없이 데이터 모델을 바꿀 수 있습니다.
미리 정의하는 것
기본 키뿐입니다. 파티션 키(필수)와 선택적 정렬 키, 그리고 그 타입입니다. 나머지는 모두 임의입니다. 열을 선언하지 않습니다.
항목마다 달라지는 것
같은 테이블의 어떤 두 항목이든 완전히 다른 속성을 가질 수 있습니다. 한 항목에는 email과 status가 있고, 다른 항목에는 orderTotal과 중첩된 address 맵이 있을 수 있습니다. DynamoDB는 당신이 쓴 그대로 저장합니다.
스키마리스가 끝나는 지점
스키마리스에는 정확한 경계가 있습니다. 기본 키는 모든 쓰기에서 검증되고, 그 외에는 검증이 없습니다. 공통 속성이 하나도 없는 두 항목도 불만 없이 같은 테이블에 들어갑니다.
await client.send(
new PutItemCommand({
TableName: 'people',
Item: {pk: {S: 'USER#1'}, email: {S: 'a@b.c'}, status: {S: 'active'}}
})
);
await client.send(
new PutItemCommand({
TableName: 'people',
Item: {
pk: {S: 'ORDER#1'},
orderTotal: {N: '42.5'},
address: {M: {city: {S: 'Madrid'}}},
tags: {SS: ['a', 'b']}
}
})
);둘 다 성공합니다. 이제 같은 파티션 키를 문자열이 아니라 숫자로 써 보세요.
ValidationException: One or more parameter values were invalid: Type mismatch for key
HTTP 400그리고 pk를 아예 빼면:
ValidationException: One of the required keys was not given a value
HTTP 400이 두 거부가 스키마의 전부입니다. 키 속성은 있어야 하고, AttributeDefinitions에 선언한 타입과 일치해야 합니다. 그 너머는 쓴 그대로 받아들여집니다.
오타도 통과합니다. 쓰기 시점에 staus가 status여야 했다는 사실을 알려주는 것은 없습니다.
왜 도움이 되나
- 마이그레이션 없음 — 속성을 언제든 추가하거나 제거할 수 있습니다.
- 혼합 엔터티 — 여러 엔터티 타입이 한 테이블을 공유할 수 있습니다(싱글 테이블 설계).
- 진화 가능 — 요구가 바뀌면 모델도 바뀝니다.
당신이 의존하는 형태를 강제하는 것은 데이터베이스가 아니라 애플리케이션입니다.
스키마리스가 풀어 주지 않는 것
스키마리스는 키가 아닌 속성에만 적용됩니다. 나머지 DynamoDB 한도는 그대로입니다.
- 항목당 400 KB — 속성 이름과 값이 모두 상한에 포함됩니다.
- 값 안의 맵과 리스트에 대해 중첩 32단계.
- 단일 속성 이름 최대 길이 65,535바이트.
BatchWriteItem호출당 최대 25개 항목.
한 항목에 status 문자열을 두고 다음 항목에서는 빼도 되지만, 어느 쪽에도 500 KB blob을 넣을 수는 없습니다. 쓰기 전에 페이로드를 재려면 item size calculator를 쓰고, 한 테이블에 엔터티 타입을 섞을 때는 싱글 테이블 설계를 읽으세요.
DynoTable에서: 아무 테이블에서든 설정을 열고 인덱싱하세요. 추론된 스키마는 샘플링한 항목으로 만들어지고 정직하게 라벨됩니다 — 선언한 내용이 아니라 쓴 내용을 보여 줍니다. 로컬 인덱스가 어떻게 샘플링하고 갱신하는지는 Table overview and indexing를 보세요.
더 알아보기
혼합 항목에는 싱글 테이블 설계와 type 속성 패턴을 참고하세요. 실제 항목 형태를 나란히 보려면 DynoTable을 다운로드하세요.
참고 자료
- Core components of Amazon DynamoDB — Amazon DynamoDB Developer Guide
- What is Amazon DynamoDB? — Amazon DynamoDB Developer Guide
- Data modeling for DynamoDB tables — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 확인했습니다.
Node v24.18.0에서 @aws-sdk/client-dynamodb 3.1095.0으로 DynamoDB Local 3.3.0에 대해 2026-07-28에 재현했습니다. 두 ValidationException 메시지는 모두 엔진 출력 그대로입니다.