DynamoDB는 스키마리스인가요?

예. DynamoDB는 스키마리스입니다. 테이블을 만들 때 기본 키 외에 속성이나 데이터 타입을 정의하지 않습니다. 각 항목은 자신만의 속성 집합을 가질 수 있고, 항목마다 자유롭게 달라집니다. 그래서 스키마 마이그레이션 없이 데이터 모델을 바꿀 수 있습니다.

미리 정의하는 것

기본 키뿐입니다. 파티션 키(필수)와 선택적 정렬 키, 그리고 그 타입입니다. 나머지는 모두 임의입니다. 열을 선언하지 않습니다.

항목마다 달라지는 것

같은 테이블의 어떤 두 항목이든 완전히 다른 속성을 가질 수 있습니다. 한 항목에는 emailstatus가 있고, 다른 항목에는 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에 선언한 타입과 일치해야 합니다. 그 너머는 쓴 그대로 받아들여집니다.

오타도 통과합니다. 쓰기 시점에 stausstatus여야 했다는 사실을 알려주는 것은 없습니다.

왜 도움이 되나

  • 마이그레이션 없음 — 속성을 언제든 추가하거나 제거할 수 있습니다.
  • 혼합 엔터티 — 여러 엔터티 타입이 한 테이블을 공유할 수 있습니다(싱글 테이블 설계).
  • 진화 가능 — 요구가 바뀌면 모델도 바뀝니다.

당신이 의존하는 형태를 강제하는 것은 데이터베이스가 아니라 애플리케이션입니다.

스키마리스가 풀어 주지 않는 것

스키마리스는 키가 아닌 속성에만 적용됩니다. 나머지 DynamoDB 한도는 그대로입니다.

  • 항목당 400 KB — 속성 이름과 값이 모두 상한에 포함됩니다.
  • 값 안의 맵과 리스트에 대해 중첩 32단계.
  • 단일 속성 이름 최대 길이 65,535바이트.
  • BatchWriteItem 호출당 최대 25개 항목.

한 항목에 status 문자열을 두고 다음 항목에서는 빼도 되지만, 어느 쪽에도 500 KB blob을 넣을 수는 없습니다. 쓰기 전에 페이로드를 재려면 item size calculator를 쓰고, 한 테이블에 엔터티 타입을 섞을 때는 싱글 테이블 설계를 읽으세요.

DynoTable에서: 아무 테이블에서든 설정을 열고 인덱싱하세요. 추론된 스키마는 샘플링한 항목으로 만들어지고 정직하게 라벨됩니다 — 선언한 내용이 아니라 쓴 내용을 보여 줍니다. 로컬 인덱스가 어떻게 샘플링하고 갱신하는지는 Table overview and indexing를 보세요.

더 알아보기

혼합 항목에는 싱글 테이블 설계type 속성 패턴을 참고하세요. 실제 항목 형태를 나란히 보려면 DynoTable을 다운로드하세요.

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 확인했습니다.

Node v24.18.0에서 @aws-sdk/client-dynamodb 3.1095.0으로 DynamoDB Local 3.3.0에 대해 2026-07-28에 재현했습니다. 두 ValidationException 메시지는 모두 엔진 출력 그대로입니다.

Console 없이 DynamoDB 작업하기

DynamoDB로는 실행할 수 없는 진짜 SQL(JOINs, GROUP BY, 집계)을 실행하는 빠른 DynamoDB 데스크톱 클라이언트. 시각적 편집과 여러분 자신의 Bedrock 키로 동작하는 AI 에이전트를 제공합니다.

30일 무료 체험, 신용카드 불필요 — 이후 기간 제한 없는 무료 요금제.