Database

이기태·2024년 6월 11일
0

AWS

목록 보기
41/62

올바른 DB 선택하기

1) 쓰기가 많은가
2) 읽기가 많은가
3) 균형이 맞는 워크로드인가
4) 처리량과 변화하는 처리량이 어떻게 되는가
5) 데이터 저장공간이 얼마나 되는가
6) 확장은 가능한가
7) 액세스 빈도와 방법은 어떤가
8) 데이터 내구성과 데이터 공급원은 무엇인가
9) 지연 시간 요구사항이나 동시 사용자 요구사항이 있는가
10) 데이터 모델은 무엇이고 어떻게 쿼리하는가
11) 조인/정형/반정형중 어떤것인가
12) 강력한 스키마인가 유연성이 높은가
13) DB 관련 보고가 필요하거나 검색 기능이 필요한가
14) 관계형 DB와 NoSQL중 무엇이 필요한가
15) 라이선스 비용이 드는가 / Aurora 같은 클라우드 네이티브 DB로 전환할 것인가

DB 타입

  • RDBMS: SQL을 사용하거나 온라인 트랜잭션(OLTP)을 처리할 때 사용.
    RDS, Aurora같은 DB -> Join에 유용

    • ---------------------------- (1) RDS -----------------------------
    • PostgreSQL/MySQL/Oracle/SQL Server/MariaDB/Custom DB
    • RDS 인스턴스 크기와 EBS 볼륨 유형 및 크기를 프로비저닝
    • 읽기용량 확장: 읽기 전용 복제본 지원
    • 고가용성: 다중 AZ 지원 -> 대기 데이터베이스로 재해 발생 대비
    • RDS 보안
      • IAM을 통해 사용자 이름과 비밀번호로 DB에 연결할 수 있게 함 또는 일부 사용자에게 IAM 인증을 부여할 수 있음.
      • 네트워크 보안을 위한 보안 그룹 설정 가능
      • 저장 데이터 암호화를 위한 KMS기능
      • 전송 데이터 암호화를 위한 SSL/TLS 기능.
    • 자동 백업 기능: 최대 35일
      35일 이내에는 지정 시간 복구 기능 지원
      장기 보존 백업을 하고 싶다면 수동 DB 스냅샷 사용
    • 유지 관리 기능 예약 가능 -> 다운타임 발생할 수 있음
      이는 프로비저닝하거나 AWS가 DB 엔진을 주기적으로 업데이트하고, 기본 EC2 인스턴스에 보안 패치를 실행할 때 발생한다.

      *** DB 유지 관리 기능이란?
      실행중인 인스턴스의 하드웨어, 인스턴스의 OS, DB 엔진 버전이 업데이트 할 수 있다.
      -> 기능을 끄면 해결된다 생각하겠지만 DB 인스턴스의 업데이트가 필요한 순간을 오게 된다.
      해결 방법 1) 서비스 정기 점검 시간을 이용한다.
      이는 다운된 시간으로 매출에 직접적인 영향이 적을 때 사용한다.
      해결 방법 2) Blue-Green 배포
      blue-green을 활용하더라도 다운타임은 존재한다.(blue에서 green으로 바꿀때)
      번외) DB 백업 시 성능에 미치는 영향
      DB 백업을 위해 스냅샷을 생성하는 동안 DB I/O에 지연시간을 발생 시킬 수 있다.
    • RDS 프록시를 강제해 RDS에 IAM 인증을 추가하는 기능
      Secrets Manager와 통합해 DB 자격 증명을 관리할 수 있다.
    • 기본 인스턴스에 액세스하고 사용자 지정하려면 RDS Custom을 사용하자
      (Oracle, SQL Server 유형에서 지원)

    • ---------------------------- (2) Aurora -----------------------------
    • PostgreSQL/MySQL 지원
    • Aurora는 스토리지와 컴퓨팅이 구분되어 있다.
      • 스토리지는 3개의 AZ에 걸친 6개의 복제본에 데이터를 저장.
        매우 가용성이 뛰어남.
        스토리지에 문제가 있을 경우 자가 복구 과정이 일어남.
        Auto Scaling이 되어 스토리지 크기를 늘릴수 있음.
      • 컴퓨팅측면에서 이것이 실제 데이터베이스 인스턴스들이다.
        여러 개의 가용영역에 걸쳐 있을 수도 있고 모여 있을 수도 있다.
        읽기 전용 복제본 또한 Auto Scaling 가능
      • 클러스터: 어디서 쓰고 읽을지를 알기 위해 사용자 정의된 엔드포인트가 필요하다.
        즉, 읽기 엔드포인트와 쓰기 엔드포인트가 있다.
    • RDS와 동일한 보안 모니터링 및 유지 기능이 있다.
    • 백업 & 복구 옵션(Aurora 정리한거 참고)
      https://velog.io/@leekt0321/RDS-Aurora
    • 추가적인 Aurora 기능들
      • Aurora Serverless
        예상할 수 없거나 간헐적인 워크로드가 있을때 사용
        용량 계획을 하지 않아도 된다.
      • Aurora Global
        글로벌 DB
        16개에 달하는 DB 읽기 인스턴스를 제공하고, 이는 DB가 복제된 리전마다 제공된다.
        스토리지 복제는 리전 사이에서 1초 미만의 시간에 일어난다.
        주 리전에 문제가 있을 경우 두번째 리전을 새로운 주요 리전으로 승급시킬 수 있다.
      • Aurora Machine Learning
        SageMaker & Comprehend를 사용할 수 있도록 머신러닝 모듈 사용가능
      • Aurora Database Cloning
        외부에서 테스트 DB나 스테이징 DB를 사용하고 싶다면 Aurora Database Cloning을 사용한다.
        이는 스냅샷 후 복구하는 것보다 빠르다.
    • RDS vs Aurora
      • RDS보다 더 적은 유지관리, 더 높은 유연성, 더 높은 성능 더 다양한 기능을 제공.
  • NoSQL: 유연한 DB, SQL사용 X, Join 기능 X
    DynamoDB, ElastiCache, Neptune, DocumentDB, keyspaces

    • -------------- ElastiCache -----------------
    • ElastiCache: 관리형 Redis/Memcached (메모리 기반 데이터 저장소)
    • 캐싱 작업에 활용
    • 인 메모리 데이터 스토어로 지연시간이 매우 짧다.(1ms 미만)
    • 캐시를 위한 EC2 인스턴스 유형을 프로비저닝해야함
    • Redis용에선 클러스터 생성, 다중 AZ, 샤딩(데이터를 조각내 분산 저장하는 데이터 처리 기법)을 위한 읽기 전용 복제본 사용 가능.
    • IAM을 통해 프로비저닝한 보안과 보안 그룹, KMS, Redis 인증 사용가능.
    • 백업/스냅샷/지정 시간 복구 기능 사용가능.
    • 관리형 및 예약된 유지 관리 가능.
    • (중요) ElastiCache를 사용해 RDS가 결합된 DB에서 캐싱 작업을 수행하려면 애플리케이션 코드가 ElastiCache를 활용하도록 코드를 수정해야 한다.
    • 사용 사례: 키-값 스토어, DB 쿼리 캐싱, 세션 데이터 저장에 사용.
    • (주의) ElastiCache는 SQL을 사용할 수 없다.

    • ------------------ DynamoDB -----------------
    • DynamoDB: 관리형 서버리스 NoSQL DB, 밀리 초 단위의 레이턴시 제공
    • 2가지 선택 용량 모드
      • 프로비저닝된 용량 모드
        옵션으로 오토 스케일링 제공
        시간에 따라 점진적으로 증가하거나 감소하는 매끄러운 유형의 워크로드에 적합
      • 온디맨드 용량 모드
        용량을 프로비저닝할 필요가 없지만 자동으로 스케일링이 된다.
        워크로드가 예측하기 어렵거나 DB에 대한 수요가 갑자기 가파르게 상승하는 경우
    • DynamoDB는 키-값 저장소로 ElastiCache를 대체할 수 있다.
      ex) TTL 기능이 있어 일정 시간 뒤에 만료시킬 수 있어 웹사이트를 위해 세션 데이터 저장에 유용 (보안적인 측면에서)
      자주 읽고 쓰는 경우는 ElastiCache가 비용 절약적이고 더 적합
      DynamoDB는 DB로의 사용과 지속적인 데이터 저장/조회, 내구성
      ElastiCache는 DB나 인메모리 캐시로 사용, 빠른 데이터 액세스
    • DynamoDB는 가용성이 매우 높다
      • 기본값으로 다수의 가용영역에 걸쳐 있다.
      • 읽기와 쓰기가 분리
      • DynamoDB는 키-값 테이블 외에도 ACID트랜잭션(SQL의 논리적인작업 단위)을 가질 수 있다.
    • DynamoDB 액셀러레이터(DAX 클러스터)
      DynamoDB와 호환되는 완성품 형태의 읽기 캐시를 만들 수 있다.(인메모리 캐시 사용)
    • 보안과 인증, 승인 등을 IAM을 통해 이루어진다.
    • DynamoDB Streams의 활성화(이벤트 처리)
      이벤트 트리거기능 제공
      • DB의 데이터 변경 스트림으로 Lambda 호출 하도록 통합 가능.
      • DynamoDB Streams에 전송하는 대신 Kinesis Data Streams에 전송할 수 있다.
        Kinesis Data Streams에 전송하면 Kinesis Data Firehose기능을 활용하거나 Kinesis Data Stream을 활용하는 어떤 종류의 통합을 활용할 수 있다.
        (ex) kinesis data streams에서 최장 1년 동안의 장기 보관
    • 글로벌 테이블 기능
      다수의 리전에 active-active 복제를 할 수 있어 어느 리전에서나 읽기/쓰기 가능.
    • 백업 옵션
      • 자동 백업(PITR(Point-in-time-recovery: 특정 시점으로 복구) 활성화 필요)
        최장 35일까지 언제든 테이블을 새로운 DynamoDB 테이블로 복구 가능
      • 온디맨드 백업
        백업을 장기간 보관
        이 또한 새로운 테이블로 복구된다.
    • PITR 기간(35일)안에 S3로 내보내기 기능으로 읽기 용량을 전혀 사용하지 않고도 DynamoDB 테이블을 S3로 내보낼 수 있다.
    • 쓰기 용량을 전혀 사용하지 않고도 S3로부터 새로운 테이블로 가져올 수도 있다.
    • (예제) 빠르게 스키마를 변경해야 하거나 유연한 타입의 DB 스키마가 필요하다면 DynamoDB이다.
    • 활용 사례: DB가 필요한 경우, 서버리스 애플리케이션 개발, 데이터가 작은 문서들, 분산형 서버리스 캐시가 필요한 경우

    • ------------------ DocumentDB -----------------
    • Aurora는 AWS를 통해 PostgreSQL/MySQL를 클라우드 네이티브 버전으로 사용하듯이 DocumentDB는 MongoDB의 Aurora버전이다.
    • DocumentDB: NoSQL DB, MongoDB에 기반한다
    • MongoDB는 JSON 데이터를 저장,쿼리,인덱스하기 위해 사용됨
    • Aurora와 비슷한 배포 개념을 DocumentDB와 가진다.
      -> 완전 관리되는 DB
      -> 유용성 높음
      -> 데이터는 3개의 가용 영역에 걸쳐 복제됨.
      -> DocumentDB의 스토리지는 자동으로 10GB까지 확장된다.
      -> DocumentDB는 초당 수백만개의 요청을 작업가능하게 확장되도록 설계
    • ------------ Amazon Keyspaces ------------
    • Keyspaces: AWS의 관리형 Apache Cassandra를 보조
      • Cassandra: 오픈 소스 NoSQL 분산 데이터베이스
    • Keyspaces를 사용해 클라우드에서 AWS가 Cassandra를 직접 관리해준다.
    • 서버리스 서비스
    • 높은 확장성과 가용성
    • AWS 완전 관리형
    • 애플리케이션 트래픽에 따라 테이블을 자동으로 확장/축소
    • 테이블 데이터는 여러 AZ에 걸쳐 3번 복제된다.
    • Keyspaces에서 쿼리를 수행하려면 Cassandra 쿼리 언어(CQL)을 사용하면 된다.
    • 어떤 규모에서도 지연 시간이 10ms 미만으로 짧다.
    • 초당 수천 건의 요청을 처리한다.
    • DynamoDB처럼 두 가지 용량 모드를 가진다.(기능은 동일)
      • 프로비저닝 모드
      • 온디맨드 모드
    • 암호화/백업 기능 제공
      최대 35일까지 지정 시간 복구 가능
    • 사용 사례
      • IoT 장치 정보
      • 시계열 데이터 저장
    • 키워드: Apache Cassandra = Amazon Keyspaces

  • 객체 스토어: S3, 백업 아카이브용 Glacier가 객체 스토어에 해당

    • -------------- S3(데이터베이스 관점) --------------
    • S3: 키-값으로 객체를 저장한다.
      -> 큰 객체 저장엔 유용하지만 여러 개의 작은 개체 저장은 좋지않음.
    • S3는 서버리스이므로 확장성이 무한하다.
    • 객체의 크기: 최대 5TB
    • 시간 경과에 따라 버저닝
    • 스토리지 계층 (계층 전환 원할 시 수녕 주기 정책을 사용하면 된다.)
      • S3 Standard
      • S3 Infrequent Access
      • S3 Intelligent
      • S3 Glacier
    • (중요) 기능: 버저닝, 암호화, 복제, 멀티 팩터 인증(MFA)삭제, 액세스 로그
    • 보안: IAM 보안과 S3 버킷에 버킷 정책을 생성 가능,
      ACL(접근 제어 목록) 기능,
      S3에 액세스 포인트 생성 가능,
      S3 Object Lambda로 객체를 애플리케이션에 전송하기전 수정 가능.
      CORS(교차 오리진 리소스 공유) 정책
      Glacier의 객체 잠금/볼트 잠금 개념 활용 가능. (*)
    • 암호화 메커니즘
      • SSE-S3
      • SSE-KMS: 자체 KMS 키를 가져올 수 있음.
      • SSE-C
      • 클라이언트 측 암호화
      • 전송 중 TLS 암호화
    • S3 버킷에 있는 모든 파일을 한 번에 작업하려면 S3 Batch를 사용해 배치 작업을 하면 된다.
      기존 S3 버킷의 비암호화 객체를 암호화하거나 S3 복제를 활성화하기 전에 기존 파일을 다른 버킷으로 복사할 때 유용
    • S3 인벤토리를 사용해 파일 목록을 생성 가능
    • S3의 향상된 성능
      • 멀티파트 업로드: 파일을 병렬식으로 업로드
      • S3 전송 가속화: S3 파일을 한 리전에서 다른 리전을오 더 빠르게 전송
      • S3 Select: S3에서 필요한 데이터만 검색 가능.
    • 자동화
      • S3 Event Notifications
        SNS, SQS, Lambda, EventBridge 인터페이스가 있어
        S3 버킷에서 새로운 객체가 생성되는 이벤트에 반응할 수 있다.
    • 사용 사례
      정적 파일, 큰 파일의 키-값 스토어 또는 웹사이트 호스팅
  • DB 웨어하우스: SQL 분석, 비즈니스 인텔리전스(BI)를 사용
    온라인 분석 처리(OLAP)유형의 DB인 Redshift, Athena, EMR

  • 검색 유형의 DB: 자유롭게 텍스트를 입력하거나 비정형 데이터 검색
    OpenSearch DB

  • 그래프: 데이터 세트 간 관계를 표시
    Amazon Neptune

    • ---------------- Neptune ----------------
    • Neptune: 완전 관리형 그래프 DB
    • 그래프 데이터 세트의 예시
      소셜 네트워크 같은것
    • 3개의 AZ에 걸쳐 최대 15개의 읽기 전용 복제본 복제
    • 고도로 연결된 데이터 세트를 가진 애플리케이션을 구축하고 실행하는데 사용(ex: 소셜 네트워크)
    • 복잡하고 어려운 쿼리를 그래프 데이터 세트 위에서 실행하도록 최적화되어 있어 DB에 수십억 개의 관계를 저장하고 밀리초 단위의 지연 시간으로 그래프를 쿼리할 수 있다.
    • 여러 AZ에 걸친 복제로 높은 가용성을 제공하고 지식 그래프를 저장하는데에도 적합하다.(위키피디아, 나무위키?)
      Ex) 위키피디아 DB는 모든 위키피디아 문서가 서로 연결되어 있는 지식 그래프이다.
    • 사기 탐지, 추천 엔진, 소셜 네트워킹등에 Neptune 사용.
    • Neptune Streams 활성화
      • NeptuneDB 내 그래프 데이터의 모든 변경 사항에 대해 실시간으로 정렬된 데이터 시퀸스를 제공
        즉, 애플리케이션이 AWS Neptune에 데이터를 쓰면 변경사항은 Neptune Streams에 즉시 반영되어 사용할 수 있다.
      • 해당 스트림에는 중복이 없고, Neptune 클러스터 내에서 발생하는 변경 사항이 엄격하게 순서대로 정렬된다.
        그렇기 때문에 그래프에는 권한이 있다.
        이 권한은 Neptune 클러스터뿐 아니라 Neptune 스트림에도 기록된다.
      • 이 스트림 데이터는 HTTP REST API를 통해 액세스할 수 있다.
        즉, Neptune Stream을 읽으려는 애플리케이션이 REST API를 사용해 모든 변경 사항을 실시간으로 가져올 수 있다.
    • Neptune Streams 활성화 사용사례
      • 그래프 데이터 내에서 일부 변경 사항이 발생할 때 알림을 보내기
      • 데이터를 다른 데이터 저장소와 동기화하는 작업
        ex) Neptune cluster 내에서 발생하는 변경 사항을 S3, OpenSearch, ElastiCache 등에 복제
      • Neptune cluster의 데이터를 여러 지역에 걸쳐 복제하려는 경우
        스트림의 모든 변경 사항을 확인하고 이를 대상 Neptune cluster에 다시 작성
  • 원장(장부?) DB: 트랜잭션 목록과 원장을 기록
    Amazon Quantum Ledger Database(QLDB)

    • ---------------- QLDB ---------------
    • 퀀텀 레저 데이터베이스(QLDB)
      • 원장: 금융 트랜잭션을 기록하는 장부
        따라서 QLDB는 금융 트랜잭션 원장을 갖게 된다.
    • 완전 관리형 데이터베이스
    • 서버리스
    • 높은 가용성: 3개의 가용 영역에 걸쳐 데이터를 복제
    • 애플리케이션 데이터의 시간에 따른 모든 변경 내역을 검토할때 사용
    • 불변 시스템: 이 DB에 쓰면 삭제/수정 불가능
      아무 것도 삭제되지 않았는지 확인하기 위해 암호화 서명을 하기도한다.
      • 동작 방식
        내부적으로 수정 시퀀스가 있는 저널이 있다.
        따라서 수정이 일어날 때마다, 암호화 해시가 계산된다.
        이는 아무 것도 삭제되거나 수정되지 않도록 보장한다.
    • DB를 사용하는 모든 사람이 확인할 수 있다.
    • 일반 원장 블록체인 프레임워크보다 2~3배 더 나은 성능
    • SQL을 사용해 데이터를 관리 가능
    • QLDB와 관리형 블록체인의 차이점
      • 탈중앙화: 중앙 기관이 없는 상태에서 의사 활동을 결정하는 체제
        QLDB는 탈중앙화 개념이 없다
        즉, Amazon 소융의 중앙 데이터베이스에서만 저널을 작성할 수 있다.
        이는 많은 금융 규제 규칙들을 따르는 것이다.

  • 시계열 DB: Amazon Timestream

    • -------------- Timestream --------------
    • Timestream: 시계열 DB
    • 완전 관리형
    • 빠르고 확장성 있는 서버리스 서비스
    • 시계열이란?
      시간 정보를 포함하는 포인트의 모음
    • 데이터베이스의 용량을 자동으로 확장, 축소할 수 있다.
    • 매일 수조 건의 이벤트를 저장 및 분석할 수 있다.
    • 시계열 데이터가 있을때는 관계형 DB보다 시계열 DB가 더 빠르고 저렴하다.
    • 쿼리를 예약하고 다중 척도 레코드를 얻을 수 있다.
    • SQL과 완벽히 호환
    • 최신 데이터는 메모리에 저장되고, 과거 데이터는 비용 효율적인 스토리지 계층에 저장된다.
    • 시계열 분석 기능
      거의 실시간으로 데이터를 분석하고 패턴을 찾을 수 있다.
    • 전송 중 데이터와 저장 데이터의 암호화를 지원
    • 사용 사례
      • IoT 애플리케이션
      • 운영 애플리케이션
      • 실시간 분석
      • 시계열 DB와 관련된 모든 곳에서 사용가능
    • 아키텍처
      • 데이터를 전달 받을 수 있는 것들
        1) AWS IoT에서 데이터를 받을 수 있고,
        2) Kinesis Data Streams의 데이터도 Lambda를 통해 받을 수 있다.
        3) Prometheus, telegraf와 통합 가능
        4) Apache Flink용 Kinesis Data Analytics는 Kinesis Data Stream과 Amazon MSK의 데이터를 Amazon Timestream에 전달한다.
      • Timestream과 연결 가능한 것은
        1) Amazon Quicksight: 대시보드를 빌드 할 수 있음.
        2) Amazon SageMaker: 머신러닝 할 수 있음.
        3) Grafana
        4) 데이터베이스에 표준 JDBC가 연결되 있어 JDBC, SQL과 호환 가능한 애플리케이션 모두 Amazon Timestream을 활용할 수 있다.

0개의 댓글

관련 채용 정보