DynamoDB에 null 값이 있을 수 있나요?
예. DynamoDB에는 알 수 없거나 정의되지 않은 상태의 속성을 나타내는 전용 NULL 유형이 있습니다. 또한 키가 아닌 속성에 대해 빈 문자열 및 빈 이진 값과 빈 목록 및 맵을 허용합니다. ValidationException로 거부되는 빈 집합(문자열, 숫자 또는 이진수)을 허용하지 않습니다.
NULL 유형
NULL은 {"NULL": true}로 작성된 실제 속성 유형입니다. 필드가 존재하지만 값이 없음을 기록하고 싶을 때 사용하세요. 단순히 속성을 생략하는 것과는 다릅니다.
비어 있는 것이 허용되는 것
- 빈 문자열/빈 바이너리 — 키가 아닌 속성, 목록 및 맵 내부에서 허용됩니다.
- 빈 목록/빈 맵 — 허용됩니다.
허용되지 않는 것
- 빈 세트(SS, NS, BS) —
ValidationException로 거부됩니다. - 키 속성의 빈 문자열 또는 바이너리 — 키 값의 길이는 0보다 커야 합니다.
거절의 모습
하나의 PutItem는 동일한 항목에서 {"NULL": true}, {"S": ""}, {"L": []}, {"M": {}} 및 0바이트 {"B": ""}를 허용하고 GetItem는 5개를 모두 변경하지 않고 반환했습니다. 이 세 가지 쓰기는 살아남지 못했습니다. 메시지는 엔진 고유의 것으로, 맞게 포장되어 있고 기타 수정되지 않았으며 오타도 포함되어 있습니다.
tags: {"SS": []}
ValidationException: One or more parameter values were invalid:
An string set may not be empty
pk: {"S": ""}
ValidationException: One or more parameter values are not valid.
The AttributeValue for a key attribute cannot contain an empty
string value. Key: pk
gsiKey: {"NULL": true}
ValidationException: Invalid attribute value type세 번째는 함정입니다. sparse index에서 항목을 유지하기 위해 인덱스 키를 무효화할 수 없습니다. 전체 쓰기가 거부되므로 항목을 인덱싱되지 않은 상태로 두는 유일한 방법은 속성을 생략하는 것입니다.
NULL은 현재로 간주됩니다.
모든 필터는 NULL 속성을 그대로 처리합니다. attribute_exists(explicitNull)가 있는 위의 항목을 스캔하면 반환되었고, :n가 {"NULL": true}로 설정된 explicitNull = :n과 attribute_type(explicitNull, "NULL")도 반환되었습니다. attribute_not_exists만이 "명시적으로 null"과 "저장되지 않음"을 구분합니다.
모델링 팁
속성을 완전히 생략하는 것이 NULL를 저장하는 것보다 더 깔끔한 경우가 많으며 희소 인덱스를 활성화합니다. "부재"와 "명시적으로 null"이 모델에서 서로 다른 의미인지 여부에 따라 선택하세요.
NULL 주변에 필터 만들기
필터 표현식은 NULL을 존재하는 것으로 취급합니다. 명시적인 null이 있는 항목을 찾으려면 attribute_type(attr, 'NULL')를 사용하거나 {"NULL": true}를 사용하여 :n와 비교하세요. 이를 제외하려면 모델에 따라 attribute_not_exists를 사용하거나 attribute_type(attr, 'S')와 같은 구체적인 유형을 테스트하세요.
Expression Builder는 attribute_exists 및 attribute_not_exists 필터에 대한 이름/값 맵을 생성하므로 비용을 지불하기 전에 스캔의 상태를 확인할 수 있습니다.
DynoTable에서: 항목 편집기는 세 가지 JSON 모드 모두에서 NULL 속성을 작성합니다. 행을 열고, 필드를 null로 설정하고, 커밋하기 전에 검토를 위해 변경 사항을 준비합니다. Editing items를 참조하세요.
더 알아보기
DynamoDB data types 및 sparse indexes를 읽어보세요. Download DynoTable - NULL을 포함한 속성을 직접 편집합니다.
참고 자료
- Supported data types and naming rules in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
- PutItem — Amazon DynamoDB API Reference
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
2026년 7월 28일 DynamoDB Local 3.3.0을 통해 @aws-sdk/client-dynamodb 3.1095.0을 통해 재현 — 위의 오류 문자열 및 필터 결과는 축어적인 엔진 출력입니다. 라이브 서비스는 로컬 엔진과 다르게 ValidationException를 표현할 수 있습니다.