1. 소개
서킷 브레이커는 마이크로서비스 아키텍처(MSA)에서 서비스 장애로 인한 연쇄적인 실패를 방지하기 위한 패턴이다.
전기회로의 "회로 차단기(Circuit Breaker)" 개념에서 유래한 것으로, 특정 서비스가 장애가 발생했을 때 일시적으로 요청을 차단하여 전체 시스템이 무너지지 않도록 한다.
서킷 브레이커에서는 서비스의 상태를 아래의 3가지 상태로 구분한다.
closed 정상적인 상태
open 장애가 발생해서 연결을 끊은 상태
hided open 장애가 발생했는지 확인하는 상태
2. 사용 방법
Spring Boot에서는 Resilience4j 라이브러리를 사용하여 서킷 브레이커를 쉽게 구현할 수 있다.
1. 의존성 추가
build.gradle
implementation 'io.github.resilience4j:resilience4j-spring-boot2'
implementation 'org.springframework.boot:spring-boot-starter-aop'
pom.xml
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2. 서킷 브레이커 설정
application.yml 파일에 기본 설정을 정의해 준다.
application.yml
resilience4j:
circuitbreaker:
instances:
myService: # 서킷 브레이커 이름
slidingWindowSize: 10 # 최근 10개 요청 기준으로 판단
failureRateThreshold: 50 # 실패율 50% 이상이면 차단
slowCallRateThreshold: 50 # 응답 지연율 50% 이상이면 차단
waitDurationInOpenState: 10s # 서킷이 열린 후 10초 동안 요청 차단
permittedNumberOfCallsInHalfOpenState: 5 # 절반 열림 상태에서 허용할 요청 개수
minimumNumberOfCalls: 5 # 최소 5개 요청 이후 서킷 판단 시작
automaticTransitionFromOpenToHalfOpenEnabled: true # 자동 복구 활성화
3. 서비스에서 서킷 브레이커 적용
Spring Boot 서비스에서 특정 메서드에 서킷 브레이커를 적용할 수 있다.
예제
import io.github.resilience4j.circuitbreaker.annotation.CircuitBreaker;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@Service
public class MyService {
private final RestTemplate restTemplate = new RestTemplate();
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackResponse")
public String callExternalService() {
// 외부 API 호출 (예: 다른 마이크로서비스 호출)
return restTemplate.getForObject("http://external-service/api/data", String.class);
}
// 장애 발생 시 실행될 대체 메서드 (Fallback)
public String fallbackResponse(Exception e) {
return "서비스 장애로 인해 기본 응답을 반환합니다.";
}
}
@CircuitBreaker(name = "myService", fallbackMethod = "fallbackResponse") 설명
- myService -> application.yml에서 설정한 서킷 브레이커 이름
- fallbackResponse -> 장애 발생 시 실행할 메서드
3. 서킷 브레이커 모니터링
Spring Boot Actuator를 추가하면 서킷 브레이커 상태를 모니터링할 수도 있다. 해도 되고 안 해도 됨
build.gradle에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-actuator'
application.yml에 Actuator 설정
management:
endpoints:
web:
exposure:
include: health,metrics
상태 확인
http://localhost:8080/actuator/health
http://localhost:8080/actuator/metrics/resilience4j.circuitbreaker
4. 정리
서킷 브레이커란??
- 장애 발생 시 연쇄적인 오류를 방지하는 패턴
- 일정 실패율이 넘으면 요청을 차단
- 일정 시간이 지난 후 테스트하고 자동 복구
'Spring' 카테고리의 다른 글
AWS에 백엔드 서버 배포하는 법 (0) | 2025.03.07 |
---|---|
Spring Cloud Config로 yml파일 원격 관리하기 (0) | 2025.03.04 |
멀티모듈 환경의 Swagger 설정 (2) | 2025.03.04 |
멀티 모듈에서 타 모듈의 Bean 등록 오류 (0) | 2025.02.28 |
MSA 통신의 제로 페이로드(Zero Payload) (0) | 2025.02.28 |