Circuit Breaker
개요
Circuit Breaker 정책은 마이크로서비스 아키텍처에서 연쇄 실패를 방지하기 위해 상위 서비스의 상태를 모니터링하고 서비스가 불안정해질 때 요청을 차단하도록 설계되었습니다. 이는 시스템 안정성, 향상된 사용자 경험 및 실패로부터의 빠른 복구를 보장합니다.
회로 차단기는 three states 사이를 전환합니다:
- Closed: 요청이 정상적으로 처리됩니다.
- Open: 요청이 높은 실패율로 인해 차단됩니다.
- Half-Open: 서비스가 복구되었는지 확인하기 위해 제한된 수의 테스트 요청이 전송됩니다.
이 정책은 분산 시스템에서 prevent excessive retries, reduce latency, 및 ensure fault tolerance에 도움이 됩니다.
구성 세부정보


필드 구성
회로 차단기 정책은 시스템 실패를 기반으로 요청이 차단되는 시기와 방법을 결정하는 여러 configurable parameters을 제공합니다.
| Field name | Key | Type | Required | Description |
|---|---|---|---|---|
| 오류 측정 단위 시간 (초) | window_time | number | true | 초 단위의 윈도우 크기 |
| 오류 비율 (%) | failure_percent_threshold | number | true | 회로를 열기 위해 실패해야 하는 요청의 비율 |
| 최소 요청 수* | min_calls_in_window | number | true | 계산을 시작하기 위해 윈도우에 존재해야 하는 최소 호출 수 |
| API 타임아웃 설정 (밀리초) | api_call_timeout_ms | number | true | 요청이 타임아웃되고 실패로 간주되기 전에 대기할 시간 |
| 오픈 상태 지속 시간 (초) | wait_duration_in_open_state | number | true | 오픈 상태에서 반 오픈 상태로 자동 전환되기 전에 대기할 시간(초) |
| 반 오픈 상태 지속 시간 (초) | wait_duration_in_half_open_state | number | true | 반 오픈 상태에서 닫힌 상태로 자동 전환되기 전에 대기할 시간(초) |
| 반 오픈 상태에서의 최소 요청 수* | half_open_min_calls_in_window | number | true | 계산을 시작하기 위해 반 오픈 상태에 존재해야 하는 최소 호출 수 |
| 반 오픈 상태에서의 최대 요청 수* | half_open_max_calls_in_window | number | true | 반 오픈 상태에서 허용할 최대 호출 수 |
| 응답 오류 코드 설정* | error_status_code | number | false | 오류 발생 시 응답 상태 코드를 재정의합니다 (회로 차단기가 요청을 차단함) |
| 응답 오류 메시지 설정* | error_msg_override | string | false | 오류 발생 시 사용자 정의 메시지로 재정의합니다 |
| 응답 헤더 설정* | response_header_override | string | false | 오류 발생 시 "Content-Type" 응답 헤더를 재정의합니다 |
| 예외 경로 설정* | excluded_apis | string | true | 이러한 API에서 회로 차단기를 실행하지 않도록 방지하는 문자열화된 JSON. 각 경로의 플러스 또는 마이너스 버튼을 클릭하여 추가 경로를 추가하거나 삭제할 수 있습니다. |
| 활성 대체 경로 | fallback path | string | false | 기본 서비스가 사용할 수 없을 때 요청을 처리하기 위해 정의된 대체 경로입니다. |
회로 차단기 동작에 대한 추가 노트
The Circuit Breaker는 실패 감지 주기를 기반으로 작동하며 세 가지 상태를 전환합니다:
- Closed: 트래픽이 통과하고 오류 비율이 모니터링되는 정상 상태입니다.
- Open: 오류 비율 임계값이 초과되면 트리거되어 모든 수신 트래픽을 일시적으로 차단합니다.
- Half-Open: 구성된 시간 후에 시스템 복구를 테스트하기 위해 제한된 트래픽이 허용됩니다.
- Recovery: 테스트 트래픽이 문제 없이 통과하면 시스템은 정상 상태로 돌아갑니다 (닫힘).
각 설정은 이 생명 주기를 제어하는 데 기여합니다:
| Field | Description |
|---|---|
| 최소 요청 수 | 오류 측정을 시작하기 위한 단위 시간 내 최소 요청 수. |
| API 타임아웃 | 요청이 이 임계값을 초과하면 실패로 간주됩니다. |
| 열린 상태 지속 시간 | 회로가 열린 상태로 유지되는 시간(초). |
| 반열림 지속 시간 | 회로가 반열림 상태로 유지되는 시간(초). |
| 반열림에서의 최소 요청 수 | 반열림 상태에서 오류 비율을 다시 관찰하기 위해 필요한 최소 트래픽. |
| 반열림에서의 최대 요청 수 | 복구를 평가하기 위한 최대 테스트 요청 수. |
응답 구성 옵션
- Custom Error Code: 트래픽이 차단될 때 반환되는 오류 코드.
- Custom Error Message: 트래픽이 차단될 때 반환되는 메시지 본문.
- Custom Error Content-Type: 오류 응답의 Content-Type.
예외 경로 구성
회로 차단기가 적용되지 않아야 하는 특정 경로를 정의합니다.
형식: METHOD + PATH
예: GET /example/v1
대체 경로 구성
회로 차단기가 활성화되면 요청이 대체 페이지로 리디렉션될 수 있습니다:
- 대체 경로는 차단된 요청에 대한 사용자 정의 리디렉션 경로를 정의할 수 있습니다.
- 대체 경로가 정의되지 않는 한 기본 경로가 사용됩니다.
- 동일한 API 내에서 특정 경로로 리디렉션하려면 원하는 API PATH를 대체 경로로 지정합니다.

