MSA

[MSA] Circuit Breaker로 장애 격리 설계 (Hystrix, Resilience4j)

인생아 2025. 7. 23. 21:49
반응형

마이크로서비스 아키텍처(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가 그 자리를 대체하고 있다.
단순한 라이브러리 선택을 넘어 장애에 강한 시스템을 설계한다는 관점에서 반드시 고려해야 하는 기술 요소이다.

📌 참고한 공식 문서

 

반응형