Skip to content

Commit

Permalink
블로그 작성
Browse files Browse the repository at this point in the history
  • Loading branch information
Park-Chanyeong committed Dec 10, 2024
1 parent d2641ad commit 64edfc8
Show file tree
Hide file tree
Showing 11 changed files with 479 additions and 0 deletions.
162 changes: 162 additions & 0 deletions _posts/2024-12-10-aws_dynamodb (copy).md
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
---
layout: single
title: "Amazon DynamoDB Overview part2"
categories: AWS
tag: [blog, AWS]
search: true
typora-root-url: ../













---



**[**AWS**]**[**Amazon DynamoDB Overview Part 2**](https://park-chanyeong.github.io)
{: .notice--primary}



## DynamoDB Overview: Part 2

### Advanced DynamoDB Concepts

#### 1. **Transactions**
- DynamoDB는 **ACID 트랜잭션**을 지원하여 데이터 일관성과 무결성을 보장.
- 트랜잭션은 하나 이상의 테이블에서 여러 항목을 읽고 쓸 수 있음.
- 주요 API:
- `TransactWriteItems`: 여러 항목에 대한 원자적 쓰기.
- `TransactGetItems`: 여러 항목에 대한 일관된 읽기.
- 트랜잭션의 제한사항:
- 한 번의 트랜잭션으로 최대 25개의 항목 작업 가능.
- 4MB 크기 제한 존재.
- **사용 예시**:
- 은행 애플리케이션에서 계좌 이체 작업 (A 계좌에서 출금하고 B 계좌에 입금).
- 전자상거래 애플리케이션에서 주문 생성 시 재고 업데이트.

#### 2. **Partitioning and Performance**
- DynamoDB는 **Partition Key**를 기준으로 데이터를 파티셔닝하여 성능과 확장성을 보장.
- 파티션 설계:
- **균등한 분배**가 중요. 핫 파티션(hot partition) 문제를 피해야 함.
- 예시: 날짜를 Partition Key로 사용하지 말고, 사용자 ID와 결합하여 키를 다양화.
- 읽기/쓰기 처리량:
- 파티션당 최대 처리량 제한 있음. 균형 잡힌 키 설계가 필수.
- 예시: 글로벌 애플리케이션의 사용자 데이터를 지역별로 분배.

---

### DynamoDB Accelerator (DAX)

#### DAX 정의
- DAX는 DynamoDB의 인메모리 캐시 서비스로, 읽기 성능을 대폭 향상시키는 데 사용됨.
- **특징**:
- 최대 10배 빠른 읽기 성능 제공.
- 지연 시간이 마이크로초 단위로 감소.
- API 호출 수정 없이 기존 DynamoDB 애플리케이션과 통합 가능.

#### DAX의 작동 방식
- DynamoDB 요청이 먼저 DAX 캐시로 전달됨.
- 캐시에 데이터가 있을 경우 즉시 반환.
- 캐시에 없는 경우 DynamoDB에서 조회 후 DAX에 캐싱.
- **일관성 모델**:
- Eventual Consistency만 지원.

#### DAX 활용 사례
1. **읽기 집약적인 애플리케이션**:
- 예시: 인기 상품 정보를 빠르게 조회하는 전자상거래 사이트.
2. **리더보드 시스템**:
- Sort Key와 결합하여 빠른 순위 계산 제공.
- 예시: 모바일 게임에서 실시간 리더보드.
3. **IoT 데이터 조회**:
- 수백만 개의 IoT 장치 데이터를 빠르게 검색.
- 예시: 스마트 홈 장치 상태 조회.

#### DAX 구성
- DAX 클러스터는 다중 노드로 구성 가능 (최대 10개).
- **Primary Node**: 쓰기 작업 담당.
- **Replica Node**: 읽기 작업 담당.
- 노드 간 자동 복제 및 장애 복구 지원.

---

### Backup and Restore

#### 1. **On-Demand Backup**
- 데이터 손실에 대비하여 언제든지 테이블의 전체 백업 생성 가능.
- 백업 생성 중에도 읽기/쓰기 작업에 영향을 미치지 않음.
- **사용 예시**:
- 대규모 애플리케이션 업데이트 전 데이터 백업.

#### 2. **Point-in-Time Recovery (PITR)**
- 특정 시점으로 데이터 복구 가능.
- 최근 35일 내 데이터를 복원.
- **사용 예시**:
- 실수로 데이터가 삭제되거나 수정된 경우 이전 상태로 복구.

---

### Security in DynamoDB

#### 1. **Encryption**
- **DynamoDB는 기본적으로 데이터를 암호화**하여 저장.
- AWS Key Management Service (KMS)를 사용하여 고객 관리형 키로 데이터 암호화 가능.
- **사용 예시**:
- 민감한 사용자 데이터를 저장하는 애플리케이션.

#### 2. **Access Control**
- IAM 정책을 사용하여 사용자와 애플리케이션의 접근을 제어.
- Fine-grained access control:
- 특정 항목 수준에서 권한을 부여 가능.
- 예시: 특정 사용자만 자신의 데이터를 읽고 쓰도록 제한.

---

### Cross-Region Replication

- **Global Tables**: DynamoDB 테이블을 다중 리전에 걸쳐 복제하여 글로벌 애플리케이션 지원.
- **특징**:
- 모든 리전에서 읽기 및 쓰기 가능.
- 데이터 충돌 해결을 위한 최종 쓰기 승리 정책 적용.
- **사용 예시**:
- 글로벌 사용자 기반을 가진 소셜 미디어 애플리케이션.

---

### Advanced Data Modeling

#### 1. **One-to-Many Relationships**
- **테이블 설계**:
- Partition Key와 Sort Key를 조합하여 관계를 표현.
- 예시: 사용자 ID를 Partition Key로, 주문 ID를 Sort Key로 사용하여 주문 기록 저장.

#### 2. **Many-to-Many Relationships**
- **테이블 설계**:
- 보조 인덱스(GSI)를 활용하여 관계 탐색.
- 예시: 학생과 수업 관계에서 학생 ID와 수업 ID를 각각 GSI로 설정.

---

### DynamoDB의 확장 사례

#### 1. **IoT Data Storage**
- 수백만 개의 IoT 장치에서 데이터를 실시간으로 수집하고 저장.
- **예시**: 스마트 가전제품의 상태 데이터.

#### 2. **Real-Time Analytics**
- DynamoDB Streams와 Lambda를 사용하여 실시간 데이터 분석 파이프라인 구축.
- **예시**: 사용자 활동 데이터를 기반으로 추천 시스템 작동.

#### 3. **Gaming Leaderboards**
- Sort Key를 활용하여 순위를 저장하고 조회.
- **예시**: 게임에서 상위 100명의 플레이어를 실시간으로 표시.
- DAX와 결합하여 읽기 속도를 극대화하여 수천만 사용자 지원 가능.
145 changes: 145 additions & 0 deletions _posts/2024-12-10-aws_dynamodb.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
---
layout: single
title: "Amazon DynamoDB Overview part1"
categories: AWS
tag: [blog, AWS]
search: true
typora-root-url: ../













---



**[**AWS**]**[**Amazon DynamoDB Overview Part 1**](https://park-chanyeong.github.io)
{: .notice--primary}

## DynamoDB Overview

![image-20241211035030209](/images/2024-12-10-aws_dynamodb/image-20241211035030209.png)

### What is DynamoDB?
- **DynamoDB**: AWS의 완전 관리형 NoSQL 데이터베이스 서비스.
- 데이터는 고가용성을 위해 다중 AZ에 자동 복제됨.
- 완전 분산형 데이터베이스로 확장 가능한 워크로드를 처리 가능.
- 초당 수백만 건의 요청, 테라바이트급 스토리지를 지원.

#### 주요 특징
1. **스키마리스 데이터 구조**
- 고정된 스키마 없이 데이터를 저장하며, 각 항목의 속성은 필요에 따라 추가 가능.
- 예시: 온라인 쇼핑몰에서 상품 데이터가 각기 다른 속성을 가질 때 유용.
- 상품 A: {"이름": "노트북", "가격": 1000, "카테고리": "전자기기"}
- 상품 B: {"이름": "책", "저자": "홍길동", "카테고리": "서적"}
2. **빠른 성능**
- 낮은 지연 시간과 일관된 성능 제공.
- 예시: IoT 센서에서 실시간으로 수집된 데이터를 처리할 때.
3. **보안**
- IAM 통합으로 인증 및 권한 관리 가능.
- 예시: 특정 사용자 그룹에 읽기 전용 권한 제공.
4. **자동 확장성**
- 수요에 따라 용량 자동 조정.
- 예시: 블랙프라이데이와 같은 트래픽 급증 상황에서 유연한 확장 가능.

---

### DynamoDB 테이블 기본 구성
1. **테이블**:
- 테이블은 항목(row)과 속성(column)으로 구성.
- 테이블은 Primary Key로 항목을 고유하게 식별.
- 예시: "사용자 테이블"에 고유 사용자 ID를 Primary Key로 사용.

2. **Primary Key**:
- Partition Key (HASH Key): 고유 식별자를 사용하여 항목 분배.
- 예시: 사용자 ID, 주문 번호 등.
- ![image-20241211035129809](/images/2024-12-10-aws_dynamodb/image-20241211035129809.png)
- Partition Key + Sort Key (HASH + RANGE Key): 정렬 가능한 추가 키로 데이터 그룹화.
- 예시: "사용자 ID" + "주문 날짜" 조합으로 사용자별 주문 이력 관리.
- ![image-20241211035110509](/images/2024-12-10-aws_dynamodb/image-20241211035110509.png)

3. **속성**:
- 지원 데이터 타입:
- 스칼라 타입: String, Number, Binary, Boolean, Null.
- 문서 타입: List, Map.
- 집합 타입: String Set, Number Set, Binary Set.
- 항목 크기 제한: 400KB.
- 예시: 사용자 프로필 데이터에 다양한 데이터 타입 활용.
- {"이름": "홍길동", "나이": 25, "취미": ["축구", "독서"]}

---

### Capacity Modes
1. **프로비저닝 모드**:
- 읽기 및 쓰기 용량을 명시적으로 설정.
- **WCU (Write Capacity Unit)**: 1초 동안 1KB 데이터 쓰기 가능.
- **RCU (Read Capacity Unit)**: 1초 동안 Strongly Consistent Read 기준 4KB 데이터 읽기 가능.
- 예시: 매일 일정량의 데이터를 처리하는 로그 저장 시스템.
2. **온디맨드 모드**:
- 사용량에 따라 자동으로 처리 용량 조정.
- 초기 설정 없이 탄력적인 리소스 관리 가능.
- 예시: 트래픽 패턴이 예측 불가능한 스타트업의 애플리케이션.

---

### 데이터 읽기/쓰기
1. **데이터 읽기**
- **Strongly Consistent Read**: 항상 최신 데이터 보장.
- 예시: 금융 거래 시스템에서 실시간 계좌 잔액 확인.
- **Eventually Consistent Read**: 지연된 일관성, 더 높은 처리량 제공.
- 예시: 뉴스 애플리케이션에서 뉴스 댓글 로딩.
2. **데이터 쓰기**
- 항목이 Primary Key를 기준으로 테이블에 저장.
- 예시: 온라인 주문 처리 시스템에서 주문 데이터 저장.

---

### Indexes
1. **Global Secondary Index (GSI)**:
- 기존 Primary Key 외 다른 속성으로 데이터 조회 가능.
- 별도 용량(WCU/RCU)을 프로비저닝.
- 예시: 사용자 테이블에서 이메일 주소로 검색 가능하도록 설정.
2. **Local Secondary Index (LSI)**:
- 동일한 Partition Key를 공유하는 데이터 조회.
- 테이블 생성 시에만 추가 가능.
- 예시: 사용자 ID를 기준으로 최신 로그를 시간순으로 조회.

---

### DynamoDB Streams
- **DynamoDB Streams**: 항목의 생성, 수정, 삭제 작업을 스트림 데이터로 기록.
- 스트림 데이터는 24시간 동안 보존.
- **사용 사례**:
- 실시간 이벤트 처리 (예: 신규 사용자 환영 이메일).
- 데이터 분석.
- 교차 리전 복제.
- 예시: 채팅 애플리케이션에서 메시지 업데이트 이벤트를 실시간 반영.

---

### Time To Live (TTL)
- **TTL**: 지정된 시간 이후 데이터가 자동 삭제되도록 설정.
- 스토리지 최적화 및 규정 준수를 위해 유용.
- 예시: 30일이 지난 쿠폰 데이터를 자동 삭제.

---

### DynamoDB의 데이터 엔지니어링 활용 사례
1. **데이터 처리 파이프라인**:
- DynamoDB Streams를 활용하여 실시간 데이터 스트리밍 구축.
- 예시: IoT 센서 데이터가 DynamoDB로 입력되고 스트림을 통해 분석 시스템으로 전송.
2. **규모 확장이 필요한 애플리케이션**:
- IoT 데이터 수집 및 처리.
- 예시: 스마트 홈 시스템에서 수백만 개의 장치 상태를 저장.
3. **빅데이터 처리**:
- MapReduce 작업의 중간 상태 저장소로 사용.
- 예시: DynamoDB에 중간 데이터를 저장하고 Amazon EMR로 최종 분석 수행.
Loading

0 comments on commit 64edfc8

Please sign in to comment.