학습 목표

상황

결제 중개 서비스가 단일 리전에서 다중 가용 영역으로 운영되고 있습니다. 가용 영역 장애에는 대비되어 있지만, 리전 전체가 손상되는 경우에는 복구 계획이 없습니다. 경영진은 다음을 요구했습니다.

현재 구성은 이렇습니다.

현재 구성 요소와 리전 장애 시 상태
구성 요소 현재 리전 장애 시
웹·애플리케이션 Auto Scaling 그룹, 다중 가용 영역 전부 소실
관계형 데이터베이스 Amazon RDS Multi-AZ 대기 인스턴스도 같은 리전이라 함께 소실
주문 이력 Amazon DynamoDB 단일 리전 테이블 소실
영수증 파일 Amazon S3 버킷, 복제 없음 접근 불가
DNS Amazon Route 53, 단순 라우팅 계속 죽은 리전을 가리킨다
인프라 정의 일부만 CloudFormation, 나머지는 수동 다른 리전에 재구축하는 데 시간이 오래 걸린다

먼저 RTO와 RPO를 숫자로 만든다

RTO와 RPO의 정의와 이 케이스의 요구
지표 무엇을 묻는가 이 케이스의 요구 무엇을 결정하는가
RTO (Recovery Time Objective) 장애 발생부터 서비스 재개까지 허용되는 시간 수십 분 대상 리전에 무엇이 미리 서 있어야 하는가
RPO (Recovery Point Objective) 장애로 잃어도 되는 데이터의 시간 폭 결제 기록은 사실상 0에 가깝게 데이터를 어떤 방식으로 복제하는가

두 값은 서로 독립적으로 정해집니다. RPO는 데이터 복제 방식이 결정하고, RTO는 대상 리전의 준비 수준이 결정합니다. RPO를 0에 가깝게 만들면서 RTO는 몇 시간을 허용하는 설계도 가능하고, 그 반대도 가능합니다.

이 케이스에서는 요구가 갈립니다 — 결제 기록은 RPO가 매우 작아야 하지만, 서비스 재개는 수십 분을 허용합니다. 그래서 데이터는 상시 복제하되 컴퓨팅은 최소만 켜 두는 구성이 자연스럽게 나옵니다.

DR 4전략을 RTO와 RPO 두 축 위에 놓은 위치 비교. 왼쪽 아래로 갈수록 요구가 엄격해지고 평상시 켜 두어야 하는 구성 요소가 늘어납니다. 축은 순서 척도이며 특정 전략의 복구 시간을 숫자로 단정하지 않습니다

후보 설계안 비교 — DR 4전략

네 전략의 차이는 한 문장으로 요약됩니다 — 평상시에 대상 리전에서 무엇이 켜져 있는가.

