[AWS] Amazon DynamoDB

bolee·2022년 8월 10일
0
post-thumbnail

Amazon DynamoDB

Amazon DynamoDB는 NoSQL 기반의 완전관리형 데이터베이스 서비스이다.

NoSQL (Not Only SQL, Non-relational Database)

  • RDBS와 달리 스키마와 관계라는 개념 없이 자유롭게 데이터를 관리할 수 있다.
  • RDBS의 테이블과 같은 개념으로 콜렉션이라는 형태로 데이터를 관리한다.
  • SQL 구문을 사용하지 않는다.
  • 일반적으로 필요한 데이터가 하나의 콜렉션에 있고, 자주 변경되지 않는 데이터에 큰 장점이 있다.
  • 수평적으로 확장하기 용이하며 분산처리를 주로 처리한다.
  • 단점을 콜렉션에 중복된 데이터 저장이 가능하다. 따라서, 데이터 업데이트 시 저장되어 있는 업데이트를 동일하게 해주어야 한다.

Amazon DynamoDB의 특징

  • 주문형 용량 모드(On-demand capacity mode): 주문형 서비스를 사용하며, 트래픽을 수용하기 위해 자동으로 확장/축소한다.
  • ACID 트랜잭션에 대한 기본 제공 지원(Bulit-in support for ACID transactions): Native와 Server-side에 트랜잭션을 지원
  • 주문형 백업(On-demand backup): 지정된 시간에 작업의 전체 백업 생성 가능
  • 시점 복구(Point-in-time recovery): 해당 시점으로의 복구 지원. 실수로 읽기/쓰기 작업의 경우 데이터를 보호하는데 도움이 된다.
  • 미사용 암호화(Encryption at rest): 테이블이 사용되지 않는 경우에도 데이터를 암호화된 방식으로 유지하며, 암호화 키를 통해 보안이 강화된다.
  • Key-Value 데이터 모델: 데이터를 Key-Value 형식으로 저장한다.
  • 단순하고 신속한 배포: 설계를 해서 그 데이터베이스를 적용하기까지 오랜 시간이 걸리지 않을 정도로 단순하고 신속하게 배포할 수 있다.
  • 빠르고 일관된 응답시간: 일단 IO를 하는 시간이 빠른 것은 기본이고 아무리 규모가 증가하고 어떤 장애가 와도 일관적인 응답시간을 보여준다.
  • 보조 인덱스를 통한 빠른 조회: NoSQL 특성상 관계가 없기 때문에 일반적으로 데이터를 찾기에는 인덱싱이 없으면 속도가 느려지지만 보조 인덱스를 통해 해결해준다.

Amazon DynamoDB의 구성요소

DynamoDB는 테이블(Table), 항목(Item), 속성(Attribute)으로 구성된다.

테이블(Table)

  • 항목 그룹으로 시각화 가능
  • 모든 항목을 테이블에 저장한다.
  • 즉, 항목들의 모임이다.

항목(Item)

  • 즉, 속성들의 모임이다.
  • 테이블에서 항목을 고유하게 정의할 수 있는 특성 집합이다.

속성(Attribute)

  • 항목에 연결된 단일 필드이다.
  • Key-Value 형식으로 이루어져 있다.

Amazon DynamoDB의 기본 키(Primary Key, PK)

DynamoDB에서 기본 키는 필수로, 테이블을 생성할 때 지정되면 NULL은 불가능하다.

  • 간단한 기본 키(Simple Primary Key)
    • 간단한 기본 키는 파티션 키(Partition Key)라고도 한다.
    • DynamoDB에서는 간단한 기본 키(파티션 키) 값을 사용해 테이블 항목을 구분한다.
  • 복합 기본 키(Composite Primary Key)
    • 간단한 기본 키에 정렬 키(Sort Key)을 추가한 것이다.
    • 정렬키(Sort Key)는 파티션 내에서 정렬하는 기준 값이다.

Amazon DynamoDB 보조 인덱스(Secondary Index)

보조 인덱스는 기본 키의 도움 여부과 관계없이 데이터를 쿼리할 수 있는 특성으로 이해할 수 있다.

