Backend 개발자

AWS DynamoDB 교육 찍먹 후기 및 사용하는 키워드

by 앵과장 2023. 7. 30. 14:21
반응형

정말 오랜만에 오프라인으로 AWS강의를 듣게 되어 정리합니다
예전에는 워낙 사람들도 많고 강의 내용도 배움보다는 약파는 느낌이 많이 들었는데 상당히 진정성 있던 오프라인 강의라서 집중해서 듣게 되었던것 같네요

강의 해주신 AWS개발자님께 감사드리며 배운것 정리 합니다

해당 기술내용은 말그대로 찍먹으로 배운내용이라 이런것들이 있다 정도로만 작성하기에 많이 부족합니다

 

DynamoDB 사용목적

Aws 많은 영역에서 실제 dynamodb를 사용하는데 인스턴스 EC2 그외에도 많은 코어 영역에서 사용중이라고 합니다
해당 기능이 aws에서 오류가 발생하면 aws에 대부분 기능이 서비스 동작이 안될정도라고 예기 해주시는것 보면 그만큼 Dynamodb에 안정성 사용성에 있어서 자신이 있다는 예기인것 같습니다

Nosql 구조로 일반적인 관계형 DB가 아니기에 용도와 목적에 맞게 사용해야한다는 예기를 상당히 강조 하였습니다

제일 잘할수 있는 목적으로는 무한으로 누적시킬수 있는 데이터의 양과 일관성있는 응답속도 두가지에 최적화 되어 있고 나머지 기능에(집계, 정렬, 가공, 모니터링, 또다른 여러 다양한 처리)대한 용도가 필요하다면 다른 NoSQL 사용을 권고 한다는 느낌입니다

예시에서도 SNS (트위터, 인스타, threads)를 예시로 들었습니다 1억건 이상되는 데이터를 일관성있는 속도로 처리 하기에 최적에 db인것 같습니다

샤드 구성

Nosql 을 사용할때 각각의 데이터를 담고 있는 샤드(shard)용량이 상당히 중요한데 이유는 데이터를 검색하고 해당 데이터를 처리하기 위해서 권고하는 사이즈입니다
ELK스택에서 사용되는 엘라스틱서치의 경우는 샤드 1개당 2G가 정도가 검색 최적화라는 내용으로 운영한경험도 있고 실제 서비스에서도 cpu, mem 응답속도 모두 안정적인 데이터를 kibana에서 안정적 내용을 경험하였기에
Elk 구성및 증설

DynamoDB에서 권고하고있는 데이터 사이즈 1G입니다
그이상의 데이터가 누적되면 해당 샤드를 분할하고 정리가 필요합니다
이럴경우 Hot wram cold 라는 데이터 아키텍처 설계가 필요합니다


OLAP, NOSQL, OLTP 
  1. 관계형 OLAP (ROLAP): ROLAP는 데이터를 관계형 데이터베이스에 저장하고, 사용자의 질의에 대해 관계형 데이터베이스의 SQL 질의를 사용해 처리하는 OLAP의 한 유형입니다. ROLAP는 대용량 데이터를 처리하는 능력이 있지만, 복잡한 계산이나 고급 분석 기능에는 제한적일 수 있습니다.
  2. NoSQL: NoSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스가 제공하는 트랜잭션 지원, 일관성, 복잡한 질의 등의 기능을 제공하지 않는 데이터베이스를 일컫습니다. NoSQL은 분산처리, 빅데이터, 실시간 애플리케이션 등의 환경에서 사용하기 적합합니다.
  3. OLTP (On-Line Transaction Processing): OLTP는 현실 세계의 일상적인 트랜잭션을 컴퓨터 시스템으로 처리하는 것을 말합니다. OLTP 시스템은 실시간 트랜잭션 처리를 중점으로 하며, 대표적으로 금융거래, 예약시스템 등에서 사용됩니다.

 

GSI, LSI
  1. 글로벌 보조 색인 (Global Secondary Index, GSI): GSI는 기본 테이블과 다른 키 속성을 가진 보조 테이블입니다. GSI는 기본 테이블과 독립적으로 확장되므로, 읽기 및 쓰기 용량을 별도로 설정할 수 있습니다. GSI는 테이블의 모든 데이터를 스캔하지 않고도 특정 항목을 빠르게 찾을 수 있게 해줍니다. 이는 대량의 데이터를 다루는 큰 규모의 애플리케이션에서 매우 유용합니다.
  2. 로컬 보조 색인 (Local Secondary Index, LSI): LSI는 기본 테이블과 동일한 파티션 키를 가지지만, 다른 정렬 키를 가집니다. 이를 통해 동일한 파티션 키를 사용하면서도 다양한 정렬 키로 데이터를 쿼리할 수 있습니다. LSI는 테이블 생성 시에만 정의할 수 있으며, 추가적인 읽기 및 쓰기 용량을 설정할 수 없습니다. LSI의 읽기 및 쓰기 용량은 기본 테이블에 연결되어 있습니다.

 

테이블설계 고려해야하는사항
  1. 테이블 이름: 각 테이블은 고유한 이름을 가져야 합니다.
  2. 기본 키: 각 DynamoDB 테이블은 기본 키를 통해 데이터에 접근합니다. 기본 키는 두 가지 종류가 있습니다:
    • 파티션 키 (Hash Key): DynamoDB는 파티션 키의 값에 따라 데이터를 여러 파티션에 분산시킵니다.
    • 정렬 키 (Sort Key, Range Key): 선택적으로, 파티션 키와 함께 정렬 키를 사용하여 항목을 저장할 수 있습니다. 이 두 키를 합친 것이 고유하게 항목을 식별합니다.
  3. 보조 색인: 필요에 따라 GSI (Global Secondary Index) 또는 LSI (Local Secondary Index)를 테이블에 추가할 수 있습니다. 이들은 기본 키 외의 속성에 대한 검색을 가능하게 합니다.
  4. 조항 용량: 읽기와 쓰기 용량 단위를 설정합니다. 이는 초당 읽기 및 쓰기 작업 횟수를 나타냅니다. 이 값은 요구 사항에 따라 조정 가능하며, 비용과 성능에 영향을 줍니다.
  5. 항목: 테이블의 항목은 속성 집합으로 이루어져 있습니다. 각 항목에는 하나 이상의 속성이 있으며, 각 속성은 이름과 값의 쌍으로 이루어져 있습니다.
  6. 데이터 타입: DynamoDB는 숫자, 문자열, 바이너리와 같은 다양한 데이터 타입을 지원합니다. 또한, 복합 데이터 타입인 리스트와 맵도 지원합니다.

 

파티션키

ynamoDB에서 파티션 키는 데이터를 분산하고 저장하는 데 사용되므로, 조회 작업에서 가장 중요한 역할을 합니다.

테이블이나 보조 색인의 모든 항목은 파티션 키 값에 따라 내부적으로 분산 저장됩니다. 이는 조회 작업에서 특히 중요한데, 왜냐하면 파티션 키 값에 따라 필요한 데이터를 신속하게 찾아내기 때문입니다.

또한, 파티션 키는 데이터베이스의 성능과 용량을 최적화하는 데도 중요한 역할을 합니다. 좋은 파티션 키 설계는 테이블의 데이터를 균일하게 분산시켜 성능을 향상시키며, 읽기/쓰기 용량을 최대한 활용할 수 있게 합니다.

따라서, 파티션 키는 DynamoDB 조회에서 가장 우선적으로 고려해야 하는 요소입니다. 파티션 키를 효과적으로 선택하고 사용함으로써 DynamoDB의 강력한 성능과 확장성을 최대한 활용할 수 있습니다.