Circuit Breaker
▶아키텍처 다이어그램
점선 애니메이션은 데이터 또는 요청의 흐름 방향을 나타냅니다
원격 의존성이 느리거나 실패하는데도 계속 같은 방식으로 호출하면, 호출하는 서비스의 리소스까지 함께 잠깁니다. 재시도를 무작정 늘리면 상황이 더 나빠질 수도 있습니다. 결국 한 장애가 다른 서비스의 스레드 풀, 워커, 연결 풀까지 끌어내리는 연쇄 장애가 생깁니다. Circuit Breaker는 실패하는 대상을 잠시 끊어 전체 시스템을 보호하려는 장치입니다.
서비스가 네트워크 너머의 의존성을 많이 품게 되면서, 부분 장애가 전체 장애로 번지는 일이 흔해졌습니다. 특히 클라우드와 마이크로서비스 환경에서는 느린 응답 하나가 수많은 재시도와 대기열 정체를 낳을 수 있습니다. 이 문제를 단순 타임아웃만으로는 충분히 다루기 어려워지면서, 실패를 일정 시점에서 의도적으로 차단하는 패턴이 중요해졌습니다.
초기에는 정상적으로 호출을 통과시키다가 오류율이나 타임아웃이 임계치를 넘으면 회로를 엽니다. 열려 있는 동안에는 실제 호출을 막고 빠르게 실패시키거나 대체 응답으로 넘깁니다. 일정 시간이 지나면 Half-Open 상태에서 소수의 호출만 통과시켜 복구 여부를 시험하고, 성공하면 다시 닫습니다.
Circuit Breaker와 Saga는 둘 다 분산 시스템 실패를 다루지만 Circuit Breaker는 개별 원격 호출의 폭발 반경을 줄이는 패턴이고, Saga는 여러 비즈니스 단계가 실패했을 때 상태를 어떻게 정리할지를 다루는 패턴입니다. 또 Idempotency와 달리 Circuit Breaker는 '중복 실행이 안전한가'가 아니라 '지금 이 호출을 아예 보내야 하는가'를 결정합니다. Observability와 비교하면, Circuit Breaker는 보호 장치이고 Observability는 상태를 보이게 하는 기반입니다.
Saga
여러 로컬 트랜잭션을 순서와 보상으로 이어 붙이는 분산 흐름 패턴
둘 다 분산 실패를 다루지만 Circuit Breaker는 원격 호출의 연쇄 장애를 막고, Saga는 여러 단계의 비즈니스 흐름을 실패 시 어떻게 정리할지 다룹니다.
Idempotency
같은 요청이 여러 번 와도 결과를 한 번처럼 유지하는 성질
둘 다 재시도와 함께 언급되지만 Circuit Breaker는 호출을 차단해 시스템을 보호하는 패턴이고, Idempotency는 같은 요청이 다시 와도 결과를 한 번처럼 유지하는 속성입니다.
Observability
시스템 내부 상태를 외부 신호로 드러내 원인을 추적하게 하는 능력
둘 다 운영 안정성과 연결되지만 Circuit Breaker는 실패를 제한하는 보호 장치이고, Observability는 어디서 왜 실패했는지 보이게 하는 진단 기반입니다.
외부 API, 내부 마이크로서비스, 데이터 스토어처럼 네트워크를 건너는 모든 호출 경로에서 Circuit Breaker는 유용할 수 있습니다. 특히 대체 응답이 가능하거나 빠른 실패가 전체 시스템 보호에 도움이 되는 경우 효과가 큽니다. 다만 임계치와 대기 시간은 관측 데이터 없이 감으로 잡기 어렵기 때문에, 보호 장치와 관측 체계를 같이 운영해야 합니다.
더 읽어보기
현재 페이지의 개념 설명을 본 뒤 배경 설명과 참고 문서를 이어서 볼 수 있습니다.