🌳 고급 design-pattern
Circuit Breaker 패턴이 뭔가요?
쉽게 이해하기
집의 두꺼비집(차단기)을 생각해보세요. 전기 과부하가 발생하면 자동으로 전기를 차단해서 화재를 막아줍니다. Circuit Breaker 패턴도 마찬가지로, 특정 서비스에 장애가 발생하면 자동으로 해당 서비스 호출을 차단하여 전체 시스템이 멈추는 것을 방지합니다.
핵심 정리
장애가 발생한 서비스 호출을 자동으로 차단하여 시스템 전체 장애를 방지하는 디자인 패턴입니다.
자세히 알아보기
Circuit Breaker 패턴은 마이크로서비스 환경에서 장애 전파를 막는 핵심 패턴입니다. 서비스 A가 서비스 B를 호출하는데, B에 장애가 발생했다고 가정해봅시다. B가 응답하지 않으면 A는 계속 기다리다가 타임아웃이 발생하고, 이 과정에서 A의 스레드가 모두 소진되어 A까지 먹통이 될 수 있습니다.
Circuit Breaker는 세 가지 상태를 가집니다. Closed(정상) 상태에서는 모든 요청이 통과하고, 일정 횟수 이상 실패하면 Open(차단) 상태로 전환되어 더 이상 B를 호출하지 않고 즉시 에러를 반환합니다. 일정 시간이 지나면 Half-Open(반개방) 상태가 되어 소수의 테스트 요청을 보내보고, 성공하면 다시 Closed로 돌아갑니다.
실무에서는 Netflix의 Hystrix(현재 유지보수 중단), Resilience4j, Spring Cloud Circuit Breaker 등의 라이브러리를 사용합니다. 예를 들어 결제 서비스가 다운되었을 때, Circuit Breaker가 Open 상태가 되면 '결제 서비스가 일시적으로 불가합니다'라는 메시지를 즉시 반환하여 사용자 경험을 개선할 수 있습니다.
장애 임계값(실패 횟수, 실패율), 타임아웃 시간, Half-Open 유지 시간 등을 적절히 설정하는 것이 중요합니다. 너무 민감하게 설정하면 일시적인 네트워크 지연에도 회로가 차단될 수 있고, 너무 둔감하면 장애 전파를 막지 못할 수 있습니다.