DR 4전략 비교 — 평상시 대상 리전의 상태를 기준으로
항목 A · 백업과 복원 B · 파일럿 라이트 C · 웜 스탠바이 D · 다중 사이트 액티브-액티브
평상시 데이터 백업이 복사되어 있다 상시 복제된다 상시 복제된다 양방향 복제
평상시 컴퓨팅 없음 최소 코어만 (또는 꺼진 상태로 정의만) 축소된 규모로 실제 가동 운영 규모로 가동, 트래픽도 받는다
복구 시 할 일 인프라 생성 + 데이터 복원 + 전환 컴퓨팅 시작 + 확장 + 전환 확장 + 전환 전환만 (또는 자동)
RTO 성격 가장 길다 중간 짧다 가장 짧다
RPO 성격 백업 주기에 묶인다 복제 지연 수준 복제 지연 수준 복제 지연 수준
평상시 비용 가장 낮다 낮다 중간 가장 높다
이 케이스 판정 RTO 요구 미달 경계선 — 확장 시간이 변수 선택 비용 제약 위반
요구 RTO·RPO 에서 세 결정으로 내려가는 DR 판단 경로 맨 위에서 문제문이 제시한 RTO 와 RPO 요구를 읽는 것에서 시작해 세 개의 결정으로 왼쪽에서 오른쪽으로 내려갑니다. 첫 번째 결정은 데이터 복제 방식입니다. 이 결정을 정하는 것은 RPO 입니다. 스냅샷 복사는 RPO 가 길고, 비동기 복제는 짧으며, 양방향 복제는 거의 없습니다. 두 번째 결정은 DNS 전환 방식입니다. 사람이 수동으로 레코드를 바꾸면 전환 자체가 RTO 를 늘리고, Route 53 장애 조치 라우팅에 상태 확인을 연동하면 자동으로 넘어가며, 지연 시간이나 가중치 라우팅을 쓰면 평소에도 양쪽으로 트래픽이 갑니다. 세 번째 결정은 대상 리전에 얼마나 용량을 확보해 둘 것인가입니다. 아예 두지 않거나, 데이터베이스 같은 최소 코어만 상시로 두거나, 축소 스택이나 전체 규모를 상시로 띄워 둡니다. 아래 네 줄은 세 결정의 조합이 곧 DR 전략 이름이 된다는 것을 보여 줍니다. 복제 없음과 수동 전환과 용량 없음은 백업 및 복원이고, 비동기 복제와 자동 장애 조치와 최소 코어는 파일럿 라이트이며, 같은 조합에 축소 스택이면 웜 스탠바이, 양방향 복제와 지연 또는 가중치 라우팅과 전체 규모면 다중 사이트 액티브-액티브입니다. 요구 — 문제문에서 RTO 와 RPO 두 문장을 먼저 읽습니다 결정 1 — 데이터 복제 RPO 가 정합니다 스냅샷 복사 RPO 가 깁니다 비동기 복제 RPO 가 짧습니다 양방향 복제 RPO 가 거의 없습니다 결정 2 — DNS 전환 RTO 에 직접 더해집니다 수동 전환 사람 손이 필요합니다 Route 53 장애 조치 상태 확인 연동 지연 · 가중치 라우팅 평소에도 양쪽으로 결정 3 — 용량 확보 상시 비용이 여기서 납니다 두지 않음 필요할 때 만듭니다 최소 코어만 상시 데이터베이스 등 축소 또는 전 규모 스택 전체가 상시 세 결정의 조합이 곧 전략 이름입니다 스냅샷 복사 · 수동 전환 · 용량 없음 백업 및 복원 비동기 복제 · 장애 조치 라우팅 · 최소 코어 파일럿 라이트 비동기 복제 · 장애 조치 라우팅 · 축소 스택 상시 웜 스탠바이 양방향 복제 · 지연 또는 가중치 라우팅 · 전 규모 상시 다중 사이트 액티브-액티브 요구를 만족하는 것 가운데 가장 단순하고 저렴한 조합을 고릅니다
요구 RTO와 RPO에서 출발해 데이터 복제 방식 · DNS 전환 방식 · 대상 리전 용량 확보 수준 세 가지 결정으로 내려가는 판단 경로. 각 결정이 어떤 구성 요소를 대상 리전에 상시로 세우게 만드는지 표시합니다

선택과 근거

C · 웜 스탠바이를 고릅니다. RTO 요구(수십 분)는 인프라를 새로 만들 여유가 없다는 뜻이고, 비용 제약은 운영 규모를 그대로 두 벌 유지할 수 없다는 뜻입니다. 축소된 규모로 상시 가동하되 장애 시 확장하는 구성이 두 요구 사이에 정확히 놓입니다.

규정 제약(국내 리전)은 대상 리전 후보를 좁힙니다. 데이터가 국경을 넘어서는 안 된다면, 다른 나라의 리전은 아무리 가깝고 싸도 선택지가 아닙니다. 국내에 사용 가능한 리전이 하나뿐이라면 DR 전략 자체를 다시 논의해야 하며, 이 사실을 먼저 확인합니다.

결정 1 · 데이터 복제

데이터 계층별 리전 간 복제 수단과 RPO 성격
데이터 수단 RPO 성격 주의
관계형 데이터베이스 교차 리전 읽기 전용 복제본 비동기 — 복제 지연만큼 손실 가능 장애 시 수동 승격이 필요하다. 자동 장애 조치가 아니다
관계형(Aurora) 글로벌 데이터베이스 비동기지만 지연이 작다 보조 리전에서 쓰기가 필요하면 승격해야 한다
주문 이력(DynamoDB) 글로벌 테이블 다중 리전 복제. 리전 간 최종 일관성 같은 항목을 두 리전에서 동시에 쓰면 충돌 해결 규칙이 적용된다
영수증 파일(S3) 교차 리전 복제(CRR) 객체 단위 비동기 버전 관리가 필수이고, 규칙 생성 이전 객체는 자동 복제되지 않는다
머신 이미지·볼륨 AMI·스냅샷 리전 간 복사 복사 주기에 묶인다 암호화된 스냅샷은 대상 리전의 키 설정이 필요하다
백업 전반 AWS Backup의 리전 간 복사 백업 계획 주기 복원 절차를 실제로 시험해 두어야 한다
setup-crr.sh — 버전 관리 활성화와 교차 리전 복제 규칙 적용 (버킷 이름과 역할 이름은 예시입니다)
aws s3api put-bucket-versioning \
  --bucket example-receipts-primary \
  --versioning-configuration Status=Enabled

aws s3api put-bucket-versioning \
  --bucket example-receipts-dr \
  --versioning-configuration Status=Enabled

aws s3api put-bucket-replication \
  --bucket example-receipts-primary \
  --replication-configuration file://replication.json
