이두잉의 AWS 세상

AWS DynamoDB / API Gateway / Lambda Sample 튜토리얼

2018.10.02 17:49 - leedoing leedoing

AWS DynamoDB(NoSQL PaaS, Key/Value Store)

정확한 그림은 아니라지만, 뭐 대충 요런 포지션이 DynamoDB


NoSQL의 사용 이유(RDBMS 한계?)

Row->Document 성 데이터 이동

Scale-up의 한계 -> Scale-out 가능

비정형 데이터의 최적화


1. DynamoDB

Index는 Local, Global(Optional) Secondary Index 두 Index를 지원(일종의 View로 물리적으로도 저장)


LSI: Hash Key는 기본 테이블 키와 동일, Rang(sort) Key는 선택

제약: 최대 5개, 테이블 생성 시점만 가능, 10GiB 제한(같은 파티션 내 생성되기 때문?)


GSI: Hash Key, Range(sort) 자유롭게 구성 가능

제약: 최대 5개, 테이블 생성 후에도 가능, Async 방식으로 Consistency에 약점

L/G Index를 통해 DynamoDB의 유연성?은 높일 수 있으나, 비용 증가와 이럴거면 RDBMS 쓸거 같음.


LSI/GSI는 그냥 인프라에 따라 적재되는 DynamoDB 용어일뿐이고, 둘 다 파티셔닝에 대한 Key(필수)/Sort Key(선택) 이다.

그러니까 where 조건절에는 LSI든, GSI의 Hash + Range Key가 필요하다. 


가령 {"id":"1", "title":"극한직업", "actor":"류승룡", "data":"2019.01.01"} 이라는 메타데이터가 있다.

LSI의 Hash Key = id, Sort Key=title 이라고 하자. 그러면 DynamoDB에서 서칭할 때 id 값을 알아야 검색을 할 수 있다. 이럴 경우 1:1 매핑으로 GSI의 Hash Key = title, Sort Key = id로 해서 GSI를 검색 후 id를 찾을 수 있다. 그 외 사용에 따라 LSI, GSI를 여러 방식으로 구현 할 수 있다. 

아무튼 기존 RDBMS의 모델링 방식과 다르게 API 사용 기준으로 DynamoDB를 모델링 해야한다. 


Hotels.com의 경우 Cassandra에서 DynamoDB로 Migration 하며 경험한 것을 블로깅 했는데, DynamoDB를 이해하는데 많은 도움이 된다. API의 경우 Method와 Query를 제공하고 있다. 


참고: https://www.youtube.com/watch?v=RfOt2bo0bSA(40분 영상인데 미미추)

참고: https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/GSI.html

참고: https://medium.com/hotels-com-technology/dynamodb-basics-113f9dba4460(Hotels.com 기술블로그 dynamoDB)

참고: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html



2. API Gateway


3. Lambda


토이 플젝 포함 튜토리얼을 만들기 위해 시간이 좀 소요..되네?