본문 바로가기
Spring

SpringBoot Cloud - MSA & Eureka & FeignClient(OpenFeign) & CircuitBreaker(Hystrix & Resilience4J) 차례대로 알아보기 시리즈 (3) - OpenFeign 개념 및 설정방법 

by devLog by Ronnie's 2022. 5. 23.

 

들어가며


이번 시간에는 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

 

테스트


환경 구성 (로컬환경에서 테스트)

  1. Eureka Server - 8686(port)
  2. Eureka Client1 (Member) - 8787
  3. 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 요청 결과 확인

댓글