Resilience4j는 마이크로서비스 아키텍처에서 자주 발생하는 장애에 대한 복원력(resilience)을 제공하기 위한 경량화 라이브러리입니다. Java 8+ 기반으로 개발되었으며, 특히 함수형 프로그래밍의 개념을 활용하고 있습니다.
Resilience4j는 Netflix Hystrix의 대안으로 주목받고 있으며, Spring Boot와의 통합이 용이한 것이 특징입니다. Circuit Breaker 패턴을 포함해 다양한 탄력성 패턴을 제공하여 시스템의 신뢰성과 가용성을 높이는 데 도움을 줍니다.
주요 기능들 🔍
Circuit Breaker (서킷 브레이커)
- 실패율이 높을 때 특정 기능 호출을 차단하여 시스템 전체 장애를 방지하는 패턴입니다.
- 상태 관리: CLOSED → OPEN → HALF-OPEN
- 실패율이나 응답 시간에 따라 서킷이 열리고 닫힙니다.
Rate Limiter (레이트 리미터)
- 특정 시간 동안 허용되는 최대 호출 수를 제한합니다. 예를 들어, 1초에 10개의 요청만 허용합니다.
Retry (재시도)
- 실패한 요청을 자동으로 재시도하는 기능입니다.
- 재시도 간격과 최대 재시도 횟수를 설정할 수 있습니다.
Bulkhead (벌크헤드)
- 하나의 실패가 전체 시스템에 영향을 주지 않도록 리소스를 격리합니다.
- 스레드풀 기반 또는 세마포어 기반으로 구현할 수 있습니다.
TimeLimiter (타임 리미터)
- 응답 시간이 너무 길면 타임아웃을 발생시켜서 서비스 장애를 방지합니다.
Fallback (대체 처리)
- 장애 발생 시 다른 처리 방법(예: 대체 메서드)으로 넘어갑니다.
왜 Resilience4j를 사용할까? 🤔
✅ 가볍고 모듈화: 필요에 따라 원하는 모듈만 사용하면 되며, 라이브러리 전체를 가져올 필요가 없습니다.
✅ 함수형 프로그래밍 기반: Java 8+의 함수형 인터페이스를 지원합니다.
✅ Spring Boot와의 쉬운 통합: Spring Boot Starter로 간편하게 적용할 수 있습니다.
✅ Hystrix의 대체: Netflix가 Hystrix를 더 이상 유지보수하지 않기 때문에 많은 개발자들이 Resilience4j로 전환하고 있습니다.
간단한 서킷 브레이커 예제
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import java.util.function.Supplier;
public class CircuitBreakerExample {
public static void main(String[] args) {
// CircuitBreaker 레지스트리 생성
CircuitBreakerRegistry registry = CircuitBreakerRegistry.ofDefaults();
// CircuitBreaker 인스턴스 생성
CircuitBreaker circuitBreaker = registry.circuitBreaker("example");
// 보호할 메서드 정의
Supplier<String> decoratedSupplier = CircuitBreaker
.decorateSupplier(circuitBreaker, () -> someRemoteCall());
// 서킷 브레이커를 적용한 메서드 호출
String result = decoratedSupplier.get();
System.out.println(result);
}
private static String someRemoteCall() {
// 외부 호출 시뮬레이션
throw new RuntimeException("Service is unavailable");
}
}
위 코드에서 someRemoteCall이 실패하면 CircuitBreaker
가 이를 감지하고 서킷을 열어, 더 이상 호출하지 않게 됩니다.
결론 📝
Resilience4j는 경량화된 모듈을 제공하면서도 시스템의 복원력을 높이는 데 효과적입니다. 서킷 브레이커, 재시도, 벌크헤드와 같은 패턴을 쉽게 적용할 수 있으며, Spring Boot 프로젝트에 통합하기 매우 유리합니다. Netflix Hystrix의 훌륭한 대안으로써 널리 사용되고 있습니다.
'Microservices Architecture' 카테고리의 다른 글
12 팩터 앱(12 Factor App) (0) | 2024.12.10 |
---|---|
스프링 클라우드 패턴 (0) | 2024.12.10 |
온프레미스(On-Premise) (2) | 2024.12.09 |
프로비저닝(Provisioning) (1) | 2024.12.09 |
클라우드 네이티브(Cloud Native) (0) | 2024.12.09 |