복원력·장애 대응 설계: 망가져도 버티는 시스템
SPOF 식별부터 타임아웃·재시도·차단기까지 장애를 전제로 한 복원력 설계 원칙
Posted Updated
By okorion
복원력·장애 대응 설계: 망가져도 버티는 시스템
복원력 설계의 본질
결론: 복원력은 ‘장애를 막는 기술’이 아니라 ‘장애를 전제로 한 설계 선택’을 말로 설명하는 능력이다.
- 왜(문제): 분산 시스템에서 장애는 예외가 아니라 정상 상태다.
- 무엇(개념): 복원력은 실패를 격리·완화·회복하는 메커니즘의 조합이다.
- 어떻게(설계/선택): 실패 지점을 식별(SPOF) → 실패 유형 분류 → 대응 메커니즘 배치.
- 트레이드오프: 지연·중복 처리·비용 증가를 감수한다.
- 인터뷰 문장: “이 설계는 장애를 피하지 않고, 영향 범위를 제한합니다.”
SPOF 찾는 법
결론: SPOF는 ‘단일 인스턴스’가 아니라 ‘단일 의존 경로’다.
| 요소 | 흔한 SPOF | 완화 전략 |
|---|---|---|
| LB | 단일 LB | 이중화, 헬스체크 |
| DB | 단일 Primary | 리플리카, 자동 페일오버 |
| Cache | 단일 노드 | 샤딩/복제 |
| MQ | 단일 브로커 | 파티션/클러스터 |
| Storage | 단일 AZ | 멀티 AZ |
- 함정: 서버만 이중화하고 의존 서비스는 단일화.
체크리스트:
- 이 경로가 끊기면 전체가 멈추는가?
- 인터뷰 문장: “이 경로가 단절되면 쓰기만 영향을 받습니다.”
타임아웃·재시도·차단기의 이유
결론: 이 패턴들은 ‘느린 실패’를 빠른 실패로 바꾸기 위해 존재한다.
Timeout
- 왜: 무한 대기 차단
- 트레이드오프: 정상 요청도 실패 가능
- 문장: “대기 시간을 상한으로 제한합니다.”
Retry + Backoff
- 왜: 일시 장애 흡수
- 트레이드오프: 트래픽 증폭
- 문장: “지수 백오프로 재시도를 제한합니다.”
Circuit Breaker
- 왜: 연쇄 장애 방지
- 트레이드오프: 일시적 기능 차단
- 문장: “실패율이 임계치를 넘으면 차단합니다.”
Idempotency
- 왜: 중복 요청 안전화
- 트레이드오프: 상태 관리 비용
- 문장: “중복 요청은 동일 결과로 처리합니다.”
장애 유형 분류
결론: 장애 유형에 따라 대응이 달라진다.
| 유형 | 특징 | 대응 |
|---|---|---|
| 부분 장애 | 일부만 실패 | 격리/폴백 |
| 전체 장애 | 전면 중단 | DR 전환 |
| 느린 장애 | 타임아웃 증가 | 차단기 |
| 데이터 손상 | 정합성 붕괴 | 롤백/재처리 |
- 인터뷰 문장: “느린 장애가 가장 위험합니다.”
DR과 RPO/RTO 끌어내기
결론: DR은 기술 논의 전에 요구사항 질문이다.
질문 예시:
- “데이터는 최대 몇 분까지 유실 가능합니까(RPO)?”
- “서비스 복구는 몇 분 내여야 합니까(RTO)?”
- 트레이드오프: 비용 vs 복구 시간
- 문장: “RPO 0은 비용이 급증합니다.”
한 번의 장애를 두 번으로 만드는 실수
결론: 대응이 장애를 증폭시킨다.
- 무제한 재시도
- 동시 재시작
- 캐시 강제 퍼지
- 수동 데이터 수정
- 알림 폭주
- 교정: rate limit, 단계적 롤아웃, 자동화
- 문장: “자동화된 제한이 중요합니다.”
예시 1: 식당 예약(토이)
결론: 중복 예약은 허용 불가, 지연은 허용 가능.
- 실패: 피크 타임 중복 요청
- 선택: Idempotency 키 + DB 유니크 제약
- 버린 것: 처리 지연 최소화
- 문장: “중복은 막고, 느려도 됩니다.”
예시 2: 결제 승인(실무형)
결론: 정확성이 최우선이며, 부분 실패를 설계로 흡수한다.
- 실패: 승인 성공, 후처리 실패
- 선택: 승인/후처리 분리 + 재처리 큐
- 버린 것: 단일 트랜잭션 단순성
- 문장: “중복 결제는 절대 허용하지 않습니다.”
흔한 실수 5개 + 교정
- 고가용성만 언급 → 실패 시나리오 제시
- 재시도 남발 → 백오프/상한
- 차단기 생략 → 연쇄 장애 설명
- DR 수치 없음 → RPO/RTO 질문
- 중복 처리 무시 → Idempotency 적용
면접에서 바로 쓰는 답변 문장 템플릿 8개
- “이 지점이 SPOF입니다.”
- “느린 장애를 빠르게 실패시킵니다.”
- “재시도에는 상한을 둡니다.”
- “실패율 기준으로 차단합니다.”
- “중복 요청은 안전합니다.”
- “부분 장애는 격리합니다.”
- “RPO/RTO는 이 수치입니다.”
- “복구보다 영향 최소화를 우선합니다.”
핵심 체크리스트 12개
- SPOF 식별
- 실패 유형 분류
- 타임아웃 설정
- 재시도 정책
- 백오프 전략
- 차단기 기준
- Idempotency 범위
- 폴백 경로
- 데이터 정합성
- DR 전략
- RPO/RTO 수치
- 자동화 여부
장애 시나리오 질문 12개 + 모범 답변 핵심
- DB 다운 시? → 읽기/쓰기 분리
- 캐시 미스 폭주? → 요청 병합
- 느린 API? → 차단기
- 중복 요청? → Idempotency
- MQ 적체? → 백프레셔
- 리전 장애? → DR 전환
- 데이터 손상? → 롤백
- 부분 실패? → 보상 트랜잭션
- 타임아웃 값? → SLO 기준
- 재시도 횟수? → 제한
- 알림 기준? → 실패율
- 수동 개입? → 최소화
30분 복기 플랜(타이머 기준)
- 0–5분: SPOF 리스트
- 5–10분: 장애 유형 4종
- 10–15분: 타임아웃/재시도
- 15–20분: 차단기/Idempotency
- 20–25분: DR 질문 연습
- 25–30분: 결제 시나리오 설명
한 줄 요약
복원력 설계는 장애를 숨기는 게 아니라, 실패를 통제하는 선택이다.
This post is licensed under CC BY 4.0 by the author.
