"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 callBatchGetItem은 하나 이상의 테이블에서 기본 키를 기준으로 항목을 가져오지만 단일 호출은 **100개 키** 및 **16MB** 반환 데이터로 제한됩니다. 100개가 넘는 요청을 하면 DynamoDB가 전체 호출을 거부합니다. 제한 내에서도 응답은 요청한 것보다 적은 수의 항목(상한 16MB)을 반환할 수 있으며 나머지는 UnprocessedKeys에 보고됩니다. 제한 초과 사례는 HTTP 400 ValidationException`이며 크기가 조정될 때까지 재시도할 수 없습니다.
왜 발생하는가
- 한 번의 호출로 큰 키 세트 요청 — 수백 개의 키를
BatchGetItem에 직접 전달합니다. - 100보다 큰 청크 — 개수별로 일괄 처리하지만 25개 항목 BatchWrite 제한의 동위 항목을 잘못 사용하거나 101을 통과시키는 오프 바이 원(off-by-one)입니다.
- 키가 아닌 테이블 계산 — 100개 제한은 요청에 있는 모든 테이블의 총 키입니다.
- 페이징
UnprocessedKeys하지 않음 — 한 번의 호출이 모든 것을 반환한다고 가정하므로 청크가 발생하지 않습니다.
어떻게 해결하는가
- 청크 키를 100개 이하의 그룹으로 나누고 청크당 하나의
BatchGetItem를 보냅니다. UnprocessedKeys처리 - 지수 백오프를 사용하여 반환된 키를 모두 재시도합니다. 이는 16MB 한도에 도달하면 유효한 100개 키 배치 내에서도 발생합니다.- 응답을 16MB 미만으로 유지 — 대용량 항목의 경우 호출당 100개 미만으로 요청하세요.
- SDK가 어떤 역할을 하는지 알아보세요 — 하위 수준 클라이언트와 JavaScript 문서 클라이언트는 너무 큰 키 목록을 분할하지 않습니다. 스스로 100으로 청크해야 합니다. 일부 상위 수준 클라이언트(Java SDK의 Enhanced Client 및 v1 DynamoDBMapper)는 최소한 처리되지 않은 항목을 자동으로 재시도합니다.
- 청크화 전에 키 중복을 제거합니다. 한 배치의 중복 키는 별도로 실패합니다. 먼저 중복 제거한 다음 청크합니다.
재현하기
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 AWS 및 Install를 참조하세요.
출처
- BatchGetItem — Amazon DynamoDB API Reference (2026-07-13 인증)
- Quotas in Amazon DynamoDB (2026-07-13 인증)
관련 오류
- Too many items requested for the BatchWriteItem call — 쓰기 측 제한(25개 항목).
- Provided list of item keys contains duplicates — 하나의 BatchGetItem에 동일한 키가 두 번 있습니다.
- ProvisionedThroughputExceededException — UnprocessedKeys로 표시되는 제한입니다.
- 코드 예: BatchGetItem in Node.js · in Python (boto3) — UnprocessedKeys 재시도를 통한 청크 읽기.
- 학습: DynamoDB batch operations
참고 자료
- BatchGetItem — Amazon DynamoDB API Reference
- BatchWriteItem — Amazon DynamoDB API Reference
- Error handling with DynamoDB — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.
JavaScript용 AWS SDK v3.1095.0을 사용하여 DynamoDB Local 2.x에 대해 2026년 7월 26일 재현 — 위 출력은 그대로입니다.