25. 장애 격리·복원력 패턴: 서킷 브레이커·벌크헤드·타임아웃·재시도·백오프·부하 차단

난이도 상 해설 보기 →
문제

문제 25 — 장애 격리·복원력 패턴: 서킷 브레이커·벌크헤드·타임아웃·재시도·백오프·부하 차단

배경

게임서버는 매치메이킹, 랭킹, 결제, 채팅, 인증 같은 다수의 내부·외부 의존 서비스를 호출한다. 그중 하나가 느려지거나 죽으면, 아무 대비가 없을 경우 그 지연이 호출 스레드/커넥션을 묶어 **연쇄 장애(cascading failure)**로 번진다. 아래 물음에 답하라.

질문

  1. 타임아웃이 왜 모든 복원력 설계의 출발점인가? "타임아웃 없는 호출"이 어떻게 스레드풀· 커넥션풀 고갈로 전체 장애를 만드는지 설명하라. 연결 타임아웃 vs 요청(read) 타임아웃, 전체 데드라인(deadline propagation)의 차이는?

  2. **재시도(retry)**의 올바른 사용과 함정을 설명하라: 어떤 오류가 재시도 가능한가(멱등성!), **지수 백오프 + 지터(jitter)**가 왜 필요한가, "재시도 폭풍(retry storm)"과 **재시도 예산 (retry budget)**은 무엇인가?

  3. **서킷 브레이커(circuit breaker)**의 세 상태(Closed/Open/Half-Open)와 전이 조건을 설명하라. 서킷 브레이커가 연쇄 장애를 어떻게 끊는가? 임계치·열림 시간·half-open 프로빙을 어떻게 튜닝하나? 서킷 브레이커와 재시도를 함께 쓸 때 순서/상호작용은?

  4. 벌크헤드(bulkhead) 격리를 설명하라. 의존성별로 스레드풀/커넥션풀/세마포어를 분리하면 왜 "한 의존성의 포화가 다른 기능까지 죽이는" 것을 막는가? 게임서버 예(결제 지연이 전투 처리를 막지 않게)로 설명하라.

  5. **부하 차단(load shedding)·우아한 열화(graceful degradation)·폴백(fallback)**을 설명하라. 과부하 시 무엇을 버리고 무엇을 지킬지(우선순위), 랭킹/추천이 죽었을 때 캐시된 값·기본값으로 대체하는 설계, 그리고 이 패턴들을 조합할 때의 전체 그림을 게임서버 관점에서 정리하라.

답안 작성
내 답안 · 자동 저장

직접 답을 작성한 뒤, 위 해설 보기에서 모범답안과 대조하세요.