서킷 브레이커(Circuit Breaker)는 연속 오류 발생 시 외부 서비스 호출을 차단해 장애 전파를 방지하는 설계 패턴이다. 마이크로서비스 환경에서 연쇄 장애(Cascading Failure)를 막는 데 핵심적이다.
세 가지 상태
Closed (정상):
요청 통과, 오류 수 카운팅
오류율 > 임계값 → Open으로 전환
Open (차단):
모든 요청 즉시 실패 (빠른 실패)
대기 시간 후 → Half-Open으로 전환
Half-Open (탐색):
제한된 요청 통과
성공 → Closed로 복귀
실패 → 다시 Open
python
import time
from enum import Enum
class CircuitBreaker:
def __init__(self, failure_threshold=5, reset_timeout=60):
self.state = "CLOSED"
self.failure_count = 0
self.failure_threshold = failure_threshold
self.reset_timeout = reset_timeout
self.last_failure_time = None
def call(self, func, *args):
if self.state == "OPEN":
if time.time() - self.last_failure_time > self.reset_timeout:
self.state = "HALF_OPEN"
else:
raise Exception("Circuit breaker OPEN")
try:
result = func(*args)
if self.state == "HALF_OPEN":
self.state = "CLOSED"
self.failure_count = 0
return result
except Exception:
self.failure_count += 1
self.last_failure_time = time.time()
if self.failure_count >= self.failure_threshold:
self.state = "OPEN"
raise
관련 개념
- •마이크로서비스 — 서킷 브레이커의 주요 환경
- •분산 시스템 — 장애 전파 방지
참고문헌
- •Nygard, M.T. Release It! (2007)
- •Fowler, M. CircuitBreaker (martinfowler.com)