APIM 회로 차단기를 구성할 때 자주 묻는 질문
- 회로 차단기가 언제 활성화되는지를 실제로 결정하는 매개변수는 무엇인가요? (닫힘 → 열림)
회로 차단기는 only when these threshold parameters work together에서 활성화됩니다:
- Error measurement unit time (window_time)
- Minimum number of requests (min_calls_in_window)
- Error rate (%) (failure_percent_threshold)
- API timeout setting (api_call_timeout_ms)
회로는 all conditions below are met within the configured time window일 때 열립니다:
- window_time 동안 수신된 요청 수 ≥ min_calls_in_window
- 실패한 요청(타임아웃 포함)이 실패 비율을 failure_percent_threshold에 도달하거나 초과하게 만듭니다.
- 활성화에 영향을 미치지 않지만 종종 임계값과 혼동되는 매개변수는 무엇인가요?
다음 매개변수는 do not participate in activation이며 after the circuit is already Open에서만 사용됩니다:
- wait_duration_in_open_state
- wait_duration_in_half_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- 실패가 발생할 때 회로 차단기가 즉시 활성화되나요?
아니요.
활성화는 both volume and error rate에 따라 달라집니다:
- 충분한 요청이 발생해야 합니다 (min_calls_in_window)
- 실패가 임계값을 초과해야 합니다 (failure_percent_threshold)
- 모든 평가는 window_time 내에서 이루어집니다.
오직 all activation conditions are satisfied일 때 회로는 Closed → Open에서 전환됩니다.
매개변수 그룹 및 그 책임
- 활성화 / 임계값 매개변수 (닫힘 → 열림)
이 매개변수들은 when the circuit opens를 결정하기 위해 함께 평가됩니다:
- window_time
- min_calls_in_window
- failure_percent_threshold
- api_call_timeout_ms
- 복구 제어 매개변수 (열림 → 반열림 → 닫힘)
이 매개변수들은 활성화가 아닌 how and when traffic is restored를 제어합니다:
- wait_duration_in_open_state
- half_open_min_calls_in_window
- half_open_max_calls_in_window
- wait_duration_in_half_open_state
- 응답 사용자 정의 매개변수
이 매개변수는 클라이언트에 반환되는 응답에 영향을 미치지만 상태 전환에는 영향을 미치지 않습니다.
- error_status_code
- error_msg_override
- response_header_override
일부 일반적인 잘못된 구성
| Case | Reason |
|---|---|
| 회로가 절대 열리지 않음 | min_calls_in_window이 너무 높음 |
| 회로가 너무 자주 열림 | window_time이 너무 짧거나 임계값이 너무 낮음 |
| 복구가 절대 발생하지 않음 | half-open max calls가 너무 낮음 |
| 헬스 체크가 열림 상태를 유발함 | 제외된 API가 누락됨 |