경계의 경계

Spring Cloud Circuit Breaker 사용해보기 본문

Spring Cloud

Spring Cloud Circuit Breaker 사용해보기

gigyesik 2024. 5. 10. 02:51

들어가며

Spring Cloud Circuit Breaker는 서킷 브레이커 패턴을 사용해 마이크로서비스 기반 어플리케이션의 장애를 관리하기 위한 라이브러리이다.

서킷 브레이커 패턴(Circuit Breaker Pattern)은 분산된 시스템 간 장애가 전파되는 것을 막고 장애가 일어난 서비스의 회복을 돕기 위한 디자인 패턴이다.

서킷 브레이커 패턴은 서비스 앞단에 프록시를 둬서 서비스에 장애가 일어난 경우 트래픽 라우팅을 회복 전까지 일시 중지하는 것이다.

Circuit Breaker Pattern 적용해보기

앨범 리스트를 조회하는 서비스에 서킷 브레이커를 적용해본다.

의존성 설정 - build.gradle

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-circuitbreaker-resilience4j'
}

비즈니스 로직 작성

@Service
public class AlbumService {
    @Autowired
    private CircuitBreakerFactory circuitBreakerFactory;

    private final RestTemplate restTemplate = new RestTemplate();

    public String getAlbumList() {
        CircuitBreaker circuitBreaker = circuitBreakerFactory.create("circuitBreaker");
        String url =  "<https://jsonplaceholder.typicode.com/albums>";
//        String url = "";
        return circuitBreaker.run(() -> restTemplate.getForObject(url, String.class), throwable -> "fallback");
    }
}

컨트롤러 작성

@RestController
public class AlbumController {
    @Autowired
    private AlbumService albumService;

    @GetMapping("/albums")
    public String albums() {
        return albumService.getAlbumList();
    }
}

실행 후 결과 확인

$ curl <http://localhost:8080/albums>

// Res When Success
[
  {
    "userId": 1,
    "id": 1,
    "title": "quidem molestiae enim"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "sunt qui excepturi placeat culpa"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "omnis laborum odio"
  },
...
]

// Res When Fail
fallback

Resources

'Spring Cloud' 카테고리의 다른 글

Spring Cloud Sleuth이란 무엇인가  (0) 2024.05.20
Spring Cloud OpenFeign 사용해보기  (0) 2024.05.13
Spring Cloud Config 사용해보기  (0) 2024.05.10
Spring Cloud Gateway 사용해보기  (0) 2024.05.10
Spring Cloud와 Microservice  (0) 2024.05.08