반응형
마이크로서비스 아키텍처(MSA)는 각 서비스가 독립적으로 운영되지만, 서비스 간의 호출이 많아질수록 장애 전파의 위험성도 커진다.
한 서비스의 장애가 전체 시스템 장애로 이어지는 상황을 막기 위해 등장한 개념이 바로 서킷 브레이커(Circuit Breaker)이다.

✅ 서킷 브레이커(Circuit Breaker)란?
서킷 브레이커는 전기 회로 차단기의 원리에서 따온 개념으로, 연결된 시스템이 일정 횟수 이상 실패하면 자동으로 호출을 중단하고, 우회하거나 예외를 빠르게 반환하는 패턴이다.
즉, 오류가 지속되면 회로를 끊어 더 이상의 자원 낭비나 장애 전파를 막는다.
🧠 왜 필요한가?
- 장애 전파 차단
- 성능 저하 방지 (타임아웃 반복 방지)
- 사용자 경험 보호 (빠른 실패 반환)
- 시스템 자원의 불필요한 낭비 방지
🔁 서킷 브레이커 동작 방식
서킷 브레이커는 보통 다음 3가지 상태를 가진다.
| 상태 | 설명 |
| Closed | 정상 상태. 모든 요청이 통과한다. |
| Open | 일정 실패율 초과 시 차단 상태로 전환된다. 일정 시간 동안 요청이 바로 실패 처리된다. |
| Half-Open | 일정 시간이 지나고 일부 요청만 허용한다. 요청이 성공하면 다시 Closed로 전환된다. |
반응형
🧪 Hystrix: Netflix의 고전적인 서킷 브레이커
Hystrix는 Netflix가 개발한 초기 MSA 서킷 브레이커 라이브러리이다.
Spring Cloud Netflix를 통해 간단하게 사용할 수 있으며, 오랜 기간 표준처럼 사용되어 왔다.
🔧 Hystrix 예제
@HystrixCommand(fallbackMethod = "getDefaultUser")
public UserDto getUser(Long id) {
return restTemplate.getForObject("http://user-service/api/users/" + id, UserDto.class);
}
public UserDto getDefaultUser(Long id) {
return new UserDto("Unknown", "N/A");
}
✅ 장점
- 간단한 어노테이션 기반 설정
- Spring Cloud에서 기본 통합
- Fallback 처리, 타임아웃, 스레드 격리 등 기능 다양
❌ 단점
- 현재는 Netflix에서 개발 중단되었으며 유지보수 되지 않는다.
- Spring Cloud에서도 점점 Resilience4j로 대체되고 있다.
🔄 Resilience4j: 현대적인 서킷 브레이커
Resilience4j는 Hystrix의 대체 라이브러리로, Java 8 함수형 스타일, 모듈화, 경량화를 특징으로 한다.
Spring Boot 2.x부터는 기본으로 Resilience4j 연동을 권장한다.
🛠️ 설정 방법 (application.yml)
resilience4j:
circuitbreaker:
instances:
userService:
registerHealthIndicator: true
slidingWindowSize: 10
failureRateThreshold: 50
waitDurationInOpenState: 10s
🔧 Java 코드 예제
@CircuitBreaker(name = "userService", fallbackMethod = "fallbackUser")
public UserDto getUser(Long id) {
return restTemplate.getForObject("http://user-service/api/users/" + id, UserDto.class);
}
public UserDto fallbackUser(Long id, Throwable t) {
return new UserDto("Fallback User", "Offline");
}
✅ 장점
- 모듈화 구조 (CircuitBreaker, RateLimiter, Retry, Bulkhead 등)
- Spring Boot Actuator와 통합 가능
- 비동기/반응형(WebFlux) 환경 지원
- Netflix Hystrix 대비 가볍고 최신
❌ 단점
- 설정 항목이 많아 처음에는 진입장벽이 느껴질 수 있다.
반응형
🧷 Hystrix vs Resilience4j 비교
| 항목 | Hystrix | Resilience4j |
| 개발사 | Netflix | 독립 오픈소스 |
| 개발 상태 | 유지보수 중단 | 활발히 유지보수 중 |
| Spring 연동 | Spring Cloud Netflix | Spring Boot 2.x 이후 공식 채택 |
| 비동기 지원 | 일부 지원 | 완전 지원 (RxJava, Reactor) |
| 기능 확장 | 제한적 | 모듈화 (Retry, RateLimiter 등) |
| 성능 | 상대적으로 무거움 | 경량 설계, 빠름 |
📦 실무에서 어떻게 활용하는가?
- Spring Cloud Netflix 프로젝트라면 Hystrix를 기존 코드에 빠르게 적용할 수 있다.
- 신규 프로젝트나 Spring Boot 2.x 이상에서는 Resilience4j를 사용하는 것이 권장된다.
- 장애 감지가 필요한 외부 서비스 호출, 결제 API 연동, 주문 시스템의 핵심 흐름 등에 반드시 서킷 브레이커 적용이 필요하다.
✅ 결론
서킷 브레이커는 MSA 환경에서 장애 전파를 막고 시스템 안정성을 보장하는 핵심 전략이다.
Hystrix는 과거 표준이었지만, 이제는 유지보수가 중단되었고, Resilience4j가 그 자리를 대체하고 있다.
단순한 라이브러리 선택을 넘어 장애에 강한 시스템을 설계한다는 관점에서 반드시 고려해야 하는 기술 요소이다.
📌 참고한 공식 문서
반응형
'MSA' 카테고리의 다른 글
| [MSA] MSA에서 CI/CD와 무중단 배포 전략 (3) | 2025.07.24 |
|---|---|
| [MSA] JWT와 OAuth2로 인증 처리하는 방법 (2) | 2025.07.24 |
| [MSA] Kafka vs RabbitMQ: 메시지 기반 아키텍처 완전정복 (2) | 2025.07.23 |
| [MSA] Spring Cloud Config와 Vault로 설정 통합 관리 (0) | 2025.07.23 |
| [MSA] Eureka와 Consul로 서비스 디스커버리 구현하기 (1) | 2025.07.23 |
| [MSA] 서비스 통신 방법 비교: Feign vs RESTTemplate vs WebClient (0) | 2025.07.23 |
| [MSA] API Gateway와 BFF 패턴 완전 정복 (3) | 2025.07.23 |
| [MSA] 서비스 분리와 도메인 중심 설계(DDD)의 핵심 (1) | 2025.07.23 |