Index
1 DynamoDB Indexes
- Amazon DynamoDB는 강력한 NoSQL 데이터베이스 서비스입니다.
- 데이터 액세스 패턴을 최적화하기 위해 DynamoDB는 두 가지 유형의 인덱스를 제공합니다:
- Local Secondary Index (LSI)
- Global Secondary Index (GSI)
- 이러한 인덱스들은 쿼리 성능을 향상시키고 데이터 액세스의 유연성을 제공합니다.
2 Local Secondary Index (LSI)
- LSI(Local Secondary Index)는 DynamoDB 테이블의 쿼리 기능을 확장하는 강력한 도구입니다.
- 기본 개념을 이해하기 위해, 먼저 DynamoDB 테이블의 기본 구조를 살펴보겠습니다.
2.1 DynamoDB 테이블의 기본 구조
- DynamoDB 테이블은 기본적으로 두 가지 키를 가집니다
- 파티션 키(Partition Key): 데이터를 여러 파티션에 분산시키는 역할
- 정렬 키(Sort Key): 각 파티션 내에서 데이터를 정렬하는 역할
2.2 LSI의 역할
- LSI는 기존 테이블 구조를 유지하면서 추가적인 정렬 옵션을 제공합니다.
- 주요 특징
- 파티션 키는 기본 테이블과 동일하게 유지
- 정렬 키를 다른 속성으로 대체
2.3 LSI 사용 예시
- 다음 예시를 통해 LSI의 사용법을 이해해 봅시다:
온라인 쇼핑몰 주문 테이블
- 기본 테이블 구조
- 파티션 키: CustomerId
- 정렬 키: OrderId
- 기본 테이블 쿼리
- "고객 ID가 12345인 모든 주문을 OrderId 순으로 조회"
- LSI 추가 (정렬 키: OrderDate)
- 파티션 키: CustomerId (기본 테이블과 동일)
- 정렬 키: OrderDate
- LSI 사용 쿼리:
- "고객 ID가 12345인 모든 주문을 주문 날짜 순으로 조회"
2.4 LSI의 이점
- 다양한 쿼리 패턴 지원:
- 동일한 데이터에 대해 여러 가지 방식으로 정렬된 뷰를 제공
- 쿼리 성능 향상:
- 특정 속성에 대한 빠른 검색이 가능
- 데이터 일관성:
- 기본 테이블과 강력한 일관성을 유지
2.5 LSI 사용 시 주의사항
- 테이블 생성 시에만 정의 가능: 나중에 추가하거나 삭제할 수 없음
- 인덱스 수 제한: 테이블당 최대 5개의 LSI만 생성 가능
- 추가 스토리지 사용: 인덱스도 데이터를 저장하므로 스토리지 비용 증가
3 Global Secondary Index (GSI)
- GSI는 DynamoDB에서 제공하는 강력한 기능으로, 테이블 데이터에 대한 다양한 접근 방식을 제공합니다.
- 기본 테이블과는 완전히 독립적인 새로운 뷰를 생성할 수 있습니다.
3.1 GSI의 기본 개념
- GSI는 기본 테이블의 데이터를 다른 키 구조로 재구성한 별도의 인덱스입니다.
- 주요 특징:
- 새로운 파티션 키와 정렬 키(선택사항) 정의 가능
- 기본 테이블의 어떤 속성이라도 키로 사용 가능
- 기본 테이블과 다른 키 구조 사용 가능
3.2 GSI vs LSI 비교
- LSI: 같은 파티션 키, 다른 정렬 키
- GSI: 완전히 새로운 파티션 키와 정렬 키 (둘 다 선택 가능)
3.3 GSI 사용 예시
- 음악 스트리밍 서비스의 'Songs' 테이블을 예로 들어보겠습니다:
- 기본 테이블 구조:
- 파티션 키: ArtistId
- 정렬 키: SongId
- GSI 1: 장르별 인기 노래
- 파티션 키: Genre
- 정렬 키: Popularity
- GSI 2: 발매일별 노래
- 파티션 키: ReleaseYear
- 정렬 키: ReleaseDate
- 가능한 쿼리:
- "특 정 장르의 가장 인기 있는 노래 조회" (GSI 1 사용)
- "특정 연도에 발매된 노래를 날짜순으로 조회" (GSI 2 사용)
3.4 GSI의 장점
- 유연한 쿼리: 기본 테이블 구조와 무관한 다양한 쿼리 패턴 지원
- 동적 생성: 테이블 생성 후에도 GSI 추가/수정 가능
- 성능 최적화: 특정 쿼리 패턴에 대해 최적화된 성능 제공
- 데이터 일관성: 기본 테이블 업데이트 시 GSI도 자동 업데이트 (단, 약간의 지연 있음)
3.5 GSI 사용 시 고려사항
- 별도의 용량 관리: GSI에 대해 별도의 읽기/쓰기 용량 단위(RCU/WCU) 설정 필요
- 추가 비용: 각 GSI는 추가 스토리지와 처리 용량을 사용하므로 비용 증가
- 최종 일관성: GSI는 기본 테이블과 최종 일관성만 제공 (즉시 반영되지 않을 수 있음)
- 프로젝션 선택: GSI에 포함할 속성을 신중히 선택하여 성능과 비용 최적화 필요