본문 바로가기

Web/웹 상식

[Spring Cloud] Feign에 대해서

Feign이란

MSA환경에서는 각 서비스 간의 호출이 기존의 단일 시스템일 때보다 증가하게 됩니다. 이러한 상환에서 Feign은 API 간의 호출을 편하게 해 주기 위해서 만들어졌습니다. 기존에는 HttpClient의 설정을 Java에서 설정해주고 주입받아서 사용하는 방식을 해야 했습니다. 이 부분을 간편하게 바꿔주는 것이라고 생각하면 될 것 같습니다.

 

예시 코드

1. @EnableFeignClients 추가

@SpringBootApplication
@EnableFeignClients
public class Application {
	public static void main(String ...args) {
    	SpringApplication.run(Application.class, args);
    }
}

 

@EnableFeignClients는 root Package에 선언되어서 이후에 사용될 @FeignClient 어노테이션을 찾아서 등록하는 역할을 합니다. basePackages를 지정해서 사용할 수도 있습니다.

 

2. @FeignClient 등록

@FeignClient(name = "exampleClient", url = "https://marrrang.tistory.com")
public interface MarrrangClient {
    @GetMapping(value = "/test", produces = "application/json", consumes = "application/json")
    String testMethod(@RequestParam("key") String key);
    
    @PostMapping(value = "/user", produces = "application/json", consumes = "application/json")
    String registUser(@RequestHeader("auth-key") String authKey, @RequestBody User user);
}

 

  • @FeignClient를 통해서 interface를 등록합니다.
    • name : feignClient의 서비스 이름으로 필수로 작성해야합니다.
    • url : 해당 interface를 통해 요청할 baseUrl입니다.
    • qualifier : 해당 interface의 beanName을 등록할 수 있습니다.
    • configuration : 커스터마이징 한 configuration을 넣을 수 있습니다.
    • fallback : interface를 통해 요청하고 에러가 발생했을 때 이후 처리를 등록할 수 있습니다.
  • @RequestHeader는 요청 시에 Header를 추가합니다.
  • @RequestParam은 요청시에 파라미터를 추가합니다.
  • @RequestBody는 요청시에 body를 통해 데이터를 추가합니다.

 

Config 등록하기

Feign에는 굳이 설정하지 않아도 기본 제공하는 기능들과 설정을 통해서 제공하는 기능들이 있습니다. 그중 설정을 해줘야만 사용할 수 있는 기능을 알아보겠습니다.

  • Retryer : 재시도 알고리즘을 제공
  • ErrorDecoder : Http 상태 코드에 따라서 예외로 매핑할 수 있게 해 준다.
  • Request.Options : 요청의 readTimeout, connectionTimeout 시간을 설정할 수 있습니다.
  • RequestInterceptor : RequestInterceptor를 등록해서 사용

YML 설정 방식

feign:
  client:
    config:
      feignName:
        connectTimeout: 5000
        readTimeout: 5000
        loggerLevel: full
        errorDecoder: com.example.MyErrorDecoder
        retryer: com.example.MyRetryer
        decode404: false
        encoder: com.example.MyEncoder
        decoder: com.example.MyDecoder
        contract: com.example.MyContract

 

Java Config 방식

@Configuration
public class FeignConfiguration {
    @Bean
    Retryer retryer() {
        //(period, maxPeriod, maxAttempts)
        return new Retryer.Default(1000, 5000, 3);
    }
    
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}

 

이렇게 등록한 Configuration을 @FeignClient 어노테이션의 configuration 속성에 등록하여 사용할 수 있습니다.

 


참조

 

Feign(페인) 클라이언트 사용

Feign 페인은 넷플릭스에서 개발한 웹 서비스 클라이언트 도구로 애노테이션을 템플릿화된 요청으로 처리해 동작하는 HTTP 클라이언트 바인더다. 인터페이스를 만들고 애노테이션을 붙이는 방식

055055.tistory.com

 

우아한 feign 적용기 | 우아한형제들 기술블로그

{{item.name}} 안녕하세요. 저는 비즈인프라개발팀에서 개발하고 있는 고정섭입니다. 이 글에서는 배달의민족 광고시스템 백엔드에서 feign 을 적용하면서 겪었던 것들에 대해서 공유 하고자 합니다

techblog.woowahan.com

 

반응형

'Web > 웹 상식' 카테고리의 다른 글

[Spring] @InitBinder에 대해서  (0) 2022.03.31
[Kubernetes] Kubernetes tls Secret 생성하기  (0) 2021.12.29
URI와 URL의 차이  (0) 2021.08.19
[GraphQL] GraphQL 처음 시작하기  (0) 2021.08.12
HandlerMethodArgumentResolver에 대해서  (0) 2021.07.13