AWS DVA-C02AWS 허브발행일 2025. 8. 29.원본 https://blog.naver.com/jword_/223988225855 ↗

AWS DynamoDB GSI와 LSI

AWS DynamoDB GSI와 LSI — #개발자의도구들 #AWSDynamoDB #다이나모DB #DynamoDBGSI #DynamoDBLSI 참고: ExamP...

#DVA-C02#Naver Blog

#개발자의도구들 #AWSDynamoDB #다이나모DB #DynamoDBGSI #DynamoDBLSI

​

참고: ExamPotic Disscussion

문제 찾는법 : 여기 최하단

DynamoDB의 key들

DynamoDB에는 보조 인덱스 키를 설정할 수 잇다. 특히 DVA-C02의 단골 문제이기 때문에 개념 정리를 확실하 하고자 한다.

​

우선 DynamoDB에 다음 테이블을 구축했다고 가정하자

javascript 코드 예제
                                    Table: userEvents
PK (PartitionKey): userId
SK (SortKey): ts  //  ts = 이벤트 발생 시각
javascript 코드 예제
                                    { "userId": "u1", "ts": "2025-08-29T10:00:00Z", "eventType": "LOGIN",    "score":  5 }
{ "userId": "u1",  "ts": "2025-08-29T10:03:00Z", "eventType": "PURCHASE", "score": 50 }
{ "userId": "u2",  "ts": "2025-08-29T10:05:00Z", "eventType": "VIEW",     "score":  1 }

이때 dynamoDB는 partition key를 hash function에 넣은 결과로 partition을 결정한다.

javascript 코드 예제
                                    hashFunction(pk) -> hash 값으로 pk 결정!

👉 자체적인 hashFunction이 존재

여기서 결정되는 partition들은 실제 물리적 디스크에 분산되어 데이터가 저장된다는 의미이다.

​

복합키

저장된 데이터를 보면 알겠지만, userId가 중복해서 저장되어 있다. 이는 SK가 추가되었기 때문이며 (PK, SK)가 중복되면 안된다. 즉 (1, 1), (1, 2) 형태는 가능하다는 것

​

복합키의 경우 복합키 자체로 hash 값을 계산하여 파티션에 분할되어 저장된다. 그래서 두 개의 키 전체를 partition key라고 부르는 것이다.

LSI

Local Secondary Index

LSI의 규칙

  1. 원본과 같은 PK를 가져야 한다. (이 경우 userId)
  2. SK는 달라도 된다.
javascript 코드 예제
                                    예시)

LSI1: PK=userId, SK=eventType
LSI2: pk=userId, SK=score

사용하는 이유

userId별로 다른 Column 정렬 값을 보고 싶을 때.

javascript 코드 예제
                                    👉 userId별 evnetType을 보고 싶거나
👉 userId별 score를 보고 싶거나

🚀 추가특징들

  • 테이블 생성 시에만 생성이 가능하다. 이후 추가, 삭제 불가
  • 강한 일관성 읽기 지원
  • 테이블 RCU/WCU만 사용
  • 테이블 용량과 공유한다.
  • 같은 파티션 키 값에 대해 테이블 + 모든 LSI 합산 10GB제한
  • 테이블당 최대 5개

GSI

Global Secondary Index

GSI의 경우 PK도 다른 값으로 바꿀 수 있다. 기존 테이블과는 완전히 다른 파티션 키이다.

​

GSI1: PK=eventType, SK= ts

GSI2: PK=email (정렬키 없어도 된다)

​

🚀 특징

  • 테이블 생성 후에도 추가/삭제 가능
  • 강한 일관성 미지원
  • 인덱스별 RCU/WCU를 따로 가진다. 테이블 쓰기를 하면 테이블 WCU + GSI WCU를 모두 사용함
  • 테이블과 독립적으로 자동 스케일링
  • 테이블당 최대 20개
  • 전혀 다른 접근이 필요한 경우 사용하기

​

​