중첩 수준이 지원되는 제한을 초과했습니다.

TL;DR — DynamoDB를 사용하면 문서 유형(맵 M 및 목록 L)을 최대 32레벨 깊이까지 중첩할 수 있습니다. 더 깊은 구조는 ValidationException로 거부됩니다. 데이터 모델을 평면화하거나, 깊은 분기를 별도의 항목으로 분할하거나, 너무 깊은 하위 트리를 단일 직렬화된 문자열로 저장하세요.

무엇을 의미하는가

ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits

# what the engine actually returns, reproduced against DynamoDB Local:
ValidationException: 1 validation error detected: Nesting Levels have exceeded supported limits: Attributes in the item have nested levels beyond supported limit

(이것이 검증 실패에 대한 AWS 문서의 문구입니다. 정확한 문구는 작업에 따라 약간 다를 수 있습니다.) 속성 값은 스칼라일 수도 있고 자체적으로 더 많은 값을 포함하는 map/list일 수도 있으며, DynamoDB는 중첩이 32개 수준으로 제한됩니다. 표현식에도 동일한 한도가 적용됩니다. 문서 경로의 최대 깊이는 32이므로 이보다 더 깊은 참조도 불가능합니다. 제한은 속성 수가 아닌 맵과 목록의 깊이를 계산합니다. 이를 초과하는 것은 HTTP 400 ValidationException이며 유효성 검사 시 포착되며 문서가 재구성될 때까지 재시도할 수 없습니다.

왜 발생하는가

  • 심층 재귀적 데이터 — 32레벨 이상의 지도 내에서 지도로 직렬화된 트리/그래프 구조(조직 차트, 설명 스레드, 중첩된 범주).
  • 일반 직렬 변환기 — 깊이 가드 없이 임의의 중첩 JSON을 DynamoDB 문서 유형으로 바로 마샬링하는 코드입니다.
  • 실수로 인한 자체 중첩 — 항목을 자체 내부에 반복적으로 래핑하는 버그입니다.
  • 중첩이 제한되지 않은 문서 데이터베이스에서 이전된 문서입니다.

어떻게 해결하는가

  1. 모델을 평면화 — 더 깊은 맵 대신 깊은 하위 구조를 최상위 속성 또는 복합 키 레이아웃으로 끌어올립니다.
  2. 여러 항목으로 분할 — 동일한 파티션 키 아래의 별도 항목으로 깊은 분기를 모델링합니다(단일 테이블 인접 패턴).
  3. 깊은 하위 트리 직렬화 — 쿼리할 필요가 없는 경우 너무 깊은 부분을 하나의 JSON 문자열 속성(DynamoDB에 불투명하므로 내부 깊이가 더 이상 계산되지 않음)으로 저장합니다.
  4. 마샬링 레이어에 깊이 가드를 추가하여 문서가 조용히 한계를 넘어 커지는 것을 방지하세요.
  5. 쓰기 전에 깊이를 측정하세요. 직렬 변환기의 문서 트리를 살펴보고 30개 이상의 레벨을 거부하세요. 업데이트 경로를 하나 더 확보할 여유 공간을 남겨두세요.

DynoTable에서 측정

DynoTable에서 중첩된 속성을 작성하기 전에 검사하십시오. ⌘K가 있는 항목을 열고 JSON 뷰어에서 맵/목록 필드를 확장하여 구조가 얼마나 깊이 실행되는지 확인하십시오. 스테이징(⌘S)을 사용하면 넣기/업데이트를 미리 보고 커밋하기 전에 깊이 오류를 잡을 수 있습니다.

깊이 검사와 함께 item size calculator를 사용하세요. 깊은 중첩으로 인해 항목이 400KB 한도에 가까워지는 경우가 많습니다. 로컬과 AWS에 대해 테스트할 때 ⌘P로 프로필을 전환합니다. 설정: Connect to AWS, Install.

출처

관련 오류

참고 자료

위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.

Console 없이 DynamoDB 작업하기

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

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