37강
재해 복구
건물 하나가 통째로 사라져도 서비스가 계속되게 하는 일, 그리고 그 값을 정하는 일
먼저 보면 좋은 강의: 단일 장애점, 장애 조치(페일오버)
단계별로 보기
스페이스바로 재생/정지, 좌우 화살표로 단계 이동, R로 처음으로 돌아갑니다.
대기 중1 / 4 단계 — 한 지역 안에서는 완벽하다
서울 지역 안에 진입점도 있고 서버도 있습니다. 지역 안에서 보면 잘 이중화된 좋은 설계일 수 있습니다. 앞 강의에서 배운 것을 다 적용했습니다. 그런데 이 모든 것이 같은 건물 안에 있습니다.
이 강의를 마치면
- 지역 전체가 사라지는 고장이 부품 하나의 고장과 무엇이 다른지 설명한다.
- RTO(얼마나 빨리 돌아오나)와 RPO(얼마나 잃어도 되나)를 구분해 설명한다.
- 복구 전략의 등급과 비용이 맞바꿈 관계임을 설명한다.
- 한 지역이 사라져도 서비스가 유지되는 구성을 직접 만든다.
고장의 크기가 다르다
앞 강의들에서 서버 한 대가 죽는 상황을 다뤘습니다. 예비를 두고, 헬스체크로 알아채고, 옮겨 탔습니다. 잘 작동했습니다.
그런데 이런 고장은 어떨까요?
- 데이터센터에 불이 납니다.
- 지역 전체가 정전됩니다.
- 굴착기가 해저 케이블을 끊습니다.
- 클라우드 사업자의 한 지역이 통째로 몇 시간 멈춥니다.
이때는 그 안의 서버 전부가 동시에 죽습니다. 서버를 몇 대 뒀든, 로드밸런서를 몇 개 뒀든, 같은 건물 안에 있었다면 전부 같이 사라집니다.
32강에서 말한 상관 고장이 바로 이것입니다. 두 서버가 "같은 이유로 함께 죽을 수 있나?"라고 물었을 때, 같은 지역에 있다는 것이 가장 큰 공통 원인입니다.
지역 안에서 아무리 잘 이중화해도, 지역이 사라지면 그 노력이 전부 0이 됩니다. 재해 복구는 중복의 단위를 부품에서 지역으로 올리는 일입니다.
먼저 두 숫자를 정한다
여기서 흔한 실수가 있습니다. 곧바로 "그럼 다른 지역에도 서버를 두자"로 뛰어드는 것입니다. 그전에 답해야 할 질문 두 개가 있습니다.
이 두 질문은 기술 질문이 아닙니다. 사업 질문입니다.
RTO — 얼마나 빨리 돌아와야 하는가
복구 목표 시간. 재해가 나고부터 서비스가 다시 될 때까지 허용되는 시간입니다.
"당연히 빨라야죠"가 답이 아닙니다. "몇 시간 멈추면 회사가 얼마를 잃는가"를 계산해야 나오는 숫자입니다. 하루 매출이 1억이면 1시간 정지는 약 400만원입니다. 이 숫자와 대비 비용을 비교해서 정하는 것입니다.
RPO — 얼마나 잃어도 되는가
복구 목표 지점. 재해 시점 기준으로 잃어도 되는 데이터의 시간 폭입니다.
RPO 1시간이면, 재해 직전 1시간 동안의 데이터는 사라진다는 뜻입니다. 1시간마다 백업했으니 마지막 백업 이후 것은 없습니다.
이건 기술팀이 정할 수 없습니다. "주문 1시간어치가 사라져도 됩니까?" 이 질문에 답할 수 있는 사람은 사업 책임자뿐입니다. 그리고 대개 답은 업무마다 다릅니다. 결제 기록은 0이어야 하지만, 조회 로그는 하루도 괜찮습니다.
RPO 재해 RTO
│ │ │
─────┼────────────────────┼───────────────────────┼────>
마지막 안전 지점 쾅! 서비스 재개
└─── 이만큼 잃는다 ──┘└──── 이만큼 멈춘다 ───┘RPO는 과거를 보고, RTO는 미래를 봅니다. 둘은 별개이고 값도 따로 정합니다.
등급과 값
이 두 숫자가 정해지면 전략이 따라 나옵니다.
| 전략 | RTO | RPO | 대략의 비용 | 어떤 상태인가 |
|---|---|---|---|---|
| 백업만 | 수일 | 수시간 | 1x | 테이프를 꺼내 새로 만든다 |
| 파일럿 라이트 | 수시간 | 분 | 1.2x | 데이터만 복제. 서버는 꺼둔다 |
| 웜 스탠바이 | 수십 분 | 초 | 1.5x | 축소판이 돌고 있다. 키우면 된다 |
| 액티브-액티브 | 초 | ~0 | 2x 이상 | 양쪽 다 평소에 일한다 |
아래로 갈수록 빨라지고, 가파르게 비싸집니다. RTO를 몇 시간에서 몇 초로 줄이는 데 비용이 두 배가 됩니다.
그래서 "당연히 액티브-액티브죠"는 좋은 답이 아닙니다. 사내 게시판과 결제 시스템에 같은 돈을 쓰는 것은 낭비입니다. 업무별로 등급을 나누는 것이 진짜 설계입니다.
액티브-액티브가 주는 뜻밖의 이득
액티브-액티브에는 비용 말고 다른 이야기가 하나 있습니다.
평소에 두 지역 모두가 일합니다. 즉 매일 검증되고 있습니다.
이게 왜 중요할까요. 웜 스탠바이는 예비 지역이 평소에 논다는 뜻이고, 평소에 노는 것은 재해 때 작동하지 않습니다. 설정이 어긋나 있고, 버전이 다르고, 아무도 모르는 사이에 망가져 있습니다.
평소에 안 쓰는 예비는 재해 때도 안 됩니다. 액티브-액티브가 비싼 값을 하는 진짜 이유는 속도가 아니라 "작동한다는 것을 매일 확인하고 있다"는 점입니다.
이것이 재해 복구의 가장 중요한 실무 규칙으로 이어집니다. 훈련하지 않은 계획은 계획이 아닙니다. 문서상 RTO 4시간은 아무 의미가 없습니다. 실제로 지역을 꺼보고 재보기 전까지는 그냥 희망입니다.
물리 법칙은 못 이긴다
마지막으로, 지역을 나누면 피할 수 없는 대가가 있습니다. 거리입니다.
서울과 부산은 왕복 약 10밀리초, 서울과 미국 동부는 약 200밀리초입니다. 빛의 속도라 어쩔 수 없습니다.
RPO를 0으로 만들려면 두 지역에 동시에 기록하고 양쪽 확인을 받아야 합니다. 그러면 모든 쓰기에 왕복 시간이 더해집니다. 미국까지 복제하면 주문 한 건이 200밀리초 느려집니다.
RPO 0과 빠른 응답은 동시에 가질 수 없습니다. 대개는 조금 타협해서 RPO 몇 초를 받아들이고 비동기로 복제합니다. 그러면 재해 시 몇 초를 잃습니다.
이것이 재해 복구가 결국 경영 판단인 이유입니다. 기술은 선택지와 가격표를 내놓을 뿐이고, 무엇을 살지는 사업이 정합니다.
직접 해보세요
아래 과제는 한 지역에만 서비스가 있습니다. 그 지역이 통째로 사라집니다. 두 번째 지역을 만들어 서비스를 유지하세요.
이 강의가 단순화한 것
교육용 모형은 언제나 무언가를 생략합니다. 무엇을 생략했는지 아는 것도 학습의 일부입니다.
전제한 것
- 이 과제에서 관측되는 복구 시간과 유실량은 **시나리오 설정과 시뮬레이션 관측값**일 뿐, 실제 인프라의 RTO/RPO 보장이 아니다. 실제 RTO/RPO는 계약과 훈련으로 확인해야 하며, 어떤 시뮬레이터도 그것을 보장해 주지 않는다.
- 이 과제의 '지역 장애'는 그 지역의 진입점(로드밸런서)을 죽이는 것으로 표현한다. 실제 지역 장애는 그 안의 모든 것이 동시에 사라지는 것이며, 이 모형은 그 축소판이다.
- 지역 간 트래픽을 나눠주는 최상단 장치를 로드밸런서로 표현했다. 실제로는 DNS 기반 전역 부하 분산이나 애니캐스트가 이 역할을 하며, 동작 방식과 전환 시간이 다르다.
- 이 강의는 요청 경로의 이중화만 다룬다. 데이터 복제와 그에 따른 RPO는 본문에서 설명만 하고 시뮬레이션하지 않는다. 실제 재해 복구에서 어려운 쪽은 대부분 데이터다.
- 본문의 비용 배수(1x, 2x 등)와 RTO/RPO 등급표는 자릿수 감각을 주기 위한 근사이며, 특정 사업자의 가격이나 보장이 아니다.
다루지 않은 것
- 데이터 복제의 구체적 방식(동기·비동기·준동기)과 그에 따른 RPO 계산
- 지역 간 분단(split-brain)과 그때 어느 쪽을 살릴지 정하는 문제
- 장애 복구 후 원래 지역으로 되돌리는 절차(failback)와 데이터 재동기화
- DNS TTL이 실제 전환 시간에 미치는 영향
- 규제상 데이터가 특정 국가를 벗어날 수 없는 경우의 제약
더 읽을거리: AWS — Disaster Recovery Options in the Cloud · Google SRE Book — Reliable Product Launches
이제 직접 만들어 보세요
읽어서 아는 것과 만들어서 아는 것은 다릅니다. 컴포넌트를 배치하고 트래픽을 흘려서 실제로 동작하는지 확인해 보세요.
이 강의에 물어보기
하루 5번이 강의 본문만 근거로 답합니다. 강의에 없는 내용은 지어내지 않습니다.