DevOps
Circuit Breaker
다른 이름: 서킷 브레이커
정의
장애가 잦은 외부 서비스 호출을 일시적으로 차단해 장애 전파를 막는 마이크로서비스 회복탄력성 패턴. 실패율이 임계치를 넘으면 Open 상태로 전환해 즉시 실패를 반환하고, 일정 시간 후 Half-Open으로 일부 요청만 흘려보내 정상화 여부를 확인한 뒤 Closed로 복귀
상세 설명
기술 스펙
- Closed: 정상 상태, 모든 요청을 실제로 호출
- Open: 임계치 초과 시 요청을 즉시 실패 처리(Fail Fast), 호출 자체를 하지 않음
- Half-Open: 타임아웃 후 일부 요청만 통과시켜 복구 여부 테스트
- Netflix Hystrix, resilience4j, Envoy/Istio의 outlier detection이 대표 구현체
실무 활용
- 마이크로서비스 간 호출에서 한 서비스의 장애가 전체로 번지는 것을 방지
- 외부 결제/알림 API처럼 신뢰도가 낮은 서드파티 의존성 보호
- Retry, Timeout과 함께 조합해 사용하는 회복탄력성 패턴 세트
장점
- 연쇄 장애(Cascading Failure) 방지
- 장애 상태에서 빠른 실패로 리소스(스레드/커넥션) 고갈 방지
- 자동 복구 감지로 운영 개입 최소화
단점 및 제약
- 임계치/타임아웃 튜닝이 까다로움
- Half-Open 전환 시점의 오탐 가능성
- 전체 시스템에 걸쳐 일관되게 적용하지 않으면 효과 반감
호환성
resilience4j (Java), Polly (.NET), Envoy/Istio (서비스 메시), 다수 언어의 서드파티 라이브러리