SpringCloud - Resilience4j

Neo-Renaissance·2025년 6월 4일

Resilience4j란 무엇인가?

자바 8과 함수형 프로그래밍을 위해 설계된 경량화된 장애 허용 라이브러리로 Netflix Hystrix에서 영감을 받아 개발되었고, 더욱 모듈화되고 유연한 구조를 제공하고 Hystrix가 유지보수 모드로 전환됨.

Resilience4j 주요 모듈들의 개요


Resilience4j의 주요 장점

  • 경량성: Vavr를 제외하고는 다른 라이브러리에 의존하지 않는 가벼운 구조
  • 모듈성: 필요한 기능만 선택적으로 사용 가능한 모듈 구조
  • 함수형 프로그래밍 지원: 람다 표현식과 메서드 참조를 활용한 직관적인 API
  • Spring Boot 통합: 애노테이션 기반의 간편한 설정과 사용

Circuit Breaker (서킷 브레이커)

Circuit Breaker는 외부 서비스의 장애를 감지하여 연쇄적인 시스템 장애를 방지하는 핵심 패턴으로 서킷 브레이커는 CLOSED, OPEN, HALF_OPEN의 세 가지 상태를 가지며, 실패율이 임계값을 초과하면 요청을 차단.

SpringCloud Resilience4j Circuit Breaker 아키텍처 다이어그램

  • Service(서비스): 사용자의 요청을 받아 처리하는 내부 서비스입니다.
  • Circuit Breaker(서킷 브레이커): 서비스가 외부(Remote Service)로 요청을 보낼 때, 중간에서 장애 상황을 감시하고 관리하는 역할을 합니다.
  • Remote Service(외부 서비스): 실제로 데이터를 제공하거나 기능을 수행하는 외부 시스템입니다.
  • Fallback(폴백): 외부 서비스에 문제가 생겼을 때, 대체 응답을 제공하는 안전장치입니다.

동작 흐름

  1. 서비스가 외부 서비스에 요청을 보낼 때, 모든 요청은 먼저 서킷 브레이커를 거칩니다.
  2. 외부 서비스가 정상 동작하면 요청이 그대로 전달되어 결과를 받습니다.
  3. 만약 외부 서비스에서 오류가 반복적으로 발생하면, 서킷 브레이커가 회로를 "차단(OPEN)"하여 더 이상 외부 서비스에 요청을 보내지 않습니다.
  4. 이때는 미리 준비된 Fallback(폴백) 로직이 대신 실행되어, 사용자에게 최소한의 응답이나 기본값을 제공합니다.

서킷 브레이커의 동작 원리

  • CLOSED 상태: 정상 동작 시 모든 요청을 허용
  • OPEN 상태: 실패율 임계값 초과 시 모든 요청을 차단
  • HALF_OPEN 상태: 일정 시간 후 제한된 요청을 허용하여 서비스 복구 여부 확인

Retry (재시도)

Retry 모듈은 일시적인 장애 발생 시 설정된 횟수만큼 요청을 재시도하는 기능, 네트워크 문제나 일시적인 서비스 불안정성을 극복하는 데 효과적임.

Rate Limiter (속도 제한)

Rate Limiter는 특정 시간 동안 허용되는 요청 수를 제한하여 시스템 과부하를 방지, 이는 API 서버의 안정성을 보장하고 DoS 공격을 방어하는 데 중요한 역할.

Bulkhead (격벽)

Bulkhead 패턴은 동시 실행 가능한 요청 수를 제한하여 리소스를 격리하고 시스템의 일부 장애가 전체에 미치는 영향을 최소화하여 선박의 격벽과 같은 개념으로, 하나의 구획에 문제가 발생해도 다른 구획은 안전하게 보호됨.

Time Limiter (시간 제한)

Time Limiter는 응답 시간이 지정된 시간을 초과하면 타임아웃을 발생시켜 무한 대기를 방지, 이는 느린 외부 서비스로 인한 성능 저하를 막는 데 효과적임.

Cache (캐시)

Cache 모듈은 응답 결과를 캐싱하여 동일한 요청에 대해 빠른 응답을 제공하고 외부 서비스 호출을 줄임.

profile
if (실패) { 다시 도전; } else { 성공; }

0개의 댓글