본문 바로가기
Infra2026년 9월 16일8분 읽기

복구 불가를 만들지 않는 법 — RPO·RTO부터 복구 리허설까지

YS
김영삼
조회 187
복구 불가를 만들지 않는 법 — RPO·RTO부터 복구 리허설까지

재해 복구(DR) 설계는 두 숫자에서 시작한다. RPO(Recovery Point Objective)는 "얼마만큼의 데이터를 잃어도 되는가", RTO(Recovery Time Objective)는 "얼마 만에 복구해야 하는가"다. 이 둘이 정해지지 않으면 나머지 설계는 전부 감으로 하게 된다.

그리고 반드시 구분해야 할 것이 하나 더 있다. 복제는 가용성 장치이고 백업은 복구 장치다. 복제는 잘못된 삭제도 그대로 복제한다. 둘을 같은 것으로 취급하는 순간 방어선이 하나로 줄어든다.

백업 이야기를 할 때 나는 항상 같은 질문부터 한다. "마지막으로 복구를 해 본 게 언제인가요?" 대부분 대답이 흐려진다. 백업 작업이 성공했다는 로그는 매일 쌓이는데, 그 백업에서 실제로 서비스를 되살려 본 적은 없는 경우가 많다. 검증되지 않은 백업은 백업이 아니라 희망이다.

RPO·RTO를 정하는 법

전사에 하나의 값을 정하려 하면 합의가 안 된다. 데이터와 시스템을 등급으로 나눠 각각 정하는 게 현실적이다.

등급예시RPORTO
치명결제·주문 원장, 회원 인증수 분 이내1시간 이내
중요서비스 콘텐츠, 설정, 이력1시간수 시간
일반로그, 분석 데이터1일1일
재생성 가능캐시, 썸네일, 파생 데이터해당 없음재생성 시간
비용은 여기서 결정된다 RPO를 분 단위로 만들면 지속적 복제가 필요하고, RTO를 1시간으로 만들려면 대기 환경을 미리 띄워 둬야 한다. 둘 다 돈이 든다. 그래서 등급 구분이 중요하다. 모든 데이터를 최고 등급으로 다루면 예산이 먼저 죽는다.

복제와 백업의 차이

수단막아 주는 것막지 못하는 것
같은 리전 다중 AZ 복제단일 데이터센터 장애리전 단위 사건, 논리적 삭제
크로스 리전 복제리전 단위 사건실수·악의적 삭제(그대로 복제됨)
스냅샷실수 삭제, 인스턴스 손실스냅샷이 같은 계정·리전에만 있으면 함께 잃음
불변(immutable) 백업랜섬웨어, 계정 탈취 후 삭제보관 기간 이후의 손실
오프라인·별도 계정 보관광범위 침해복구 절차를 모를 때

마지막 줄이 농담이 아니다. 실제 사고에서 가장 흔한 실패는 백업이 없어서가 아니라, 복구 절차를 아는 사람이 없어서 시간이 흘러가는 경우다.

3-2-1 규칙의 현대적 해석

고전적인 3-2-1 규칙은 "복사본 3개, 매체 2종류, 오프사이트 1개"다. 클라우드 시대에는 이렇게 읽는 게 실용적이다.

1
복사본 3개
운영 데이터 + 자동 백업 + 장기 보관본.
2
서로 다른 실패 도메인 2개
다른 리전, 또는 다른 클라우드/온프레미스. "같은 계정 다른 버킷"은 실패 도메인이 다르지 않다.
3
권한 경계 밖 1개
계정이 탈취돼도 지울 수 없는 곳. 별도 계정, 불변 저장소, 쓰기 후 변경 불가 설정.
4
검증 0회 금지
복원 리허설이 없으면 위 세 가지가 모두 무의미하다.
# 크로스 계정·크로스 리전 백업의 최소 형태 (개념)
# 1) 스냅샷 생성 (운영 계정)
aws rds create-db-snapshot --db-instance-identifier prod \
  --db-snapshot-identifier prod-$(date +%Y%m%d)

# 2) 다른 리전으로 복사
aws rds copy-db-snapshot \
  --source-db-snapshot-identifier arn:aws:rds:ap-northeast-2:111:snapshot:prod-20260916 \
  --target-db-snapshot-identifier prod-20260916-dr \
  --source-region ap-northeast-2 --region ap-southeast-1

# 3) 별도 백업 계정으로 공유 (운영 계정이 털려도 남도록)
aws rds modify-db-snapshot-attribute \
  --db-snapshot-identifier prod-20260916-dr \
  --attribute-name restore --values-to-add 222222222222

# 4) 객체 스토리지는 버전 관리 + 객체 잠금(보존 모드)으로 불변성 확보

데이터만으로는 못 뜬다

복구 계획에서 자주 빠지는 것들이 있다. 데이터베이스를 되살려도 서비스는 안 뜬다.

