Cloud Visualizer
← 전체 목록
🛑

Circuit Breaker

신뢰성실패하는 원격 호출을 잠시 끊어 연쇄 장애를 막는 패턴

아키텍처 다이어그램

점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다

왜 필요한가요?

원격 의존성이 느리거나 실패하는데도 계속 같은 방식으로 호출하면, 호출하는 서비스의 리소스까지 함께 잠깁니다. 재시도를 무작정 늘리면 상황이 더 나빠질 수도 있습니다. 결국 한 장애가 다른 서비스의 스레드 풀, 워커, 연결 풀까지 끌어내리는 연쇄 장애가 생깁니다. Circuit Breaker는 실패하는 대상을 잠시 끊어 전체 시스템을 보호하려는 장치입니다.

왜 이런 방식이 등장했나요?

서비스가 네트워크 너머의 의존성을 많이 품게 되면서, 부분 장애가 전체 장애로 번지는 일이 흔해졌습니다. 특히 클라우드와 마이크로서비스 환경에서는 느린 응답 하나가 수많은 재시도와 대기열 정체를 낳을 수 있습니다. 이 문제를 단순 타임아웃만으로는 충분히 다루기 어려워지면서, 실패를 일정 시점에서 의도적으로 차단하는 패턴이 중요해졌습니다.

안에서 어떻게 동작하나요?

초기에는 정상적으로 호출을 통과시키다가 오류율이나 타임아웃이 임계치를 넘으면 회로를 엽니다. 열려 있는 동안에는 실제 호출을 막고 빠르게 실패시키거나 대체 응답으로 넘깁니다. 일정 시간이 지나면 Half-Open 상태에서 소수의 호출만 통과시켜 복구 여부를 시험하고, 성공하면 다시 닫습니다.

무엇과 헷갈리나요?

Circuit Breaker와 Saga는 둘 다 분산 시스템 실패를 다루지만 Circuit Breaker는 개별 원격 호출의 폭발 반경을 줄이는 패턴이고, Saga는 여러 비즈니스 단계가 실패했을 때 상태를 어떻게 정리할지를 다루는 패턴입니다. 또 Idempotency와 달리 Circuit Breaker는 '중복 실행이 안전한가'가 아니라 '지금 이 호출을 아예 보내야 하는가'를 결정합니다. Observability와 비교하면, Circuit Breaker는 보호 장치이고 Observability는 상태를 보이게 하는 기반입니다.

언제 쓰나요?

외부 API, 내부 마이크로서비스, 데이터 스토어처럼 네트워크를 건너는 모든 호출 경로에서 Circuit Breaker는 유용할 수 있습니다. 특히 대체 응답이 가능하거나 빠른 실패가 전체 시스템 보호에 도움이 되는 경우 효과가 큽니다. 다만 임계치와 대기 시간은 관측 데이터 없이 감으로 잡기 어렵기 때문에, 보호 장치와 관측 체계를 같이 운영해야 합니다.

느리거나 자주 실패하는 외부 의존성을 호출하는 서비스타임아웃이 쌓여 워커 풀과 스레드 풀이 잠길 수 있는 시스템마이크로서비스 간 연쇄 장애를 막아야 하는 플랫폼재시도 정책을 무조건 늘릴 수 없는 환경
관련 문서

더 읽어보기

현재 페이지의 개념 설명을 본 뒤 배경 설명과 참고 문서를 이어서 볼 수 있습니다.

Software Architecture