DynamoDB에는 이러한 추가 액세스를 진행하는 데 도움이 되는 보조 인덱스가 존재한다.

  • Global Secondary Index(GSI)
    • 파티션 키와 정렬 키와 기본 테이블과 다를 수 있는 인덱스
    • 모든 파티션에서 인덱스의 쿼리가 기본 테이블의 모든 데이터에 적용될 수 있으므로 글로벌하게 간주된다.
    • 기본 테이블과 별개로 자체 파티션 공간에 저장되며 기본 테이블과는 별도로 크기 조정된다.
  • Local Secondary Index(LSI)
    • 기본 테이블과 파티션 키는 동일하지만 정렬 키가 다른 인덱스
    • 로컬 보조 인덱스의 모든 파티션이 동일한 파티션 키 값을 갖는 기본 테이블 파티션으로 한정된다는 의미에서 "로컬"이라고 부른다.

보조 인덱스에 관한 자세한 내용은 자세한 내용은 아래 공식 문서에서 확인하자.

Amazon DynamoDB Secondary Index

Amazon DynamoDB 스트림(Streams)

DynamoDB는 추가 옵션으로 데이터 수정 이벤트를 추적할 수 있다.
각 이벤트는 스트림 레코드(stream record)로 표시되며 이 추가 옵션 서비스가 활성화 되면 신규/업데이트/삭제 시 새 이벤트가 표기된다.

Amazon DynamoDB API

Amazon DynamoDB는 다양한 API를 제공한다.
자세한 내용 및 사용법은 아래 공식 문서에서 확인하자.

Amazon DynamoDB API Document
Amazon DynamoDB API Using

제어 영역(Control Plane): 데이블 생성 및 관리 데이블을 담당하는 작업

  • CreateTable: 새 테이블 생성
  • DescribeTable: 테이블에 대한 정보 담기
  • ListTable: 목록의 모든 테이블 이름 반환

데이터 제어(Data Plane): CRUD 작업 수행

  • 데이터 생성(Create)
    • PutItem: 기본 키를 사용해 테이블의 단일 데이터 항목 생성
    • BatchWriteItem: PutItem의 확장된 기능으로 최대 25개의 항목 생성
  • 데이터 읽기(Read)
    • GetItem: 기본 키로 테이블에서 단일 항목 검색
    • BatchGetItem: GetItem의 확장된 기능으로 여러 테이블에서 최대 100개의 항목 검색
    • Query: 파티션 키를 이용해 항목을 검색
    • Scan: Query와 유사한 방식으로 작동하지만 파티션 키가 필요하지 않음
  • 데이터 업데이트(Update)
    • UpdateItem: 기본 키를 이용해 테이블의 단일 데이터 혹은 여러 데이터 항목 수정
  • 데이터 삭제(Delete)
    • DeleteItem: 기본 키를 이용해 테이블의 단일 항목 삭제
    • BatchWriteItem: DeleteItem의 확장된 기능으로 최대 25개의 항목 삭제

DynamoDB Streams: 테이블에서 스트림을 활성화/비활성화, 스트림에 포함되어 있는 데이터 수정 레코드에 액세스

  • ListStreams: 모든 스트림 목록 또는 특정 테이블의 스트림 반환
  • DescribeStream: 스트림에 대한 정보 반환
  • GetShardIterator: 샤드 반복자를 반환한다. 샤드 반복자는 애플리케이션이 스트림에서 레코드를 가져오는 데 사용하는 데이터 구조이다.
  • GetRecords: 지정된 샤드 반복자를 사용하여 하나 이상의 스트림 레코드 반환

트랜잭션: 원자성, 일관성, 격리 및 내구성(ACID)을 제공하여 애플리케이션에서 데이터의 정확성 유지

  • TransactWriteItems: 양자택일 결과가 보장되는 테이블 내와 테이블 간 모두에서 여러 항목에 대한 Put, Update 및 Delete 작업을 허용하는 배치 작업
  • TransactGetItems: 하나 이상의 테이블에서 여러 항목을 가져오는 Get 작업을 허용하는 배치 작업

참고 자료

https://docs.aws.amazon.com/ko_kr/amazondynamodb/latest/developerguide/Introduction.html
https://interconnection.tistory.com/60
https://velog.io/@songa29/AWS-DynamoDB%EB%9E%80
https://yoo11052.tistory.com/174
https://blog.kico.co.kr/2022/03/17/aws-dynamodb/

0개의 댓글