글로벌 보조 인덱스에서는 일관된 읽기가 지원되지 않습니다.

TL;DR — 글로벌 보조 인덱스를 대상으로 하는 Query 또는 ScanConsistentRead: true을 설정합니다. GSI는 기본 테이블에서 비동기식으로 복제하며 최종적으로 일관된 읽기만 제공합니다. 플래그는 기본 설정이 아닌 하드 오류입니다. 플래그를 삭제하거나, 쓰기 후 읽기 일관성이 정말로 필요한 경우 기본 테이블을 읽습니다(또는 키를 LSI로 설계).

무엇을 의미하는가

ValidationException: Consistent reads are not supported on global secondary indexes

GSI는 물리적으로 자체 파티션과 용량을 갖춘 자체 인덱스 구조입니다. DynamoDB는 기본 테이블 쓰기를 비동기식으로 전파합니다. 방금 작성한 항목이 아직 인덱스에 도착하지 않았을 수 있으므로 DynamoDB는 해당 항목에 대한 강력한 일관된 읽기를 승인할 수 없습니다. 따라서 GSI IndexName과 결합된 ConsistentRead: true는 완전히 거부됩니다. AWS 설명서는 명시적입니다. ConsistentRead를 true로 설정하여 GSI를 쿼리하면 ValidationException를 받게 됩니다.

로컬 보조 인덱스는 다릅니다. LSI는 기본 테이블과 파티션을 공유하므로 ConsistentRead: true가 지원됩니다.

왜 발생하는가

  • 플래그는 전역적으로 설정되었습니다 — 공유 쿼리 도우미 또는 클라이언트 래퍼는 모든 읽기에 대해 기본값이 ConsistentRead: true이고 하나의 호출 경로는 GSI를 가리키는 IndexName을 추가합니다.
  • LSI가 GSI가 되었습니다 — 로컬 인덱스(플래그가 합법적인 경우)용으로 작성된 코드가 글로벌 인덱스를 가리켰습니다.
  • 복사하여 붙여넣은 기본 테이블 쿼리 — 테이블에서 강력한 일관성을 합법적으로 사용한 쿼리에 IndexName을 추가하여 재사용했습니다.

어떻게 해결하는가

  1. 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'}}
      })
    );
  2. 쓰기 후 읽기가 필요합니까? ConsistentRead: true기본 테이블을 쿼리합니다. 조회 중인 키가 테이블 자체의 파티션 키일 때마다 가능합니다.

  3. 동일한 파티션 키, 다른 정렬? 일관된 읽기를 지원하는 LSI(테이블 생성 시 생성됨)로 모델링합니다.

  4. 또는 애플리케이션의 지연을 흡수 — GSI 전파는 일반적으로 빠릅니다. UI 흐름의 경우 인덱스를 다시 읽는 것보다 이미 가지고 있는 방금 작성된 데이터를 반환합니다.

  5. 공유 쿼리 도우미를 감사합니다. 모든 읽기의 기본값 ConsistentRead: true는 호출 경로가 GSI IndexName를 추가하는 순간 중단됩니다.

DynoTable에서 확인

DynoTable은 어떤 인덱스가 GSI인지 LSI인지 알고 있습니다. GSI 쿼리는 절대 ConsistentRead: true을 보내지 않습니다. ⌘K이 있는 테이블을 열고 드롭다운에서 인덱스를 선택한 다음 플래그 없이 쿼리를 실행합니다.

쓰기 후 읽기가 필요한 경우 대신 기본 테이블을 쿼리하십시오. Query Builder는 대상별로 올바른 매개변수를 생성합니다. ⌘P로 프로필을 전환합니다. Connect to AWSInstall를 참조하세요.

출처

관련 오류

참고 자료

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

Console 없이 DynamoDB 작업하기

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

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