[Spring Cloud] feign 기본 사용 방법
Spring Cloud feign에 대해서 알아보자. feign은 ~체하다 라는 뜻으로, netflix에서 개발한 일종의 restTemplate와 비슷하다고 본다.
비교적 쉬운 설정으로 비즈니스 로직에만 집중할 수 있다는 장점이 있다.
라이브러리 추가
다음과 같이 라이브러리를 추가한다.
1 | <dependency> |
이렇게 프로젝트를 시작하면 다음과 같은 에러가 날 수 있다.
1 | java.lang.NoSuchMethodError: 'void org.springframework.boot.builder.SpringApplicationBuilder.<init>(java.lang.Object[])' |
아마, boot 스타터 의존성을 물고 있고, boot 버전이 2.3.4인거에 비해서, spring-cloud-starter-feign
은 1.4.7 이기 때문이라는 것 같다.
spring-cloud.version과 dependencyManagement를 추가한다.
1 | <properties> |
예제
실제 api를 만드는 것은 수고스럽기 때문에, jsonplaceholder 에서 fake로 REST API를 call 할 수 있다.
https://jsonplaceholder.typicode.com/users 요청하면 Json형태로 정의된 오브젝트를 볼 수 있다.
⚠️ 보기 불편하다면 크롬 익스텐션의 jsonformatter 이거를 설치
참고로 json 형식을 dto 오브젝트로 변환해 주는 사이트가 존재한다.
http://www.jsonschema2pojo.org/ 해당 사이트에서 json을 pojo dto로 변환하면 편하다!
물론 IntelliJ plugin 에서도 제공한다. Json2Pojo
@EnableFeignClient 추가
1 |
|
⚠️ feign client는 text-base HTTP API에만 사용되기 때문에, binary data와 같은 file upload , download에는 사용할 수 없다.
인터페이스 정의!!
1 |
|
main 클래스 @EnableFeignClient에 의해서 @FeingClient로 등록된 빈을 찾아서 등록한다. url은 endpoint의 baseURL이라고 생각하면 된다.
실제 요청할 API가 GET
방식의 https://jsonplaceholder.typicode.com/users
이기 때문에 그것에 맞춰 @GetMapping(“/users”)로 코드를 작성했다.
실제 컨트롤러 작성
1 |
|
앞에서 작성했던 UserClient (인터페이스만 정의함)를 빈으로 주입해서, 우리의 컨트롤러에 적용한다.
프로젝트를 실행하고 http://localhost:8080/findAllUsers
를 요청하면 데이터가 제대로 나오는지 확인한다!
더 알아볼것
- header, parameter, pathvariable와 같은 endpoint 사용하는 방법
- restTemplate의 retry option, 실패시 처리에 관해서
[Spring Cloud] feign 기본 사용 방법