-
Notifications
You must be signed in to change notification settings - Fork 25.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
d2641ad
commit 64edfc8
Showing
11 changed files
with
479 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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와 결합하여 읽기 속도를 극대화하여 수천만 사용자 지원 가능. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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로 최종 분석 수행. |
Oops, something went wrong.