System DesignResilience시뮬레이션

Circuit Breaker 패턴

장애 전파를 막고 시스템 안정성을 높이는 Circuit Breaker와 Bulkhead 패턴을 학습합니다.

왜 알아야 하나요?

결제 서버가 느려지자 모든 서비스가 멈췄어요!

"결제 API 타임아웃이 30초인데, 스레드가 다 결제 대기 중이에요..."

장애 전파 (Cascading Failure)

한 서비스 장애가 연쇄적으로 전체 시스템을 마비시킵니다.

Circuit Breaker로 장애 격리!

실패가 반복되면 빠르게 차단하고, Fallback으로 대응합니다.

한눈에 보기: Circuit Breaker 상태

CLOSED
정상 - 요청 통과
실패 임계값 초과
OPEN
차단 - 즉시 실패
타임아웃 후
HALF-OPEN
테스트 - 일부만 통과

전기 차단기처럼 과부하 시 차단하고, 복구되면 다시 연결합니다.

핵심 개념

Circuit Breaker

실패가 임계값을 넘으면 차단

  1. CLOSED: 정상 상태, 요청 통과
  2. OPEN: 차단 상태, 즉시 실패 반환
  3. HALF-OPEN: 테스트 요청만 통과

장점: 빠른 실패로 리소스 보호

Bulkhead

서비스별로 리소스를 격리

선박의 격벽처럼, 한 구역 침수가 전체로 퍼지지 않음

예: 서비스 A, B, C 각각 스레드 풀 분리

Fallback

실패 시 대체 응답 반환

  • 캐시된 이전 데이터 반환
  • 기본값 반환
  • 대체 서비스 호출
장애 전파 방지

빠른 실패가 핵심

30초 대기 vs 즉시 실패:

1000 요청 × 30초 = 8시간 대기

1000 요청 × 즉시 = 0초 대기

Resilience4j 설정 예시

resilience4j.circuitbreaker:
  instances:
    paymentService:
      failureRateThreshold: 50        # 50% 실패시 OPEN
      waitDurationInOpenState: 10s    # OPEN 유지 시간
      permittedNumberOfCallsInHalfOpenState: 3
      slidingWindowSize: 10           # 최근 10개 요청 기준

resilience4j.bulkhead:
  instances:
    paymentService:
      maxConcurrentCalls: 10          # 최대 동시 요청
      maxWaitDuration: 500ms          # 대기 시간

직접 체험하기

외부 서비스 장애를 시뮬레이션하고, Circuit Breaker의 상태 변화를 관찰하세요.

Circuit Breaker 실습

Circuit Breaker는 전기 차단기처럼 동작합니다. 실패가 계속되면 "차단"하여 시스템 전체가 마비되는 것을 방지합니다.

외부 서비스 상태 설정

더 알아보기

실무 체크리스트

  • - 외부 API 호출에 Circuit Breaker 적용
  • - 적절한 Timeout + Circuit Breaker 조합
  • - Fallback 전략 수립 (캐시, 기본값)
  • - 모니터링 및 알림 설정

관련 라이브러리

  • - Resilience4j (권장)
  • - Spring Cloud Circuit Breaker
  • - Hystrix (deprecated)
  • - Sentinel (Alibaba)