Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브
DynamoDB Global Tables, Aurora Global Database 및 Route 53 지연 시간 라우팅을 사용해 두 개 이상의 리전에서 전체 프로덕션 용량을 동시에 운영합니다.
Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브은(는) CoddyKit의 무료 Cloud & IT Cert Prep 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Cloud & IT Cert Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
다중 사이트 활성-활성의 정의
다중 사이트 활성-활성은 재해 복구의 가장 높은 단계로, 애플리케이션이 두 개 이상의 AWS Region에서 동시에 전체 프로덕션 용량으로 실행되는 방식입니다. 대기 상태로 있다가 인계하는 활성-수동 방식과 달리, 활성-활성에서는 두 Region이 항상 실제 사용자 트래픽을 처리합니다. 한 Region에 장애가 발생하면 다른 Region이 장애 조치 지연 없이 즉시 트래픽의 100%를 수용합니다. 또한 이 패턴은 전 세계에 분산된 사용자에게 가장 가까운 Region에서 서비스를 제공하여 지연 시간도 줄여 줍니다.
# Active-Active traffic split (normal operation):
# us-east-1: serving ~50% of users (North America)
# eu-west-1: serving ~50% of users (Europe)
# Active-Active traffic split (us-east-1 failure):
# us-east-1: 0% (health check failed)
# eu-west-1: 100% (ASG scales up automatically)
# RTO: near-zero (DNS TTL propagation only)
# RPO: near-zero (with DynamoDB Global Tables)DynamoDB Global Tables 아키텍처
DynamoDB Global Tables는 활성-활성 아키텍처의 데이터 기반입니다. Global Tables는 다중 마스터, 다중 Region 복제를 지원하므로 모든 Region의 애플리케이션이 로컬 DynamoDB 테이블에서 읽기 및 쓰기를 수행할 수 있으며, 변경 사항은 약 1초 이내에 다른 모든 Region으로 복제됩니다. 테이블이 존재할 Region을 지정하여 Global Tables를 활성화합니다. 모든 복제, 충돌 해결(마지막 기록 우선), 장애 조치는 AWS가 자동으로 처리합니다.
# Create DynamoDB table and add global regions
aws dynamodb create-table \
--table-name UserSessions \
--attribute-definitions AttributeName=userId,AttributeType=S \
--key-schema AttributeName=userId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST \
--region us-east-1
# Add replica regions for Global Table
aws dynamodb update-table \
--table-name UserSessions \
--replica-updates '[{"Create":{"RegionName":"eu-west-1"}},{"Create":{"RegionName":"ap-southeast-1"}}]' \
--region us-east-1쓰기 활성 읽기를 위한 Aurora Global Database
Aurora Global Database는 활성-활성 읽기와 활성-수동 쓰기를 제공합니다. 모든 Secondary Region은 1초 미만의 복제 지연으로 읽기를 처리하지만, 쓰기는 Primary Region에서만 허용됩니다. 이는 전 세계에서 지연 시간이 낮은 읽기를 제공하면서 명확한 쓰기 Primary를 유지하려는 읽기 중심 애플리케이션에 적합합니다. Primary에 Region 장애가 발생하면 1분 이내에 Secondary를 Primary로 승격하여 쓰기 계층에서 낮은 RTO를 달성할 수 있습니다. 모든 Region에서 활성-활성 쓰기를 지원하는 DynamoDB Global Tables와 비교해 보십시오.
# Aurora Global Database read configuration
# Primary region (us-east-1): reads + writes
# Secondary region (eu-west-1): reads only
# ~100ms replication lag, serves EU users low-latency reads
# Application reads from local Aurora endpoint
# Application writes to primary region Aurora endpoint
# Java connection string with region routing:
# readEndpoint=eu-west-1.cluster-ro-xxx.aurora.amazonaws.com
# writeEndpoint=us-east-1.cluster-xxx.aurora.amazonaws.com활성-활성을 위한 Route 53 라우팅
Route 53은 다중 사이트 활성-활성 아키텍처의 트래픽을 지휘합니다. 지연 시간 기반 라우팅을 사용하여 각 사용자를 해당 위치에서 네트워크 지연 시간이 가장 낮은 Region으로 보냅니다. 각 Region의 레코드에 상태 확인을 연결하십시오. Region의 상태 확인이 실패하면 Route 53은 해당 Region을 DNS 응답에서 자동으로 제거하고 모든 트래픽을 남아 있는 정상 Region으로 보냅니다. 사용자가 정상 Region으로 장애 조치되는 데 걸리는 시간을 최소화하려면 DNS TTL을 60초 이하로 설정하십시오.
# Route 53 latency routing with health checks
aws route53 change-resource-record-sets \
--hosted-zone-id ZXXX \
--change-batch '{
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "api.example.com",
"Type": "A",
"Region": "us-east-1",
"SetIdentifier": "us-east-1",
"HealthCheckId": "hc-us-east-1",
"AliasTarget": {"DNSName": "alb-us-east-1.amazonaws.com", "EvaluateTargetHealth": false}
}
}
]
}'트래픽 수용을 위한 Auto Scaling
활성-활성 설정에서 한 Region에 장애가 발생하면 살아남은 Region은 평소 트래픽의 2배 이상을 처리해야 합니다. Auto Scaling Group에는 충분한 최대 용량과 빠르게 반응하는 확장 정책이 있어야 합니다. 대상별 ALB 요청 수를 기준으로 대상 추적 확장을 구성하면 트래픽이 두 배로 늘어날 때 ASG가 인스턴스를 자동으로 추가합니다. 사전 워밍업도 고려하십시오. 장애 조치 훈련 중 ASG가 얼마나 빠르게 확장되는지 관찰하고, RTO 목표 내에 필요한 용량에 도달할 수 있는지 확인하십시오.
# ASG target tracking for request count
aws autoscaling put-scaling-policy \
--auto-scaling-group-name app-asg-eu-west-1 \
--policy-name scale-on-requests \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 1000,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ALBRequestCountPerTarget",
"ResourceLabel": "app/my-alb/xxx/targetgroup/my-tg/yyy"
},
"ScaleInCooldown": 60,
"ScaleOutCooldown": 30
}'활성-활성에서의 세션 관리
단일 Region 아키텍처에서는 애플리케이션 서버에 사용자 세션을 로컬로 저장할 수 있습니다. 하지만 다중 Region 활성-활성 환경에서는 사용자가 후속 요청마다 Region 사이를 오갈 수 있어 서버 측 세션이 끊어집니다. 해결 방법은 다음과 같습니다. 1) 상태 비저장 세션 — 어떤 Region의 서버에서도 검증할 수 있는 서명된 JWT 또는 쿠키에 세션 데이터를 저장합니다. 2) 세션용 DynamoDB Global Tables — 모든 Region에서 밀리초 단위로 접근할 수 있도록 세션을 중앙에 저장합니다. 3) Global Datastore가 포함된 ElastiCache — 세션 저장을 위해 Region 간 Redis 복제를 사용합니다.
# DynamoDB Global Table for session storage
# Session item structure:
{
'sessionId': 'sess-abc123',
'userId': 'usr-456',
'data': {'cart': [...], 'preferences': {}},
'expiresAt': 1750000000,
'lastUpdatedRegion': 'us-east-1'
}
# Application reads from local region DynamoDB
# Writes replicate to all regions within ~1 second
# No sticky sessions needed on the ALB쓰기 충돌과 해결
다중 마스터 쓰기를 사용하는 활성-활성 환경에서 가장 큰 과제는 쓰기 충돌입니다. 서로 다른 Region의 두 사용자가 동시에 같은 레코드를 업데이트하면 어느 업데이트가 승리할까요? DynamoDB Global Tables는 쓰기 타임스탬프를 기준으로 마지막 기록 우선 방식을 사용합니다. 이는 대부분의 사용 사례에서 잘 작동하지만, 경쟁하는 업데이트로 인해 데이터가 손실될 수 있습니다(예: 두 사용자가 동시에 카운터를 증가시키는 경우). 조건부 쓰기를 사용하거나 Region별로 데이터 소유권을 분할하여 서로 다른 Region이 같은 항목에 동시에 쓰지 않도록 데이터 모델을 설계하십시오.
# Avoid conflicts with conditional writes
aws dynamodb update-item \
--table-name UserProfiles \
--key '{"userId":{"S":"usr-123"}}' \
--update-expression 'SET profileVersion = profileVersion + :inc, username = :name' \
--condition-expression 'profileVersion = :expectedVersion' \
--expression-attribute-values '{
":inc":{"N":"1"},
":name":{"S":"newname"},
":expectedVersion":{"N":"5"}
}'
# If another region already updated version, this fails gracefully활성-활성에서의 S3 복제
활성-활성 환경에서 객체 스토리지를 사용하려면 양방향 복제를 사용하는 S3 Cross-Region Replication을 사용하십시오(버전 관리가 활성화된 버킷에서 사용할 수 있습니다). 단방향 CRR과 달리 양방향 복제는 두 Region의 버킷을 동기화 상태로 유지합니다. 어느 Region에서든 작성된 객체는 다른 Region으로 자동 복제됩니다. 이는 사용자가 업로드한 파일을 로컬 Region의 S3 버킷에 쓰지만 해당 파일을 전 세계에서 사용할 수 있어야 하는 애플리케이션에 매우 중요합니다. 15분 이내에 객체의 99.99%가 복제되도록 보장하려면 S3 Replication Time Control (RTC)을 활성화하십시오.
# Bidirectional S3 replication
# Bucket A (us-east-1) replicates to Bucket B (eu-west-1)
# Bucket B (eu-west-1) replicates to Bucket A (us-east-1)
# Enable S3 RTC for guaranteed replication time
aws s3api put-bucket-replication \
--bucket us-east-1-uploads \
--replication-configuration '{
"Rules": [{
"Status": "Enabled",
"ReplicationTime": {"Status": "Enabled", "Time": {"Minutes": 15}},
"Metrics": {"Status": "Enabled", "EventThreshold": {"Minutes": 15}},
"Destination": {"Bucket": "arn:aws:s3:::eu-west-1-uploads"}
}]
}'다중 Region Origin을 사용하는 CloudFront
Origin Groups를 사용하는 CloudFront로 자동 장애 조치가 가능한 활성-활성 CDN을 생성하십시오. Primary Origin(ALB, us-east-1)과 Secondary Origin(ALB, eu-west-1)을 구성합니다. Primary가 5xx 오류를 반환하면 CloudFront가 자동으로 Secondary Origin으로 장애 조치합니다. S3에서 제공하는 정적 자산의 경우, 양방향 복제를 사용하는 여러 Region의 S3 버킷을 가리키도록 Origin Groups를 구성하십시오. 이렇게 하면 Route 53 활성-활성 라우팅 위에 CDN 수준의 복원력 계층이 추가됩니다.
# CloudFront origin group for multi-region failover
aws cloudfront create-distribution \
--distribution-config '{
"Origins": {
"Quantity": 2,
"Items": [
{"Id": "us-east-1", "DomainName": "alb-us-east-1.amazonaws.com"},
{"Id": "eu-west-1", "DomainName": "alb-eu-west-1.amazonaws.com"}
]
},
"OriginGroups": {
"Items": [{
"Id": "multi-region-group",
"FailoverCriteria": {"StatusCodes": {"Items": [500,502,503,504]}},
"Members": {"Items": [{"OriginId": "us-east-1"},{"OriginId": "eu-west-1"}]}
}]
}
}'활성-활성 상태 모니터링
활성-활성 아키텍처에서는 두 Region이 모두 정상이고 트래픽이 예상대로 균형 있게 분배되는지 확인하기 위해 강력한 모니터링이 필요합니다. 주요 지표는 Region별 Route 53 HealthCheckPercentageHealthy, Global Tables의 지연을 나타내는 DynamoDB ReplicationLatency, 트래픽 분배를 확인하기 위한 Region별 ALB RequestCount, 통합된 보기를 제공하는 CloudWatch 계정 간/Region 간 대시보드입니다. 복제 지연이 RPO 임계값을 초과하거나 트래픽 분배가 심하게 불균형해지면 경보를 설정하십시오.
# CloudWatch alarm for DynamoDB Global Table replication lag
aws cloudwatch put-metric-alarm \
--alarm-name 'GlobalTable-ReplicationLag-eu-west-1' \
--metric-name ReplicationLatency \
--namespace AWS/DynamoDB \
--dimensions Name=TableName,Value=UserSessions Name=ReceivingRegion,Value=eu-west-1 \
--period 60 \
--evaluation-periods 3 \
--threshold 5000 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:us-east-1:123:ops-alerts활성-활성이 적합한 경우
다음과 같은 경우 활성-활성이 적합합니다. 사용자가 전 세계에 분산되어 있어 단일 Region까지의 지연 시간을 허용할 수 없는 경우입니다. RTO가 거의 0이어야 하며 비즈니스가 몇 분의 중단조차 감내할 수 없는 경우입니다. 높은 쓰기 처리량을 위해 여러 Region에 쓰기를 분산해야 하는 경우입니다. 규제 요구 사항에 따라 국가 내 데이터 처리가 의무화된 경우입니다. 비용이 다른 DR 단계보다 상당히 높으므로, 비즈니스 요구 사항과 경제성이 명확하게 정당화할 때만 활성-활성을 선택하십시오. 많은 워크로드에서는 Warm Standby로 충분하며 비용도 훨씬 저렴합니다.
# Active-Active justification checklist:
# [ ] Users in 2+ continents with latency SLAs
# [ ] RTO requirement < 5 minutes
# [ ] Revenue impact of downtime justifies 2x+ cost
# [ ] Data must remain within specific regions (regulations)
# [ ] Write throughput exceeds single-region capacity
# If fewer than 2-3 boxes checked:
# Consider Warm Standby instead (lower cost, adequate RTO)빠른 확인
이 lesson에서 다룬 AWS Solutions Architect (SAA-C03) 개념을 얼마나 이해했는지 테스트해 보십시오.
Lesson 요약
이 lesson에서는 다음을 배웠습니다. DynamoDB Global Tables는 진정한 활성-활성을 위해 Region 간 다중 마스터 쓰기를 지원합니다. 상태 확인을 사용하는 Route 53 지연 시간 라우팅은 사용자를 가장 가까운 정상 Region으로 안내합니다. 또한 활성-활성에서는 세션 관리가 상태 비저장이거나 전 세계에 복제된 스토리지를 사용해야 합니다. 활성-활성은 거의 0에 가까운 RTO와 RPO를 제공하지만 비용이 크게 증가합니다. 다음 lesson에서는 Well-Architected Framework의 Operational Excellence 및 Security Pillars를 살펴봅니다.
자주 묻는 질문
“Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브” 강의는 무료인가요?
네 — “Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Cloud & IT Cert Prep 강의 전체를 잠금 해제할 수 있습니다. Cloud & IT Cert Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브”에서 뭘 배우나요?
DynamoDB Global Tables, Aurora Global Database 및 Route 53 지연 시간 라우팅을 사용해 두 개 이상의 리전에서 전체 프로덕션 용량을 동시에 운영합니다. 브라우저에서 직접 실행하는 실습 코드로 Cloud & IT Cert Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Cloud & IT Cert Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Cloud & IT Cert Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Cloud & IT Cert Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Cloud & IT Cert Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- RTO, RPO 및 DR 계층
- 백업 및 복원
- 파일럿 라이트 및 웜 대기
- Global Tables 및 Route 53을 사용한 다중 사이트 액티브-액티브