데이터 외 복구 대상
인프라 정의(IaC) — 네트워크·보안그룹·로드밸런서 구성
시크릿과 인증서 — 어디에 보관돼 있고 누가 접근할 수 있는가
DNS 레코드와 TTL — 전환 속도를 좌우한다 (평소 TTL을 짧게 유지)
컨테이너 이미지·아티팩트 — 레지스트리가 같은 리전에만 있지 않은가
외부 연동 설정 — 결제·메일·SMS 사업자의 IP 허용 목록
운영 문서와 접근 권한 — 문서가 복구 대상 시스템 안에 있지 않은가
자주 나오는 함정 장애 대응 문서를 사내 위키에 두었는데 그 위키가 같은 인프라에 있는 경우. 상태 페이지가 장애 대상과 같은 리전에 있는 경우. 둘 다 실제로 반복해서 일어난다.

복구 리허설 — 실제로 하는 법

리허설은 거창할 필요 없다. 핵심은 끝까지 가 보는 것이다. 스냅샷에서 인스턴스를 띄우는 것까지가 아니라, 애플리케이션을 연결해 쿼리가 나오는 것까지.

1
범위 정하기
이번 분기는 "주문 DB 복구"만. 전체를 한 번에 하려 하면 아무것도 못 한다.
2
시나리오 선언
"프로덕션 DB가 1시간 전 상태로만 존재한다고 가정한다."
3
시계 시작
실제 소요 시간을 잰다. 이 값이 진짜 RTO다.
4
복구 수행
문서를 보며 진행하되, 문서에 없는 단계가 나오면 즉시 기록한다.
5
검증
애플리케이션 연결, 주요 쿼리 실행, 데이터 정합성 표본 확인.
6
기록과 개선
소요 시간, 막힌 지점, 문서 갱신 사항을 남긴다. 다음 리허설의 출발점이 된다.

첫 리허설에서는 대개 문서가 틀렸다는 걸 발견한다. 그게 리허설의 목적이다. 사고 당일에 발견하는 것보다 백 배 낫다.

실전에서 자주 나오는 질문들

현실적인 타협
  • 치명 데이터만 크로스 리전 — 전부 하면 비용이 감당 안 된다
  • 대기 환경은 축소 구성으로 — 필요 시 확장
  • 로그·분석 데이터는 RPO를 길게
  • 파생 데이터는 재생성으로 대체
타협하면 안 되는 것
  • 복구 절차 문서화
  • 정기 복구 리허설
  • 백업의 권한 경계 분리
  • 복구 책임자 지정(휴가·퇴사 대비 2인 이상)

자주 묻는 질문

RPO와 RTO는 어떻게 정하나요?

데이터와 시스템을 등급으로 나눠 각각 정하는 것이 현실적입니다. 결제·인증 같은 치명 등급은 분 단위 RPO와 시간 단위 RTO가 필요하고, 로그나 분석 데이터는 훨씬 느슨해도 됩니다. 전사 단일 값을 정하려 하면 비용이 감당되지 않습니다.

멀티 AZ 구성이면 백업은 필요 없나요?

필요합니다. 복제는 가용성을 위한 장치라 잘못된 삭제나 데이터 손상도 그대로 복제합니다. 또한 리전 단위 사건에는 같은 리전의 복제본이 함께 영향을 받으므로, 별도 백업과 다른 실패 도메인이 필요합니다.

백업을 어디에 두어야 안전한가요?

서로 다른 실패 도메인(다른 리전, 가능하면 다른 계정)에 두고, 최소 하나는 권한 경계 밖에 불변 형태로 보관하세요. 계정이 탈취돼도 지울 수 없어야 랜섬웨어와 내부자 위험에 대응할 수 있습니다.

복구 리허설은 얼마나 자주 해야 하나요?

핵심 시스템은 분기 1회를 권합니다. 범위를 좁혀 한 시스템씩 돌아가며 수행하고, 소요 시간을 측정해 RTO 수치를 갱신하세요. 리허설에서 문서의 오류를 발견하는 것이 가장 큰 수확입니다.

데이터 외에 무엇을 복구 계획에 넣어야 하나요?

인프라 정의(IaC), 시크릿과 인증서, DNS 설정, 컨테이너 이미지, 외부 연동 설정, 그리고 운영 문서입니다. 특히 장애 대응 문서가 복구 대상 시스템 안에 있으면 사고 당시에 열 수 없으니 별도 위치에 두세요.

비용을 줄이면서 DR을 갖추려면요?

치명 등급 데이터만 크로스 리전으로 보호하고, 대기 환경은 축소 구성으로 두었다가 필요 시 확장하는 방식이 효율적입니다. 파생 데이터는 백업 대신 재생성으로 대체하고, 어떤 데이터가 소실 대상인지 문서로 남겨 승인받아 두세요.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록