Post

복원력·장애 대응 설계: 망가져도 버티는 시스템

SPOF 식별부터 타임아웃·재시도·차단기까지 장애를 전제로 한 복원력 설계 원칙

복원력·장애 대응 설계: 망가져도 버티는 시스템

복원력 설계의 본질

결론: 복원력은 ‘장애를 막는 기술’이 아니라 ‘장애를 전제로 한 설계 선택’을 말로 설명하는 능력이다.

  • 왜(문제): 분산 시스템에서 장애는 예외가 아니라 정상 상태다.
  • 무엇(개념): 복원력은 실패를 격리·완화·회복하는 메커니즘의 조합이다.
  • 어떻게(설계/선택): 실패 지점을 식별(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은 비용이 급증합니다.”

한 번의 장애를 두 번으로 만드는 실수

결론: 대응이 장애를 증폭시킨다.

  1. 무제한 재시도
  2. 동시 재시작
  3. 캐시 강제 퍼지
  4. 수동 데이터 수정
  5. 알림 폭주
  • 교정: rate limit, 단계적 롤아웃, 자동화
  • 문장: “자동화된 제한이 중요합니다.”

예시 1: 식당 예약(토이)

결론: 중복 예약은 허용 불가, 지연은 허용 가능.

  • 실패: 피크 타임 중복 요청
  • 선택: Idempotency 키 + DB 유니크 제약
  • 버린 것: 처리 지연 최소화
  • 문장: “중복은 막고, 느려도 됩니다.”

예시 2: 결제 승인(실무형)

결론: 정확성이 최우선이며, 부분 실패를 설계로 흡수한다.

  • 실패: 승인 성공, 후처리 실패
  • 선택: 승인/후처리 분리 + 재처리 큐
  • 버린 것: 단일 트랜잭션 단순성
  • 문장: “중복 결제는 절대 허용하지 않습니다.”

흔한 실수 5개 + 교정

  1. 고가용성만 언급 → 실패 시나리오 제시
  2. 재시도 남발 → 백오프/상한
  3. 차단기 생략 → 연쇄 장애 설명
  4. DR 수치 없음 → RPO/RTO 질문
  5. 중복 처리 무시 → Idempotency 적용

면접에서 바로 쓰는 답변 문장 템플릿 8개

  1. “이 지점이 SPOF입니다.”
  2. “느린 장애를 빠르게 실패시킵니다.”
  3. “재시도에는 상한을 둡니다.”
  4. “실패율 기준으로 차단합니다.”
  5. “중복 요청은 안전합니다.”
  6. “부분 장애는 격리합니다.”
  7. “RPO/RTO는 이 수치입니다.”
  8. “복구보다 영향 최소화를 우선합니다.”

핵심 체크리스트 12개

  1. SPOF 식별
  2. 실패 유형 분류
  3. 타임아웃 설정
  4. 재시도 정책
  5. 백오프 전략
  6. 차단기 기준
  7. Idempotency 범위
  8. 폴백 경로
  9. 데이터 정합성
  10. DR 전략
  11. RPO/RTO 수치
  12. 자동화 여부

장애 시나리오 질문 12개 + 모범 답변 핵심

  1. DB 다운 시? → 읽기/쓰기 분리
  2. 캐시 미스 폭주? → 요청 병합
  3. 느린 API? → 차단기
  4. 중복 요청? → Idempotency
  5. MQ 적체? → 백프레셔
  6. 리전 장애? → DR 전환
  7. 데이터 손상? → 롤백
  8. 부분 실패? → 보상 트랜잭션
  9. 타임아웃 값? → SLO 기준
  10. 재시도 횟수? → 제한
  11. 알림 기준? → 실패율
  12. 수동 개입? → 최소화

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.