System DesignResilience시뮬레이션
Circuit Breaker 패턴
장애 전파를 막고 시스템 안정성을 높이는 Circuit Breaker와 Bulkhead 패턴을 학습합니다.
왜 알아야 하나요?
결제 서버가 느려지자 모든 서비스가 멈췄어요!
"결제 API 타임아웃이 30초인데, 스레드가 다 결제 대기 중이에요..."
장애 전파 (Cascading Failure)
한 서비스 장애가 연쇄적으로 전체 시스템을 마비시킵니다.
Circuit Breaker로 장애 격리!
실패가 반복되면 빠르게 차단하고, Fallback으로 대응합니다.
한눈에 보기: Circuit Breaker 상태
CLOSED
정상 - 요청 통과
실패 임계값 초과
OPEN
차단 - 즉시 실패
타임아웃 후
HALF-OPEN
테스트 - 일부만 통과
전기 차단기처럼 과부하 시 차단하고, 복구되면 다시 연결합니다.
핵심 개념
Circuit Breaker
실패가 임계값을 넘으면 차단
- CLOSED: 정상 상태, 요청 통과
- OPEN: 차단 상태, 즉시 실패 반환
- 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)