서킷브레이커 개념
- 문제가 있는 외부/하위 시스템의 호출을 계속 시도해서 시스템 전체에 장애가 전파되는 것을 막는 보호장치
- 전기 차단기처럼 일정 기준 이상으로 실패하거나 지연이 쌓이면 회로를 끊고(open) 잠시 뒤에 탐색(half-open) 후 정상(closed) 으로 되돌립니다
- 상태변화 : closed → open → half-open
Resilience4j
- 서킷 브레이커 라이브러리
- 서킷 브레이커의 기능 / Fallback / 모니터링등 다양한 도구 제공
closed/open/half-open상태를 통해 호출 실패 관리
closed
- 기본 상태로 모든 요청을 통과시킵니다
- 해당 상태에서 호출 실패시 실패 카운트가 증가합니다
- 실패율이 임계값을 초과하면
open상태가 됩니다
open
- 모든 요청을 즉시 실패로 처리합니다
- 모든 요청은 처리되지 않고 즉시 에러 응답을 반환합니다
- 대기 시간이 지난 후
half-open상태로 전환됩니다
half-open
- 제한된 수의 요청을 처리/허용하며 시스템이 정상적으로 동작하는지 확인합니다
- 이 때 요청 성공 시
closed상태가 됩니다 - 만약 요청 실패 시 다시
open상태가 됩니다
SpringBoot 에서의 Resilience4j
- SpringBoot Starter 에서는
Resilience4j를 의존성으로 제공해주긴 하지만 이는 추상화된 모델이다 - 즉 구현체가 없으며 구현을 직접 하거나 혹은 다른 라이브러리를 통해 구현해주어야 한다
io.github.resilience4j:resilience4j-spring-boot3:2.2.0의존성은 구현체를 제공한다
COUNT_BASED 서킷 브레이커 테스트
적용한 슬라이딩 윈도우 알고리즘
- 호출 수 누적
COUNT_BASED윈도우 / windowSize : 5- 최소 5건 누적 후 통계 집계
open조건- 실패율 >= 50%
- 느린 호출 비율 >= 100%
- 느린 호출 == "60초를 초과하는 호출"
- slowCallRate 가 "100" 이므로 최근 5건 전부가 60초 초과일 경우 느린 호출로 간주
open유지시간 : 20초half-open에서 허용되는 탐색 호출 건 : 3건
각 상태에 따른 시나리오
Closed → Open 시나리오
- 실패율에 따른
Open- 윈도우 사이즈가 5개로 설정되어 있으므로 최소 3/5 실패 (60%) 이어야함 → >= 50%
- 최근 호출이 4건 이하일 때는 통계 정보를 수집하지 않으므로 그대로
Closed
- 느린 호출(60초 초과)에 따른
Open- 최근 5건이 모두 60초를 초과한 호출
Open → Half-Open (탐색전환) 시나리오
Open이후 20초가 지난 뒤 다음 들어오는 요청에서Half-Open전환- 최대 3건만 통과시킨후 상태를 시험
Half-Open → Closed (정상 복귀) 시나리오
- 모든 조건을 만족하면 Closed
- 실패율 < 50% (3건 중 0 or 1만 실패)
- 느린 호출 비율 < 100% (3건 전부가 60초 초과면 안됨)
Half-Open → Open (재오픈) 시나리오
- 아래 중 하나라도 만족하면 다시
Open- 실패율 >= 50% (3건 중 2건 실패)
- 느린 호출 비율 >= 100% (3건 전부 60초 초과)
테스트 코드
'학습일지 > Architecture' 카테고리의 다른 글
| [Architecture] 중앙 집중식 Config 설정 관리 (3) | 2025.09.17 |
|---|---|
| [Architecture] API Gateway (Spring Cloud Gateway) (0) | 2025.09.17 |
| [Architecture] 로드밸런싱 (0) | 2025.09.16 |
| [Architecture] 서비스 디스커버리 (0) | 2025.09.16 |
| [Architecture] MSA, Spring Cloud (0) | 2025.09.16 |