제공된 시작 키가 잘못되었습니다.
TL;DR — 귀하의 ExclusiveStartKey은 페이지를 매기는 대상의 주요 스키마와 일치하지 않습니다. 여기에는 LastEvaluatedKey에서 반환된 DynamoDB 키 속성(전체 기본 키와 GSI/LSI를 쿼리할 때의 인덱스 키)이 동일한 이름과 유형으로 정확하게 포함되어야 합니다. LastEvaluatedKey를 그대로 뒤로 전달합니다. 손으로 조립하면 이렇게 깨집니다.
무엇을 의미하는가
ValidationException: The provided starting key is invalidValidationException: Exclusive Start Key must have same size as table's key schemaExclusiveStartKey는 Query/Scan이 어디서부터 재개할지 DynamoDB에 알려줍니다. DynamoDB는 이 값을 테이블의 키 스키마와 대조해 검증하며, 인덱스 쿼리의 경우에는 LastEvaluatedKey가 담고 있는 인덱스 키와 테이블 키의 조합과 대조합니다. 속성 누락, 속성 추가, 잘못된 이름, 잘못된 타입은 모두 데이터를 읽기 전에 실패합니다.
왜 발생하는가
- 파티션 키만으로 키를 직접 조립 — 복합 키 테이블은 시작 키에 파티션 키와 정렬 키가 모두 필요합니다.
- 테이블 키만으로 인덱스를 페이지네이션 — GSI/LSI 쿼리의
LastEvaluatedKey에는 인덱스 키 속성과 테이블 기본 키가 함께 들어 있으며, 그 전부를 되돌려 보내야 합니다. - 타입 또는 이름 변형 — 키가 직렬화(JSON, URL 파라미터, 캐시)되었다가
LastEvaluatedKey에서는 숫자였던 값이"42"로 돌아오거나 필드 이름이 바뀐 채로 돌아온 경우입니다. - 쿼리 간 키 재사용 — 한 테이블/인덱스의
LastEvaluatedKey를 다른 쿼리에 넘기거나, 키 스키마 가정이 바뀐 뒤 같은 쿼리에 넘긴 경우입니다. - 래퍼가 기본값을 주입 — 키에 속한다고 판단한 속성을 채워 넣는 ODM이 시작 키를 스키마 크기 이상으로 부풀릴 수 있습니다.
어떻게 해결하는가
LastEvaluatedKey를 그대로 왕복시키세요:let ExclusiveStartKey; do { const page = await docClient.send( new QueryCommand({ TableName, KeyConditionExpression, ExpressionAttributeValues, ExclusiveStartKey }) ); items.push(...(page.Items ?? [])); ExclusiveStartKey = page.LastEvaluatedKey; // verbatim — no rebuild } while (ExclusiveStartKey);요청 경계를 넘어간다면 무손실로 직렬화하세요 — 페이지네이션 커서가 브라우저를 오갈 때는 항목 필드에서 재구성하지 말고
LastEvaluatedKey객체 전체를 인코딩(예: JSON의 base64)하고, 숫자 타입은 숫자로 유지하세요.인덱스 페이지네이션에는 모든 키 속성을 포함하세요 — 인덱스 파티션/정렬 키 와 테이블 파티션/정렬 키를 반환된 그대로 넣어야 합니다.
시작 지점을 지어내지 마세요 — DynamoDB 페이지네이션에는 오프셋이 없습니다. "X 근처에서 시작"이 필요하다면 직접 만든
ExclusiveStartKey가 아니라KeyConditionExpression(sk > :x)으로 표현하세요.실패 시 원본
LastEvaluatedKey를 로깅하세요. 다음 요청이 보내는 값과 바이트 단위로 비교하세요 — 직렬화 계층이 이름을 바꾸거나 숫자 타입을 문자열로 만드는 경우가 많습니다.
DynoTable에서 쿼리
DynoTable에서 Query를 페이지 단위로 넘기며 페이지 사이의 원본 LastEvaluatedKey 커서를 확인하세요 — ⌘K로 테이블을 열고 Query를 실행한 뒤, 페이지네이션 토큰을 그대로 SDK 루프에 복사하면 됩니다. 쿼리 패널은 DynamoDB가 어떤 키 속성을 기대하는지 정확히 보여줍니다.
Query Builder로 올바른 ExclusiveStartKey 처리가 포함된 페이지네이션 Query 프로그램을 생성하세요. ⌘P로 프로필을 전환하고, 설정 → 프로필에서 Test Connection을 실행하세요. AWS 연결과 설치를 참고하세요.
출처
- Paginating table query results in DynamoDB (2026-07-13 확인)
- Query — Amazon DynamoDB API Reference (2026-07-13 확인)
관련 오류
- 제공된 키 요소가 스키마와 일치하지 않습니다 —
GetItem/쓰기 키에서 발생하는 동일한 스키마 불일치입니다. - 지원되지 않는 쿼리 키 조건
- 코드 예제: Node.js에서 모든 항목 가져오기 · Python(boto3)에서 — LastEvaluatedKey 페이지네이션 루프를 올바르게 구현한 예입니다.
- 학습: DynamoDB 페이지네이션
참고 자료
- Paginating table query results in DynamoDB — Amazon DynamoDB Developer Guide
- Query — Amazon DynamoDB API Reference
- Scan — Amazon DynamoDB API Reference
2026-07-13에 위에 링크된 공식 AWS 문서를 기준으로 최종 확인했습니다.