글로벌 보조 인덱스에서는 일관된 읽기가 지원되지 않습니다.
TL;DR — 글로벌 보조 인덱스를 대상으로 하는 Query 또는 Scan에 ConsistentRead: true을 설정합니다. GSI는 기본 테이블에서 비동기식으로 복제하며 최종적으로 일관된 읽기만 제공합니다. 플래그는 기본 설정이 아닌 하드 오류입니다. 플래그를 삭제하거나, 쓰기 후 읽기 일관성이 정말로 필요한 경우 기본 테이블을 읽습니다(또는 키를 LSI로 설계).
무엇을 의미하는가
ValidationException: Consistent reads are not supported on global secondary indexesGSI는 물리적으로 자체 파티션과 용량을 갖춘 자체 인덱스 구조입니다. DynamoDB는 기본 테이블 쓰기를 비동기식으로 전파합니다. 방금 작성한 항목이 아직 인덱스에 도착하지 않았을 수 있으므로 DynamoDB는 해당 항목에 대한 강력한 일관된 읽기를 승인할 수 없습니다. 따라서 GSI IndexName과 결합된 ConsistentRead: true는 완전히 거부됩니다. AWS 설명서는 명시적입니다. ConsistentRead를 true로 설정하여 GSI를 쿼리하면 ValidationException를 받게 됩니다.
로컬 보조 인덱스는 다릅니다. LSI는 기본 테이블과 파티션을 공유하므로 ConsistentRead: true가 지원됩니다.
왜 발생하는가
- 플래그는 전역적으로 설정되었습니다 — 공유 쿼리 도우미 또는 클라이언트 래퍼는 모든 읽기에 대해 기본값이
ConsistentRead: true이고 하나의 호출 경로는 GSI를 가리키는IndexName을 추가합니다. - LSI가 GSI가 되었습니다 — 로컬 인덱스(플래그가 합법적인 경우)용으로 작성된 코드가 글로벌 인덱스를 가리켰습니다.
- 복사하여 붙여넣은 기본 테이블 쿼리 — 테이블에서 강력한 일관성을 합법적으로 사용한 쿼리에
IndexName을 추가하여 재사용했습니다.
어떻게 해결하는가
GSI 읽기에서
ConsistentRead을 제거(또는false로 설정 - 기본값):await client.send( new QueryCommand({ TableName: 'Orders', IndexName: 'status-index', KeyConditionExpression: '#s = :open', // ConsistentRead: true ← delete this line for a GSI ExpressionAttributeNames: {'#s': 'status'}, ExpressionAttributeValues: {':open': {S: 'OPEN'}} }) );쓰기 후 읽기가 필요합니까?
ConsistentRead: true로 기본 테이블을 쿼리합니다. 조회 중인 키가 테이블 자체의 파티션 키일 때마다 가능합니다.동일한 파티션 키, 다른 정렬? 일관된 읽기를 지원하는 LSI(테이블 생성 시 생성됨)로 모델링합니다.
또는 애플리케이션의 지연을 흡수 — GSI 전파는 일반적으로 빠릅니다. UI 흐름의 경우 인덱스를 다시 읽는 것보다 이미 가지고 있는 방금 작성된 데이터를 반환합니다.
공유 쿼리 도우미를 감사합니다. 모든 읽기의 기본값
ConsistentRead: true는 호출 경로가 GSIIndexName를 추가하는 순간 중단됩니다.
DynoTable에서 확인
DynoTable은 어떤 인덱스가 GSI인지 LSI인지 알고 있습니다. GSI 쿼리는 절대 ConsistentRead: true을 보내지 않습니다. ⌘K이 있는 테이블을 열고 드롭다운에서 인덱스를 선택한 다음 플래그 없이 쿼리를 실행합니다.
쓰기 후 읽기가 필요한 경우 대신 기본 테이블을 쿼리하십시오. Query Builder는 대상별로 올바른 매개변수를 생성합니다. ⌘P로 프로필을 전환합니다. Connect to AWS 및 Install를 참조하세요.
출처
- Query — Amazon DynamoDB API Reference (2026-07-13 검증)
- Using Global Secondary Indexes in DynamoDB (2026-07-13 검증)
관련 오류
- GSI throttles the base table — GSI의 쓰기측 커플링.
- 테이블에 지정된 인덱스가 없음
- 생성 중인 GSI는 수정할 수 없음
- 코드 예: Query a GSI in Node.js — 최종적으로 일관된 GSI 쿼리가 올바르게 수행되었습니다.
- 학습: Why GSIs are eventually consistent · GSI vs LSI · Consistency · Indexes overview
참고 자료
- Query — Amazon DynamoDB API Reference
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Constraints in Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026년 7월 13일에 마지막으로 확인되었습니다.