DynamoDB 글로벌 테이블: 멀티 리전 Active-Active 데이터베이스
AWS DynamoDB 글로벌 테이블로 멀티 리전 Active-Active 복제를 구성하는 방법을 설명합니다. 99.999% 가용성과 저지연 글로벌 서비스를 구축하세요.
관련 시험 도메인
- Design Resilient Architectures
- Design High-Performing Architectures
핵심 요약
DynamoDB 글로벌 테이블은 여러 AWS 리전에서 Active-Active 복제를 제공하여 어느 리전에서든 읽기/쓰기가 가능합니다. 단일 리전 테이블의 99.99%보다 높은 99.999% SLA를 제공하며, 전 세계 사용자에게 저지연 액세스를 보장합니다.
시험 팁
시험 빈출: "전 세계 사용자에게 저지연 데이터베이스 액세스를 제공하려면?" → DynamoDB 글로벌 테이블. "멀티 리전 Active-Active 데이터베이스?" → 글로벌 테이블. "99.999% 가용성?" → 글로벌 테이블.
1. 글로벌 테이블이란?
개념
DynamoDB 글로벌 테이블은 선택한 여러 AWS 리전에 테이블 복제본(Replica)을 자동으로 생성하고 동기화하는 완전관리형 솔루션입니다.
┌─────────────────────────────────────────────────────────┐
│ DynamoDB 글로벌 테이블 아키텍처 │
├─────────────────────────────────────────────────────────┤
│ │
│ 서울 리전 도쿄 리전 버지니아 │
│ ┌──────────┐ ┌──────────┐ ┌────────┐ │
│ │ Replica │ ◀─────▶ │ Replica │ ◀─────▶ │Replica │ │
│ │ (Active) │ 양방향 │ (Active) │ 양방향 │(Active)│ │
│ └────┬─────┘ 복제 └────┬─────┘ 복제 └───┬────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ 한국 사용자 일본 사용자 미국 사용자 │
│ (로컬 읽기/쓰기) (로컬 읽기/쓰기) (로컬 읽기/쓰기)│
│ │
│ 특징: 모든 복제본이 Active (읽기 + 쓰기 가능) │
└─────────────────────────────────────────────────────────┘
주요 특징
| 특징 | 설명 |
|---|---|
| Active-Active | 모든 리전에서 읽기/쓰기 가능 |
| 자동 복제 | 리전 간 데이터 자동 동기화 |
| 완전관리형 | 복제 인프라 관리 불필요 |
| 일관성 | 최종 일관성 (Eventual Consistency) |
| SLA | 99.999% 가용성 |
2. 왜 글로벌 테이블을 사용해야 할까?
단일 리전 vs 글로벌 테이블
| 특성 | 단일 리전 | 글로벌 테이블 |
|---|---|---|
| 가용성 SLA | 99.99% | 99.999% |
| 재해 복구 | 수동 백업/복원 | 자동 복제, 즉시 장애 조치 |
| 지연 시간 | 원격 사용자에게 높은 지연 | 로컬 리전 접근으로 저지연 |
| 쓰기 가능 리전 | 1개 | 모든 복제본 리전 |
사용 사례
┌─────────────────────────────────────────────────────────┐
│ 글로벌 테이블 사용 사례 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1️⃣ 글로벌 게임 서비스 │
│ - 전 세계 플레이어에게 저지연 게임 데이터 제공 │
│ - 어느 리전에서든 게임 상태 저장/로드 │
│ │
│ 2️⃣ 글로벌 이커머스 │
│ - 상품 카탈로그, 장바구니 데이터 │
│ - 지역별 재고 관리 │
│ │
│ 3️⃣ 금융 서비스 │
│ - 실시간 거래 데이터 │
│ - 리전 장애 시 즉시 장애 조치 │
│ │
│ 4️⃣ IoT 데이터 수집 │
│ - 전 세계 센서 데이터 수집 │
│ - 가까운 리전에서 데이터 기록 │
└─────────────────────────────────────────────────────────┘
3. 글로벌 테이블 설정
사전 요구 사항
| 요구 사항 | 설명 |
|---|---|
| 빈 테이블 | 새 글로벌 테이블은 빈 테이블에서 시작 권장 |
| DynamoDB Streams | 자동 활성화됨 |
| 동일한 테이블 이름 | 모든 리전에서 같은 이름 |
| 동일한 키 스키마 | 파티션 키, 정렬 키 동일 |
콘솔에서 설정
1. DynamoDB 콘솔 → 테이블 선택
2. 글로벌 테이블 탭 → 복제본 생성
3. 대상 리전 선택 (예: 도쿄, 버지니아)
4. 생성 클릭 → 자동 복제 시작
CLI로 설정
# 글로벌 테이블 복제본 추가
aws dynamodb update-table \
--table-name MyGlobalTable \
--replica-updates '[
{
"Create": {
"RegionName": "ap-northeast-1"
}
}
]'
기존 테이블을 글로벌 테이블로 변환
기존 데이터가 있는 테이블도 글로벌 테이블로 변환할 수 있습니다:
변환 프로세스:
1. 소스 테이블의 스냅샷 생성
2. 새 리전에 복제본 생성
3. 스냅샷으로 복제본 초기화
4. 실시간 복제 시작
⚠️ 변환 중에도 테이블 사용 가능 (다운타임 없음)
4. 데이터 일관성과 충돌 해결
최종 일관성 (Eventual Consistency)
글로벌 테이블은 최종 일관성 모델을 사용합니다. 한 리전에서 쓴 데이터가 다른 리전에 복제되기까지 약간의 지연이 있습니다.
┌─────────────────────────────────────────────────────────┐
│ 복제 지연 시간 │
├─────────────────────────────────────────────────────────┤
│ │
│ 서울에서 쓰기: T = 0ms │
│ │ │
│ ▼ │
│ 서울에서 읽기: T = 0ms (즉시) │
│ 도쿄에서 읽기: T = ~1초 (복제 후) │
│ │
│ 일반적인 복제 지연: 1초 미만 │
│ (네트워크 상황에 따라 다름) │
└─────────────────────────────────────────────────────────┘
충돌 해결: Last Writer Wins
동시에 여러 리전에서 같은 항목을 수정하면 충돌이 발생할 수 있습니다.
┌─────────────────────────────────────────────────────────┐
│ 충돌 해결: Last Writer Wins │
├─────────────────────────────────────────────────────────┤
│ │
│ 시간 서울 리전 도쿄 리전 │
│ ───────────────────────────────────────────────────── │
│ T1 Item.name = "A" (복제 대기) │
│ T2 (복제 대기) Item.name = "B" │
│ T3 복제 완료 복제 완료 │
│ └──────────────────────────────────────┘ │
│ 결과: "B" (T2 > T1) │
│ │
│ 규칙: 타임스탬프가 늦은 쓰기가 최종 값 │
└─────────────────────────────────────────────────────────┘
시험 팁
시험 포인트: 글로벌 테이블은 최종 일관성을 사용하며, 충돌 시 Last Writer Wins 방식으로 해결합니다. 강력한 일관성이 필요한 경우 단일 리전 사용을 고려하세요.
5. 다중 리전 강력한 일관성 (MRSC)
새로운 기능 (2024년 출시)
**Multi-Region Strong Consistency (MRSC)**는 글로벌 테이블에서 강력한 일관성을 제공하는 새로운 기능입니다.
MRSC 특징
| 특성 | 설명 |
|---|---|
| 일관성 | 리전 간 강력한 일관성 보장 |
| RPO | 제로 RPO (데이터 손실 없음) |
| 리전 수 | 최소 3개 리전 필요 |
| 구성 옵션 | 복제본 3개 또는 복제본 2개 + 감시자 1개 |
MRSC 아키텍처
┌─────────────────────────────────────────────────────────┐
│ MRSC 아키텍처 (3 리전) │
├─────────────────────────────────────────────────────────┤
│ │
│ 옵션 1: 복제본 3개 │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Replica │ ◀──▶│Replica │ ◀──▶│Replica │ │
│ │ 서울 │ │ 도쿄 │ │버지니아 │ │
│ └────────┘ └────────┘ └────────┘ │
│ │
│ 옵션 2: 복제본 2개 + 감시자 1개 │
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │Replica │ ◀──▶│Replica │ ◀──▶│Witness │ │
│ │ 서울 │ │ 도쿄 │ │(데이터X)│ │
│ └────────┘ └────────┘ └────────┘ │
│ │
│ 감시자: 변경 데이터만 보관, 전체 테이블 사본 없음 │
└─────────────────────────────────────────────────────────┘
6. 비용 고려 사항
비용 구성
| 항목 | 설명 |
|---|---|
| 읽기/쓰기 용량 | 각 리전별로 과금 |
| 복제된 쓰기 용량 | 복제로 인한 쓰기에 대해 과금 (rWCU) |
| 스토리지 | 각 리전별 저장 용량 과금 |
| 데이터 전송 | 리전 간 복제 데이터 전송 비용 |
비용 최적화 팁
1. 필요한 리전만 선택
└── 사용자가 없는 리전은 복제본 불필요
2. 온디맨드 vs 프로비저닝
└── 트래픽 패턴에 따라 선택
3. Auto Scaling 활성화
└── 각 리전별 독립적 스케일링
4. 최근 요금 인하 (최대 67%)
└── 글로벌 테이블 비용 대폭 절감됨
7. 설계 모범 사례
파티션 키 설계
글로벌 테이블에서도 파티션 키 설계가 중요합니다:
좋은 파티션 키:
├── 고유성 높은 값 (UserID, SessionID)
├── 균등한 데이터 분포
└── 핫 파티션 방지
피해야 할 패턴:
├── 리전 코드를 파티션 키로 사용 (불균등 분포)
├── 날짜만 사용 (핫 파티션)
└── 순차적 값 (쓰기 집중)
애플리케이션 설계
┌─────────────────────────────────────────────────────────┐
│ 애플리케이션 설계 권장 사항 │
├─────────────────────────────────────────────────────────┤
│ │
│ 1. 로컬 리전 접근 │
│ └── 사용자와 가까운 리전의 복제본 사용 │
│ │
│ 2. 충돌 최소화 │
│ └── 같은 항목을 여러 리전에서 동시 수정 피하기 │
│ └── 사용자별 리전 할당 고려 │
│ │
│ 3. 최종 일관성 고려 │
│ └── 복제 지연을 감안한 로직 설계 │
│ └── 읽기 후 쓰기 패턴 주의 │
│ │
│ 4. 장애 조치 테스트 │
│ └── 정기적인 리전 장애 조치 테스트 │
└─────────────────────────────────────────────────────────┘
8. 글로벌 테이블 vs 다른 복제 옵션
비교표
| 특성 | 글로벌 테이블 | DynamoDB Streams + Lambda | 수동 복제 |
|---|---|---|---|
| 관리 | 완전관리형 | 반자동 | 수동 |
| Active-Active | ✅ | 가능 (복잡) | 가능 (매우 복잡) |
| 충돌 해결 | 자동 | 수동 구현 필요 | 수동 구현 필요 |
| 지연 시간 | ~1초 미만 | 수초 | 가변적 |
| 비용 | rWCU 과금 | Lambda + 전송 비용 | 가변적 |
시험 출제 포인트
자주 나오는 문제 유형
-
시나리오 기반 선택
- "전 세계 사용자에게 저지연 데이터베이스?" → 글로벌 테이블
- "99.999% 가용성 필요?" → 글로벌 테이블
- "멀티 리전 Active-Active 쓰기?" → 글로벌 테이블
-
일관성 관련
- "글로벌 테이블의 일관성 모델?" → 최종 일관성 (기본)
- "충돌 해결 방식?" → Last Writer Wins
-
설정 관련
- "글로벌 테이블 변환 시 다운타임?" → 없음
- "DynamoDB Streams 필요?" → 자동 활성화됨
시험 팁
핵심 암기:
- 글로벌 테이블 = Active-Active 멀티 리전
- 가용성 SLA = 99.999% (단일 리전: 99.99%)
- 일관성 = 최종 일관성 (기본)
- 충돌 해결 = Last Writer Wins
FAQ
Q1: 글로벌 테이블은 읽기 전용 복제본인가요?
아니요. 글로벌 테이블의 모든 복제본은 읽기와 쓰기 모두 가능합니다(Active-Active). RDS의 읽기 전용 복제본과 다릅니다.
Q2: 복제 지연 시간은 얼마나 되나요?
일반적으로 1초 미만입니다. 하지만 네트워크 상황, 데이터 크기 등에 따라 달라질 수 있습니다.
Q3: 글로벌 테이블에서 특정 리전만 쓰기를 허용할 수 있나요?
DynamoDB 자체에서는 지원하지 않습니다. 애플리케이션 레벨에서 Route 53 등을 사용하여 특정 리전으로만 쓰기 트래픽을 라우팅할 수 있습니다.
Q4: 기존 데이터가 있는 테이블도 글로벌 테이블로 변환할 수 있나요?
예. 다운타임 없이 기존 테이블을 글로벌 테이블로 변환할 수 있습니다. DynamoDB가 자동으로 스냅샷을 생성하고 새 복제본을 초기화합니다.
Q5: 글로벌 테이블에서 GSI도 복제되나요?
예. **Global Secondary Index(GSI)**도 모든 복제본에 자동으로 생성되고 동기화됩니다.
마무리
DynamoDB 글로벌 테이블은 글로벌 규모의 Active-Active 데이터베이스가 필요할 때 최적의 선택입니다:
- 99.999% 가용성으로 최고 수준의 복원력
- 저지연 로컬 리전 접근
- 완전관리형으로 운영 부담 최소화
시험에서는 "멀티 리전 Active-Active", "글로벌 저지연 데이터베이스"라는 키워드가 나오면 글로벌 테이블을 떠올리세요.