"Too Many Items" — BatchGetItem 호출에 요청된 항목이 너무 많습니다.

TL;DR — BatchGetItem는 호출당 최대 100개의 항목(및 16MB 이하의 데이터)을 검색합니다. 100개가 넘는 키를 요청했기 때문에 DynamoDB가 요청을 거부했습니다. 키를 100개 이하의 청크로 분할하고 청크당 하나의 BatchGetItem을 발행합니다.

무엇을 의미하는가

ValidationException: 1 validation error detected: Value at 'RequestItems.<table-name>.member.Keys' failed to satisfy constraint: Member must have length less than or equal to 100

# on DynamoDB Local the same call is rejected with a shorter sentence:
ValidationException: Too many items requested for the BatchGetItem call

BatchGetItem은 하나 이상의 테이블에서 기본 키를 기준으로 항목을 가져오지만 단일 호출은 **100개 키** 및 **16MB** 반환 데이터로 제한됩니다. 100개가 넘는 요청을 하면 DynamoDB가 전체 호출을 거부합니다. 제한 내에서도 응답은 요청한 것보다 적은 수의 항목(상한 16MB)을 반환할 수 있으며 나머지는 UnprocessedKeys에 보고됩니다. 제한 초과 사례는 HTTP 400 ValidationException`이며 크기가 조정될 때까지 재시도할 수 없습니다.

왜 발생하는가

  • 한 번의 호출로 큰 키 세트 요청 — 수백 개의 키를 BatchGetItem에 직접 전달합니다.
  • 100보다 큰 청크 — 개수별로 일괄 처리하지만 25개 항목 BatchWrite 제한의 동위 항목을 잘못 사용하거나 101을 통과시키는 오프 바이 원(off-by-one)입니다.
  • 키가 아닌 테이블 계산 — 100개 제한은 요청에 있는 모든 테이블의 총 키입니다.
  • 페이징 UnprocessedKeys하지 않음 — 한 번의 호출이 모든 것을 반환한다고 가정하므로 청크가 발생하지 않습니다.

어떻게 해결하는가

  1. 청크 키를 100개 이하의 그룹으로 나누고 청크당 하나의 BatchGetItem를 보냅니다.
  2. UnprocessedKeys 처리 - 지수 백오프를 사용하여 반환된 키를 모두 재시도합니다. 이는 16MB 한도에 도달하면 유효한 100개 키 배치 내에서도 발생합니다.
  3. 응답을 16MB 미만으로 유지 — 대용량 항목의 경우 호출당 100개 미만으로 요청하세요.
  4. SDK가 어떤 역할을 하는지 알아보세요 — 하위 수준 클라이언트와 JavaScript 문서 클라이언트는 너무 큰 키 목록을 분할하지 않습니다. 스스로 100으로 청크해야 합니다. 일부 상위 수준 클라이언트(Java SDK의 Enhanced Client 및 v1 DynamoDBMapper)는 최소한 처리되지 않은 항목을 자동으로 재시도합니다.
  5. 청크화 전에 키 중복을 제거합니다. 한 배치의 중복 키는 별도로 실패합니다. 먼저 중복 제거한 다음 청크합니다.

재현하기

101개의 키를 요구하는 BatchGetItem(캡 너머 하나):

const Keys = Array.from({length: 101}, (_, i) => ({pk: {S: `K#${i}`}, sk: {S: 'META'}}));
await client.send(new BatchGetItemCommand({RequestItems: {orders: {Keys}}}));

실제 출력:

ValidationException: Too many items requested for the BatchGetItem call
HTTP 400

이는 요청 형태에 따라 빠르게 실패합니다. 부분 읽기가 발생하지 않으며 UnprocessedKeys에 아무 것도 도착하지 않습니다. 이는 100개 키 제한을 초과하는 것과 16MB 응답 제한을 초과하는 것의 차이이며 부분적인 결과를 반환합니다.

DynoTable에서

디버그하는 동안 DynoTable에서 한 번에 100개 미만의 키를 일괄 읽습니다. ⌘K로 테이블을 열고, 키 세트로 필터링하고, 코드에 BatchGetItem 청크를 연결하기 전에 항목이 있는지 확인하세요. item size calculator는 항목이 클 때 안전한 청크 크기를 선택하는 데 도움이 됩니다.

Query Builder을 사용하여 단일 키 읽기의 프로토타입을 먼저 만듭니다. ⌘P로 프로필을 전환합니다. 설정 → 프로필에서 연결 테스트를 수행합니다. Connect to AWSInstall를 참조하세요.

출처

관련 오류

참고 자료

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

JavaScript용 AWS SDK v3.1095.0을 사용하여 DynamoDB Local 2.x에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.

Console 없이 DynamoDB 작업하기

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

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