Number overflow. Attempting to store a number with magnitude larger than supported range

요약 — 숫자가 DynamoDB의 한도 밖입니다. N 타입은 대략 1E-1309.9999…E+125 사이의 크기로 최대 38자리 정밀도를 보유합니다. 그 범위를 넘는 값 — 또는 38개를 초과하는 유효 숫자를 가진 값 — 은 예외로 거부됩니다. 큰 ID와 고정밀도 값을 숫자가 아니라 문자열로 저장하세요.

무엇을 의미하는가

ValidationException: 1 validation error detected: Number overflow. Attempting to store a number with magnitude larger than supported range

DynamoDB의 Number 타입은 제한된 범위와 38개 유효 숫자를 가진 십진수입니다. 이 ValidationException(HTTP 400)은 보낸 값이 그 크기를 초과했거나 — 언어 런타임이 긴 숫자 문자열을 범위를 넘어선 부동 소수점 숫자로 바꿨다는 뜻입니다. 숫자로는 재시도할 수 없습니다; 값을 다르게 표현해야 합니다.

왜 발생하는가

  • 진짜 거대한 숫자 — 약 9.9E+125보다 큰 값(또는 크기가 1E-130보다 작은 양수 값).
  • 부동 소수점으로 파싱된 긴 숫자 문자열 — 예: Number() / parseFloat()를 거친 120자리 계정/참조 번호가 8.04e+126 같은 것이 되어 오버플로. 흔한 실제 트리거입니다.
  • 38개를 초과하는 유효 숫자 — DynamoDB의 Number 타입은 최대 38자리 정밀도를 보유하며, 그것을 초과하면 예외가 발생합니다.
  • 범위를 넘어 커진 계산된 값(곱, 거듭제곱).

어떻게 해결하는가

  1. 숫자가 아니라 문자열(S)로 저장하세요. 계산하지 않는 큰 식별자, 계정 번호, 또는 해시는 문자열이어야 합니다 — 이는 크기 한도와 38자리 정밀도 상한을 모두 우회합니다.
  2. ID 같은 문자열을 숫자로 파싱하지 마세요 — 100자리 참조를 처음부터 끝까지 문자열로 유지하세요. 그것을 부동 소수점으로 파싱하는 것이 오버플로를 만듭니다.
  3. 숫자 속성을 범위 안에 유지하세요 — DynamoDB Number는 최대 38자리 정밀도와 약 9.9E+125까지의 크기를 지원합니다. 값이 맞도록 설계하거나 분할/스케일하세요.
  4. 고정밀도 십진수의 경우 십진수 타입(Python Decimal, big-decimal 라이브러리)에서 변환한 문자열로 숫자를 전달해 DynamoDB에 도달하기 전에 정밀도가 손실되지 않도록 하세요.
  5. 선행 0 / 정확성을 보존하려면 문자열로 저장하세요 — Number 타입은 정규화하며 어차피 선행 0을 유지할 수 없습니다.

FAQ

DynamoDB의 숫자 한도는 무엇인가요? Number 타입은 최대 38자리 정밀도와 약 1E-130에서 9.9999999999999999999999999999999999999E+125(양수) 및 그 음수의 크기를 지원합니다. 그 범위 밖의 값은 "Number overflow"를 발생시킵니다.

DynamoDB에 매우 큰 숫자를 어떻게 저장하나요? 산술을 하지 않는다면 Number(N)가 아니라 문자열(S) 속성으로 저장하세요 — 이는 38자리 정밀도 상한과 크기 한도를 완전히 피합니다. 정렬 가능한 숫자 문자열의 경우 어휘 순서가 숫자 순서와 일치하도록 0으로 채우세요.

관련 오류

참고 자료

공식 AWS 문서(위 링크)를 기준으로 2026-07-13에 마지막으로 검증되었습니다.

Console 없이 DynamoDB 작업하기

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

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