DynamoDB는 보조 인덱스를 지원하나요?
예. DynamoDB는 두 종류의 보조 인덱스를 지원합니다. 글로벌 보조 인덱스(GSI)는 자체 파티션/정렬 키와 용량을 가집니다(기본 한도 테이블당 20개, 최종적 일관성). 로컬 보조 인덱스(LSI)는 테이블의 파티션 키를 공유하되 정렬 키가 다르고, 강력한 일관성을 지원하며, 테이블 생성 시점에 정의해야 합니다.
글로벌 보조 인덱스(GSI)
- 테이블과 독립된 자체 파티션 키와 정렬 키.
- 자체 프로비저닝된 처리량(또는 온디맨드 용량).
- 최종적 일관성 읽기만 가능.
- 언제든 추가·제거 가능. 기본 한도는 테이블당 20개.
GSI는 테이블의 기본 키 밖에 있는 속성으로 항목을 조회하는 방법입니다.
로컬 보조 인덱스(LSI)
- 테이블의 파티션 키를 공유하며 정렬 키는 다릅니다.
- 테이블의 처리량을 공유합니다.
- 강력한 일관성 읽기를 지원합니다.
- 테이블 생성 시점에 만들어야 하며 나중에 추가할 수 없습니다.
측정할 수 있는 두 가지 차이
GSI 읽기는 강력한 일관성을 요청했을 때 조용히 등급을 낮추지 않습니다. 실패합니다:
ValidationException: Consistent reads are not supported on global secondary indexes
HTTP 400LSI를 상대로 ConsistentRead: true를 붙인 같은 쿼리는 성공하며, 같은 항목의 최종적 일관성 읽기가 0.5를 보고하는 자리에서 ConsumedCapacity 1.0을 보고합니다. 강력한 일관성은 LSI에서 읽기 단위 두 배를 대가로 사용할 수 있습니다.
두 번째 차이는 쓰기에 있으며, 청구서에 드러나는 쪽입니다. GSI 개수만 다른 세 테이블에 동일한 920바이트 항목 하나를 넣으면:
0 GSIs ConsumedCapacity 1 table 1
1 GSI ConsumedCapacity 2 table 1, gsi1 1
2 GSIs ConsumedCapacity 3 table 1, gsi1 1, gsi2 1변경된 속성을 프로젝션하는 GSI 하나하나가 여러분이 지불하는 또 하나의 쓰기입니다. AWS는 이 숫자들이 보여주는 규칙을 그대로 밝힙니다. 쓰기 비용은 "the sum of write capacity units consumed by writing to the base table and those consumed by updating the global secondary indexes"입니다. KEYS_ONLY 프로젝션이 그 두 번째 쓰기를 작게 유지하는 방법입니다.
둘 중 무엇을 고를까
새로운 액세스 패턴과 유연성이 필요하면 GSI로, 같은 파티션 안에서 대체 정렬에 강력한 일관성이 필요하면 LSI로 손을 뻗으세요.
더 알아보기
GSI vs LSI에서 둘을 비교하고 인덱스 프로젝션을 살펴보세요. 인덱스를 통해 쿼리하려면 DynoTable을 다운로드하세요.
참고 자료
- Using Global Secondary Indexes in DynamoDB — Amazon DynamoDB Developer Guide
- Local secondary indexes — Amazon DynamoDB Developer Guide
- Quotas in Amazon DynamoDB — Amazon DynamoDB Developer Guide
위에 링크된 공식 AWS 문서를 기준으로 2026-07-13에 마지막으로 검증했으며, 할당량은 2026-07-28에 다시 확인했습니다.
오류 문자열과 ConsumedCapacity 값은 2026-07-28에 @aws-sdk/client-dynamodb 3.1095.0을 통해 DynamoDB Local 3.3.0을 상대로 캡처한, 엔진 자신의 출력입니다.