서버리스 - DynamoDB

이기태·2024년 5월 22일
0

AWS

목록 보기
37/62
  • 시험에 자주 출제

DynamoDB

  • 완전 관리형 DB

  • 데이터가 다중 AZ 간에 복제되어 가용성이 높다.

  • DynamoDB는 클라우드 기본 기능이다. -> AWS 독점 서비스 - NoSQL DB - 트랜잭션 지원

  • 사용 사례

    • DynamoDB를 이용해 방대한 워크로드 확장 가능
      DB가 내부에서 분산되기 때문
  • 초당 수백만 개의 요청을 처리, 수조 개의 행, 수백 TB의 스토리지를 갖는다.

  • 성능은 한 자릿수 ms단위, 일관성 또한 높음 [v]

  • 보안 관련 기능은 IAM과 통합되어 있다.(보안, 권한 부여, 관리 기능 포함)

  • 비용이 낮고, 오토 스케일링 기능을 가지고 있다.

  • 유지 관리나 패치 없이도 항상 사용할 수 있다.(DB를 프로비저닝할 필요 없음)
    항상 사용할 수 있어 테이블을 생성해 해당 테이블의 용량만 설정하면 된다.

  • 테이블 클래스 종류

    • Standard 클래스
      액세스가 빈번한 데이터에 사용
    • IA(Infrequent Access) 테이블 클래스
      액세스가 빈번하지 않은 데이터에 사용
  • DynamoDB는 DB가 이미 존재해 테이블만 만들면 된다.

    • 즉, 스키마를 빠르게 생성할 수 있다.
    • 테이블을 생성하면 각 테이블에 기본 키가 부여되는데 기본 키는 생성 시 결정된다.
    • 각 테이블에 데이터를 무한히 추가 가능
    • 각 항목은 속성을 가지고 속성은 열에 표시
    • 속성은 null이 될수도 나중에 추가할 수도 있다.
    • 모든 속성을 지정할 필요가 없고 아이템마다 속성이 달라도 된다.
    • DynamoDB 항목의 최대 크기는 500KB 이다.
      -> 작은 객체 저장에 적합
    • 다양한 타입을 지원한다.
      스칼라 타입: 문자열, 숫자, 바이너리, 불리언, null
      문서 타입: 목록, 지도
      세트 타입: 문자열 세트, 숫자 세트, 바이너리 세트
  • DynamoDB의 읽기/쓰기 용량 모드 설정

    • 프로비저닝된 모드(기본값)
      - 초당 읽기/쓰기 요청 수를 예측해 미리 지정하면 그것이 테이블의 용량이다.
      - 미리 용량을 계획하고 프로비저닝된 RCU와 WCU만큼 지불하는 방식
      - 오토 스케일링 기능이 있어 테이블의 로드에 따라 자동으로 RCU와 WCU를 늘리거나 줄일 수 있다.
      - 로드를 예측할 수 있고 서서히 전개되고, 비용 절감을 원할때 적합
    • 온디맨드 모드
      - 읽기/쓰기 용량이 워크로드에 따라 자동으로 확장
      - 용량을 미리 계획하지 않음
      - 사용한 만큼만 비용 지불(모든 읽기/쓰기에 대한 비용)
      - 워크로드를 예측할 수 없거나 급격히 증가하는 경우에 유용
      - ex: 수 천개의 트랜잭션을 수백만 개의 트랜잭션으로 1분 내로 확장해야 하는 애플리케이션
      - 트랜잭션이 없거나 4~5회인 워크로드이면 트랜잭션 횟수만큼만 비용을 지불하는 온디맨드 모드가 적합

