SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (3) - OpenFeign 개념 및 설정방법
들어가며
이번 시간에는 OpenFeign 개념 및 설정 방법과 테스트에 대해 정리한다. Feign Client 통신을 위한 OpenFeign 라이브러리를 사용했다.
시리즈 1 - MSA
https://sjparkk-dev1og.tistory.com/151
MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (1) - MSA(Mi
들어가며 이 글은 제목에서도 알 수 있듯이 MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 순으로 개념과 설정방법 그리고 테스트 등의 결과와 해당 기술들을 테스트하며 겪었..
sjparkk-dev1og.tistory.com
시리즈 2 - Eureka
https://sjparkk-dev1og.tistory.com/153
SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시
들어가며 이번 시간에는 유레카에 대해서 정리한다. 기본적인 개념 정리와 테스트에 대핸 내용을 정리했다. 시리즈 1 - MSA https://sjparkk-dev1og.tistory.com/151 MSA & Eureka & FeignClient(OpenFeign) & Cir..
sjparkk-dev1og.tistory.com
OpenFeign이란?
- Spring Cloud에서 RestTemplate와 Hystrix 라이브러리를 통합한 기능으로 생각할 수 있다.
- Hytrix가 RestTemplate와 함께 쓰여 설정된 임계치에 조건에 다달아 장애가 발생하면 FallBack 메서드가 작동하게 하는 방식과 동일한 방식으로 동작 가능하여 더불어 보다 복잡한 FallBack 조건을 설정할 수 있다.
- 즉, OpenFeign을 이용하면 Spring의 RestTemplate과 Hystrix를 손쉽게 대체 할 수 있다.
- REST Call을 위해 호출하는 클라이언트를 보다 쉽게 작성할 수 있도록 도와주는 라이브러리
- RestTemplate와 비교하여 Interface를 작성하고 어노테이션을 붙여주면 세부적인 내용없이 사용할 수 있어 편리
- Timeout 같은 간단한 기능은 Hystrix 연동 없이 실패에 대한 CallBack 함수 구현 가능
OpenFeign 설정 방법
1. Dependency 추가
- implementation("org.springframework.cloud:spring-cloud-starter-openfeign")
2. 어노테이션 추가 (@EnableFeignClients)
3. REST Call을 할 REST API에 대한 FeignClient Interface 작성
- 구현 인터페이스에 @FeignClient 어노테이션 설정 방식에 따라 방식 달라짐.
4. FallBack 구현
추가 사항
위에서 3번째에 @FeignClient 어노테이션 설정 방식에 따라 방식이 달라진다고 설명하였는데 구체적으로 어떤 방식이 있는지 설명한다.
1. url 명시를 통한 방식
- 기존 url을 이용한 통신 시 application.yml에 feign.target-api에 설정을 하여 통신
2. name 을 통한 방식
- Eureka를 이용한 name 설정을 이용하여 통신이 가능하도록 변경 가능 (@FeignClient 어노테이션 내의 name option 값과 application.yml 내의 application.name 설정을 동일하게 맞춰줌)
- application.yml
- @FeignClient
테스트
환경 구성 (로컬환경에서 테스트)
- Eureka Server - 8686(port)
- Eureka Client1 (Member) - 8787
- Eureka Client2 (Store) - 8989
테스트 통신 흐름
1. Member 서비스에게 rest api 요청
2. Controller -> Service -> FeignClient
3. @FeignClient를 name 설정을 통하여 Eureka Server가 Store에게 요청
4. Member FeignClient 인터페이스에 설정된 @GetMapping 과 일치하는 Store에 Controller로 요청 옴
5. 기대값 - 테스트 성공
6. Postman을 통한 api 요청 결과 확인