AWS DynamoDB

조민철·2025년 3월 25일

AWS

목록 보기
12/21
post-thumbnail

DynamoDB

이번에는 NoSQL 데이터베이스인 DynamoDB를 한번 알아보겠다.

AWS DynamoDB는 고성능을 요구하는 서버리스 완전관리형 NoSQL 데이터베이스이다. 대규모의 운영 환경에서도 10ms 미만의 응답속도를 제공한다. 또한 AWS 완전관리형 서비스답게 사용자는 인프라를 관리할 필요가 없다. 또한 키-값(Key-Value) 및 Document 형식 모델을 지원한다. 그외에 고가용성(HA), 확장, 등 많은 기능들을 지원한다.

특징

NoSQL

  • NoSQL DB 답게 다양한 데이터 모델을 지원한다.
  • DynamoDB는 JOIN을 지원하지 않으므로 비정규화(중복)를 하는것이 좋음
  • ACID 트랜잭션 제공

Serverless

  • DynamoDB는 서버를 관리할 필요가 없음. (소프트웨어 패치, 관리, 설치 등)
  • 가동중지가 없어 운영관리면에서 뛰어남

고가용성 및 자동 확장

  • 요청량이 증가하면 자동으로 처리량을 조정 -> Auto Scaling
  • SSD 기반 스토리지 사용으로 빠른 응답시간 제공

비용

  • AWS 답게 온디멘드 -> 사용한 만큼 비용 지불
  • 프로비저닝 모드 -> Read/Write 용량을 미리 설정하여 비용 최적화

DynamonDB 테이블

DynamoDB의 테이블은 관계형 DB와 살짝 유사하지만 NoSQL의 특징중 하나인 스키마가 고정되어 있지 않다.
프라이머리 키(기본키)를 사용하여 태이블의 각 항목들을 고유하게 식별하게된다.

  • 테이블
    • DynamoDB는 데이터를 테이블에 저장
  • 항목
    • 고유하게 식별할 수 있는 속성들의 집합
  • 속성
    • 속성은 기본적인 데이터 요소로 더이상 나눠지지 않음

테이블 생성시 필요한 엔터티는 2개의 항목이 존재한다.

  • 단순 기본 키
    • 파티션 키라는 속성 하나만으로 구성된 단순한 기본 키이다. 파티션 키를 하나만 사용하는 경우 두 항목이 동일한 값을 가질 수 없다.
  • 복합 기본 키
    • 복합 기본 키는 파티션 키와 정렬 키로 구성된다. 이 경우 여러 항목의 파티션 키 값은 같을 수 있지만 정렬 키 값은 달라야 한다.
People

{
    "PersonID": 101,
    "LastName": "Smith",
    "FirstName": "Fred",
    "Phone": "555-4321"
}

{
    "PersonID": 102,
    "LastName": "Jones",
    "FirstName": "Mary",
    "Address": {
                "Street": "123 Main",
                "City": "Anytown",
                "State": "OH",
                "ZIPCode": 12345
    }
}

{
    "PersonID": 103,
    "LastName": "Stephens",
    "FirstName": "Howard",
    "Address": {
                "Street": "123 Main",
                "City": "London",                                    
                "PostalCode": "ER3 5K8"
    },
    "FavoriteColor": "Blue"
}

JSON? 형식으로된 테이블을 확인해보면 이 테이블은 People 이라는 테이블이다.
PersonID는 프라이머리 키로 고유식별자이다. 여기에는 프라이머리 키를 제외하고 스키마가 존재하지 않아 형식이 미리 정의되어있지 않다. 또한 특이한점은 데이터가 중복되는 부분이 있다는 점이다. (정규화 x)

DynamoDB 용량 및 크기 조정


DynamoDB에서는 2가지의 용량 관리 옵션을 제공한다.

  • 온디멘드
    • 워크로드를 알 수 없는 경우
    • 트래픽을 예측할 수 없는 경우
    • 사용한 만큼만 지불하는 요금제 경우
  • 프로비저닝
    • RCU 와 WCU의 최대 수를 설정
    • 해당 한도를 초과하면 비용제를 위해 요청을 넘긴다
    • 애플리케이션 트래픽이 예측 가능한 경우
    • 트래픽의 양이 일정하거나 점진적으로 변경되는 경우
    • 배용관리를 위해 용량 요구 사항을 예측할 수 있는 경우

RCU/WCD??
RCU(Read Capacity Unit)는 초당 처리할 수 있는 읽기 요청의 용량을 나타내는 단위이다.
WCU(Write Capacity Unit)는 초당 처리할 수 있는 쓰기 요청의 용량을 나타내는 단위이다

DynamoDB 일관성 옵션

  • 최종적으로 일관된 읽기
    • DynamoDB 테이블의 데이터를 읽을 때, 응답은 최근 완료된 쓰기 작업의 결과를 반영하지 않을 수 도있음. 잠시 후 읽기 요청을 반복하면 응답이 최신 데이터를 반환함
  • 강력한 읽기 일관성
    • 강력한 읽기 일관성을 요청하면 DynamoDB는 성공한 모든 이전 쓰기 작업의 업데이터를 반영하여 가상 최신 데이터로 응답을 반환한다.

DynamoDB 글로벌 테이블


글로벌 테이블은 단일 AWS 계정이 소유한다. 각 본제본은 동일한 데이터가 저장되고 글로벌 테이블은 리전당 한 개의 복제 테이블을 가질 수 있다.DynamoDB 글로벌 테이블은 복제 솔루션을 직접 구축하여 관리하지 않고도 다중 리전, 다중 활성 마스터 데이터베이스를 배포할 수 있는 완전관리형 솔루션을 제공한다.

DynamoDB Streams

DynamoDB Streams는 테이블의 데이터 수정 이벤트를 캡처하는 기능이다. 데이터 수정을 하게 된다면 이벤트가 발생한 순서대로 실시간으로 스트림에 표시된다.

각 이벤트는 스트림 레코드에 의해 나타난다. 주로 데이터베이스의 변경상황을 보거나 삭제되거나 하는 보안 적인 부분에서도 효율적일거같다.

profile
기록의 힘은 대단하다

0개의 댓글