DynamoDB 고급 기능

  • DynamoDB Accelerator(DAX)
    DynamoDB를 위한 고가용성의 완전 관리형 원활한 인메모리 캐시

    • 읽기요청이 많아지면 DAX 클러스터를 생성해 데이터를 캐싱해 읽기 혼잡을 해결
    • DAX의 지연시간은 마이크로초 수준으로 짧다.
    • DAX는 기존 DynamoDB API와 호환된다.
      애플리케이션 로직을 변경할 필요 없음.
    • 캐시의 TTL은 5분이나 변경할 수 있다.
  • 왜 ElastiCache대신 DAX를 사용할까?

    - DAX는 DynamoDB 앞에있고, 개별 객체 캐시와 쿼리와 스캔 캐시를 처리하는데 유용하다.
    ex) 집계 결과를 저장할 때는 ElastiCache가 더 좋고
    대용량의 연산을 저장할 때는 DynamoDB가 더 좋다.
    - 두 서비스는 상호 보완적 성격을 가진다.
    DynamoDB에 캐싱 솔루션 추가 -> DAX

  • DynamoDB의 스트림 처리
    테이블의 모든 수정 사항에 대한 스트림을 생성할 수 있다.

    • 사용 사례
      - 사용자 테이블에 새로운 사용자가 등록됐을 때 환영 이메일 보내기
      - DynamoDB 테이블의 변경 사항에 실시간으로 반응하는 데 활용
      - 실시간으로 사용 분석
      - 파생 테이블 삽입
      - 리전 간 복제를 실행
      - DynamoDB 테이블 변경 사항에 대해 람다 함수 실행
    • DynamoDB의 스트림 처리
       DynamoDB Streams						Kinesis Data Streams
       보존기간: 24시간							보존기간: 1년
       소비자 수 제한 있음.						더 많은 소비자 수
       AWS Lambda 트리거를 사용하여 처리하거나	데이터 처리 방법이 더 많다.
       DynamoDB Stream Kinesis 어댑터 사용		Lambda 함수
       										Kinesis Data Analytics
                                            	Kinesis Data Firehose
                                              Glue Streaming ETL  ,...
  • DynamoDB 글로벌 테이블
    글로벌 테이블: 여러 리전간 복제가 가능한 테이블
    ex: 테이블을 US와 AP에 두고 두 테이블은 양방향 복제가 가능하다.

    • DynamoDB 글로벌 테이블은 복수의 리전에서 짧은 지연 시간으로 액세스할 수 있게 한다.
    • 다중 활성 복제가 가능(active-active)
      애플리케이션이 모든 리전에서 테이블을 읽고 쓸 수 있다.
    • 글로벌 테이블을 활성화하려면 DynamoDB 스트림을 활성화해야 한다.
  • DynamoDB TTL(Time To Live)
    DynamoDB TTL: 만료 타임스탬프가 지나면 자동으로 항목을 삭제

    • 사용 사례
      - 최근 항목만 저장하기
      - 2년 후 데이터를 삭제해야하는 규정을 따를때
      - 웹 세션 핸들링 [v]
  • DynamoDB의 재해 복구로 활용

    • 지정 시간 복구(PITR)을 사용해 지속적인 백업을 할 수 있다.
      • 35일간 활성화를 선택할 수 있다.
      • 활성화하면 백업 기간 내에는 언제든 지정 시간 복구를 실행할 수 있다.
      • 복구를 진행하면 새로운 테이블을 생성한다.
    • 온디맨드 백업
      • 직접 삭제할 때까지 보존
      • 온디맨드 백업은 DynamoDB의 성능이나 지연시간에 영향을 주지 않는다.
      • 백업 관리 방법 중 하나로 AWS Backup 서비스
        백업에 수명 주기 정책을 활성화하고, 재해 복구 목적으로 리전 간 백업을 복사할 수 있다.
      • 복구를 진행하면 새로운 테이블이 생성된다.
  • DynamoDB와 S3 간 통합

    • S3에 테이블 내보내기
      • 지정 시간 복구 기능 활성화 필수
      • Athena 엔진을 사용
        S3로 내보낸 테이블의 쿼리를 수행하기 위해 사용
      • 지속적인 백업(지정 시간 복구)을 활성화한 상태이기 떄문에 35일간 어떤 시점이든 테이블을 내보낼 수 있다.
      • 테이블을 내보내도 테이블의 읽기 용량이나 성능에 영향을 주지 않는다.
      • DynamoDB를 S3로 먼저 내보내기 해 데이터 분석을 수행할 수 있다.
      • 감사 목적으로 스냅샷을 확보 가능
      • 데이터를 DynamoDB로 다시 가져오기 전에 데이터 ETL 등 대규모 변경을 실행할 수 있다.
      • 내보낼 때 JSON이나 ION 포맷을 이용한다.
    • S3에서 테이블 가져오기
      • S3에서 CSV, JSON, ION 포맷을 새로운 DynamoDB 테이블을 생성하는 방식.
      • 쓰기 용량을 소비하지 않고 새로운 태이블을 생성한다.
      • 가져올 때 발생한 오류는 CloudWatch Logs에 기록된다.

0개의 댓글

관련 채용 정보