replication.json — 전체 객체를 대상 버킷으로 복제하는 규칙
{
  "Role": "arn:aws:iam::123456789012:role/S3ReplicationRole",
  "Rules": [
    {
      "ID": "receipts-to-dr",
      "Status": "Enabled",
      "Priority": 1,
      "Filter": { "Prefix": "" },
      "DeleteMarkerReplication": { "Status": "Disabled" },
      "Destination": {
        "Bucket": "arn:aws:s3:::example-receipts-dr",
        "StorageClass": "STANDARD_IA"
      }
    }
  ]
}
cross-region-replica.sh — 교차 리전 읽기 전용 복제본 생성 (식별자와 리전은 예시입니다)
aws rds create-db-instance-read-replica \
  --db-instance-identifier payments-dr \
  --source-db-instance-identifier arn:aws:rds:ap-northeast-2:123456789012:db:payments-prod \
  --region us-west-2

# 장애 시에는 복제본을 독립 인스턴스로 승격합니다. 자동으로 일어나지 않습니다.
aws rds promote-read-replica \
  --db-instance-identifier payments-dr \
  --region us-west-2

위 예시의 리전 코드는 명령 형태를 보이기 위한 값입니다. 실제 대상 리전은 규정 제약(데이터 레지던시)을 먼저 확인해 정합니다.

결정 2 · 전환 경로

데이터가 대상 리전에 있어도 사용자를 그쪽으로 보내지 못하면 복구가 아닙니다. Amazon Route 53의 장애 조치 라우팅은 상태 확인 결과에 따라 기본(primary) 레코드에서 보조(secondary) 레코드로 응답을 바꿉니다.

전환 수단 비교
수단 전환 방식 전환 속도에 영향을 주는 것
Route 53 장애 조치 라우팅 상태 확인 실패 시 보조 레코드로 응답 상태 확인 주기와 임계 횟수, 레코드 TTL, 클라이언트 캐시
Route 53 가중치 기반 가중치를 조정해 트래픽을 옮긴다 수동 조작 시점, TTL
AWS Global Accelerator 고정 IP를 유지한 채 엔드포인트 그룹을 전환 DNS 캐시의 영향을 받지 않는다

결정 3 · 대상 리전의 용량

웜 스탠바이에서 가장 자주 간과되는 위험이 여기 있습니다. 장애가 나면 우리만 확장하는 것이 아닙니다. 같은 리전을 DR 대상으로 삼은 다른 조직들도 동시에 확장을 시도하므로, 필요한 만큼의 인스턴스를 즉시 얻지 못할 수 있습니다.

결정 4 · 인프라를 코드로

현재 인프라의 일부만 CloudFormation으로 정의되어 있다는 점은 그 자체로 위험입니다. 수동으로 만든 리소스는 대상 리전에 재현할 방법이 사람의 기억뿐입니다.

비용과 운영에 미치는 영향

웜 스탠바이가 만드는 비용·운영 항목 — 금액이 아니라 항목의 성격입니다
항목 성격 줄이는 방법
대상 리전의 상시 컴퓨팅 축소 규모만큼 지속 발생 규모를 최소로 유지하고 장애 시 확장에 의존
교차 리전 복제 데이터 전송 복제하는 양에 비례 복제 대상을 접두사·태그로 한정, 옮기기 전에 압축
대상 리전의 스토리지 사본 한 벌만큼 대상 버킷의 스토리지 클래스를 낮춰 설정
교차 리전 읽기 전용 복제본 인스턴스 한 벌 인스턴스 크기를 작게 두고 장애 시 확대(다만 RTO가 늘어난다)
DR 훈련 일회성 비용과 사람 시간 줄이지 않는다. 훈련하지 않은 계획은 계획이 아니다
운영 복잡도 두 리전의 구성이 어긋나면 전환이 실패한다 템플릿으로 정의하고 드리프트를 감지

설계 체크리스트

요구 정의

데이터

전환

훈련

관련 시험 포인트

문제문의 신호와 정답 방향
문제문의 신호 고르는 것 소거하는 것
리전 장애를 견뎌야 한다 교차 리전 복제 · 글로벌 테이블 · 교차 리전 복제본 Multi-AZ(같은 리전 안이다)
몇 시간의 중단 허용 + 비용 최소 백업과 복원 액티브-액티브
수 분 내 복구 + 데이터 손실 최소 웜 스탠바이 이상 백업과 복원
여러 리전에서 동시에 쓰기가 필요하다 DynamoDB 글로벌 테이블 교차 리전 읽기 전용 복제본(쓰기를 받지 않는다)
DNS 캐시 때문에 전환이 느리다 AWS Global Accelerator(고정 IP) TTL만 더 줄이는 안
기존 S3 객체도 다른 리전으로 옮겨야 한다 일괄 복제 작업 복제 규칙만 켜는 안(이전 객체는 복제되지 않는다)
데이터가 국경을 넘으면 안 된다 리전을 고정하고 복제 대상도 같은 관할로 제한 가장 싸거나 가까운 해외 리전을 고르는 안

이어서 볼 곳

공식 문서 출처