입문2분 분량

DynamoDB 데이터 타입

모든 DynamoDB 속성은 와이어 형식에서 한두 글자의 타입 코드로 태그됩니다. 이 집합을 아는 것이 중요한 이유는, 타입이 값을 저장하는 방식과 항목 크기에 기여하는 방식을 모두 좌우하기 때문입니다.

한눈에 보기

코드타입범주JSON / JS 대응예시 (DynamoDB-JSON)
S문자열스칼라string{"S": "Ada"}
N숫자스칼라number{"N": "37"}
B바이너리스칼라Uint8Array / base64{"B": "ZGF0YQ=="}
BOOL불리언스칼라boolean{"BOOL": true}
NULLNull스칼라null{"NULL": true}
M문서object{"M": {"k": {"S": "v"}}}
L리스트문서array{"L": [{"N": "1"}]}
SS문자열 세트세트— (JSON 타입 없음){"SS": ["a", "b"]}
NS숫자 세트세트{"NS": ["1", "2"]}
BS바이너리 세트세트{"BS": ["ZA=="]}

스칼라

  • S — 문자열(UTF-8, 문자 수가 아니라 바이트 길이로 크기가 계산됨).
  • N — 숫자, 정밀도를 위해 문자열로 전송됨, 최대 38자리.
  • B — 바이너리, base64로 인코딩되어 전송됨.
  • BOOLtrue / false.
  • NULL — 명시적 null 마커.

문서

  • M — 맵(객체). 중첩된 속성은 각각 고유한 타입 태그를 유지합니다.
  • L — 리스트. 요소는 타입이 섞일 수 있습니다.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}

세트

  • SS — 문자열 세트, NS — 숫자 세트, BS — 바이너리 세트.

세트는 순서가 없고, 동질적이며, 비어 있을 수 없습니다. 결정적으로 일반 JSON에는 세트 타입이 없습니다 — 배열은 SS/NS가 아니라 항상 리스트(L)로 왕복 변환됩니다. 이는 버그가 아니라 실제 변환 제약입니다. DynamoDB-JSON 변환기 안내를 참조하세요.

어떤 타입이 키가 될 수 있나요?

파티션 키와 정렬 키는 — 테이블과 모든 인덱스에서 — 스칼라여야 하며, S, N, B만 가능합니다. 불리언, 세트, 맵, 리스트로는 키를 만들 수 없습니다. 여러 값을 하나의 S로 이어 붙여 "복합" 키를 모델링하세요(예: ORDER#2026#42).

알아둘 만한 한도

  • 항목은 400 KB가 최대입니다 — 중첩된 것을 포함해 모든 속성 이름과 값을 합한 값입니다.
  • 숫자는 최대 38자리 정밀도를 가집니다(양수 또는 음수).
  • 맵과 리스트는 최대 32단계 깊이로 중첩됩니다.
  • 세트는 비어 있지 않고 동질적입니다 — 빈 세트도, SN을 섞는 것도 안 됩니다.

타입이 비용에 영향을 주는 이유

항목 크기는 속성 이름 바이트와 값 바이트의 합이며, 각 타입은 크기가 다르게 계산됩니다 — 숫자는 압축되고, 불리언과 null은 1바이트, 맵과 리스트는 요소당 오버헤드를 더합니다. 그 크기는 읽기/쓰기 용량 단위로 올림됩니다. 실제 항목은 항목 크기 계산기로 측정하세요.

DynoTable을 사용해 항목을 편집하는 동안 모든 속성의 타입과 실시간 바이트 수를 확인하고, 각 타입 태그를 대신 읽어 주는 SQL 워크벤치에서 타입이 지정된 속성 전반에 걸쳐 필터링하거나 집계해 보세요.

업데이트됨