들어가며
이번 시간에는 OpenFeign 개념 및 설정 방법과 테스트에 대해 정리한다. Feign Client 통신을 위한 OpenFeign 라이브러리를 사용했다.
시리즈 1 - MSA
https://sjparkk-dev1og.tistory.com/151
시리즈 2 - Eureka
https://sjparkk-dev1og.tistory.com/153
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 요청 결과 확인
댓글