SpringBoot에 Http Client Feign 적용해보기

반응형
728x90
반응형

Feign 적용

외부 API를 쉽게 호출할 수 있는 Http Client Binder인 Feign을 적용해보자.

개발환경 : SptringBoot 2.1.8

1. build.gradle 에 의존성 추가

//feign
compile "org.springframework.cloud:spring-cloud-starter-openfeign:2.1.0.RELEASE"

 

2. application.yml 에 feign으로 연동할 외부 Server 정보 설정

# feign URL
feign:
  test-api:
    url: http://localhost:7070
  httpclient:
    connection-timeout: 1

 

3. SpringBoot의 xxxAplication.java 파일 안에 @EnableFeignClients 어노테이션 추가

@EnableFeignClients
public class TechnologyApplication {
  ...
}

 

4. 외부 서버의 API를 호출할 interface 파일 생성 후 설정

@FeignClient(name = "test-api", url = "${feign.test-api.url}")
public interface feignClient {
  ...
}

 

5. Controller에서 4번에서 생성한 interface의 method 호출

public class FeignController {
  private final TestClient testClient;

  public FeignController(TestClient testClient) {
      this.testClient = testClient;
}

 

 

분석

SptringBoot에서 Feign을 설정하고 사용하는 방법은 생각보다 간단하다. 이제, 설정한 외부 서버의 API를 어떻게 호출해야하는지를 알아보자. 우리가 4번에서 생성한 interface의 파일을 자세히 살펴보자.

 

@FeignClient(name = "test-api", url = "${feign.test-api.url}")
public interface TestClient {

    @GetMapping("/test")
    String authTest();

    /** 외부 API의 Method 명과 상관이 있을까? */
    @GetMapping("/test")
    String authTest2();

    @GetMapping("/test/user")
    String paramTest(@RequestParam String userID);

    /** @RequestParam 어노테이션의 name을 꼭 써야할까? */
    @GetMapping("/test/user")
    String paramTest2(@RequestParam(name = "userID") String userID);

    /** @RequestParam 어노테이션의 name을 안썼을때 파라미터 변수명과 상관이 있을까? */
    @GetMapping("/test/user")
    String paramTest4(@RequestParam String user);

    /** 외부 API의 파라미터 변수명과 상관이 있을까? */
    @GetMapping("/test/user")
    String paramTest3(@RequestParam(name = "userID") String user);
}

 


(1) AuthTest() : 성공
(2) AuthTest2() : 의문 1. 외부 api의 메소드과 다르다면? -> 성공
(3) paramTest(@RequestParam String userID) : 성공
(4) paramTest2(@RequestParam(name = "userID") String userID) : 의문 2. name속성을 추가한다면? -> 성공
(5) paramTest4(@RequestParam String user) : 실패
(6) paramTest3(@RequestParam(name = "userID") String user) : 의문 3. 파라미터명이 다를때, name 속성을 > 추가한다면? -> 성공

 

 

마무리

위 결과에 따라, feign으로 외부 서버의 API를 호출할때에는 파라미터명을 같게 해주거나, 만약 파라미터명을 다르게 해야한다면 @RequestParam 어노테이션의 name 속성을 써줘야함을 알 수 있다.

 

요즘에는 외부 API를 호출할 수 있는 OkHttp 등 많은 라이브러리가 있지만 Feign을 적용해보는 것도 괜찮은 것 같다.

반응형

Designed by JB FACTORY