DynamoDB

이상훈·2023년 5월 21일
0

aws

목록 보기
6/7

DynamoDB란?

  • NoSQL(Not Only SQL) 데이터베이스
  • 매우 빠른 쿼리 속도
  • Auto-Scaling 기능 탑재
  • Key-Value 데이터 모델 지원
  • 테이블 생성 시 스키마 생성 필요 없음
  • 모바일, 웹, IoT 데이터 사용 시 추천됨
  • SSD 스토리지 사용

DynamoDB 구조

  • 테이블 (Table)
    • 아이템 (Items) : 행(row)과 개념이 비슷함
    • 특징 (Attributes) : 열(column)과 개념이 비슷함
    • Key-Value (Key : 데이터의 이름, Value : 데이터 자신)
    • 예시) JSON, XML

Primary Keys (PK)

DynamoDB는 PK를 사용하여 데이터를 쿼리한다. DynamoDB에는 두가지 PK 유형이 있다.

Partition Key

  • 고유 특징 (Unique Attribute)
  • 실제 데이터가 들어가는 위치를 결정해줌
  • 파티션키 사용 시 동일한 두개의 데이터가 같은 위치에 저장될 수 없음!
  • 테이블을 만들때 partition key를 설정하고 나면 데이터가 들어올 떄 어디에 저장할지 파티션키 내부에 있는 해시함수를 돌리고 해시값을 반환, 그 값은 데이터가 들어가는 주소값이 되며 그 주소값으로 데이터 조회.

Composite key

  • 파티션키(Partition Key) + 정렬키(Sort Key)
  • 예시 : 똑같은 고객이 다른 날짜에 다른 물건을 구매
  • 파티션키 : 고객 아이디, 정렬키 : 날짜(Timestamp)
  • 같은 파티션키의 데이터들은 같은 장소에 보관, 그다음 정렬키에 의해 데이터가 정렬됨

데이터 접근 관리

  • AWS IAM으로 관리할 수 있음
  • 테이블 생성과 접근 권한을 부여할 수 있음
  • 특정 테이블만, 특정 데이터만 접근 가능하게 해주는 특별한 IAM 역할 존재

Index

Index는 테이블 전체가 아닌 기준점(pivot)을 사용해 쿼리가 일어나기 때문에 매우 큰 쿼리 성능 효과가 있다. DynamoDB의 인덱스는 다음과 같이 두 가지 종류가 있다.

Local Secondary Index

  • 테이블 생성 시에만 정의해줄 수 있음
  • 따라서 테이블 생성 후 변경, 삭제가 불가능
  • 똑같은 파티션키 사용, 그러나 다른 정렬키 사용

Global Secondary Index

  • 테이블 생성 후에도 추가, 변경, 삭제 가능
  • 다른 파티션키, 정렬키 사용


Query vs Scan

Query

  • Primary Key를 사용하여 데이터 검색
  • Query 사용시 모든 데이터(컬럼) 반환
    • ProjectionExpression 파라미터 사용시 원하는 데이터(컬럼)만 추출 가능!

테이블에서 PK값 AAA 조회

Scan

  • 모든 데이터를 불러옴 (primary key 사용 X)
    • ProjectionExpression 파라미터 사용시 원하는 데이터(컬럼)만 추출 가능

Query가 Scan보다 훨씬 효율적이라 Query 사용 추천!!


DAX (DynamoDB Accelerator)

  • 클러스터 In-memory 캐시
  • 10배 이상의 속도 향상
  • 읽기 요청만 해당 사항 (X 쓰기 요청)
  • Ex) Black Friday날 쇼핑 웹사이트 운영 (수많은 읽기 요청 예상)

원리

  • DAX 캐싱 시스템
    • 테이블에 데이터 삽입 & 업데이트 시 DAX에도 반영
  • 읽기 요청에 맞는 데이터가 DAX에 들어있을 시 DAX에서 데이터 즉시 반환
    • (Cache Hit) <-> (Cache Miss)

단점

  • 쓰기 요청이 많은 애플리케이션에서는 부적절함
  • 읽기 요청이 많지 않은 애플리케이션에서 부적절함
  • 아직 모든 지역에서 제공하지 않음
    • 서울 제공 X

DynamoDB Streams

  • DynamoDB 테이블에서 일어나는 일들(삽입, 수정, 삭제 등)이 일어날 시 시간적 순서에 맞게 Streams에 기록
  • Log는 즉각 암호화가 일어나며 24시간 동안 보관됨
  • 주로 이벤트를 기록하고 이벤트 발생을 외부로 알리는 용도
    • ex) Lambda Function
  • 이벤트 전&후에 대한 상황 보관

동작 원리

애플리케이션은 두개의 AWS SDK와 연결되어있음

  • DynamoDB API는 하나의 DynamoDB Endpoint와 연결
    • DynamoDB와 직접 소통하는 역할을 함(데이터 추가, 삭제)
  • DynamoDB Streams API는 하나의 DynamoDB Stream Endpoint와 연결

예시(온라인 쇼핑몰)

  1. 소비자가 아이템을 구매하려 할 때 인보이스 생성
  2. 인보이스는 DynamoDB 테이블에 저장됨
  3. Dynamo Streams가 이러한 이벤트를 인식한 후 람다함수 발동
  4. 람다는 SNS로 메시지 전송
  5. SNS는 메세지를 만들어 SQS로 전송
  6. 소비자는 결제창을 확인 후 카드 정보를 기입 후 결제
profile
Problem Solving과 기술적 의사결정을 중요시합니다.

0개의 댓글