반응형
Feign는 넷플릭스에서 개발된 HTTP 클라이언트다.
Feign은 HTTP API 클라이언트를 간단하게 제공한다. Feign을 사용하기 위해서는 인터페이스를 선언하고, 어노테이션화 하면 이를 런타임에서 실제 구현을 제공된다.
Feign 라이브러리 추가
- feign-okhttp는 request를 만들기 위해서 내부적으로 Square OkHttp 클라이언트를 사용하기 위해 사용
- feign-gson은 JSON 처리기로서 Google Gson을 사용하기 위해 로드
- feign-slf4j는 request들을 로깅하기 위해서 라이브러리 사용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-okhttp</artifactId> <version>9.3.1</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-gson</artifactId> <version>9.3.1</version> </dependency> <dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-slf4j</artifactId> <version>9.3.1</version> </dependency> | cs |
Feign 인터페이스 추가
- Feign 클라이언트는 텍스트 기반 HTPP API이다. 그렇기 때문에 파일 다운로드나 업로드를 위한 binary data는 다룰 수 없다.
- 인터페이스에 메소드에 @ReqeustLine에 요청 method와 url을 기재해 준다.
- RequestLine에 기재된 사용 방법을 보면 다음과 같다.
1 2 | @RequestLine("GET /servers/{serverId}?count={count}") void get(@Param("serverId") String serverId, @Param("count") int count); | cs |
아래 Wedulpos에서 사용하는 API를 호출하는 인터페이스를 만들었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package com.wedul.common.util.rest; import feign.RequestLine; /** * Http Request Client * * @author wedul * */ public interface RestClientI { @RequestLine("POST /password/find") String findPassword(); } | cs |
Feign Client 호출
- 인터페이스 기반의 클리이언트를 구성하기 위해서 Feign.builder()을 사용할 수 있다.
- JSON/XML 등 여러 encoder와 decoder를 사용 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.wedul.wedulpos.user.test; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.wedul.common.util.rest.RestClientI; import com.wedul.wedulpos.user.CommonTestConfiguration; import feign.Feign; import feign.Logger; import feign.gson.GsonDecoder; import feign.gson.GsonEncoder; import feign.okhttp.OkHttpClient; import feign.slf4j.Slf4jLogger; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes= {CommonTestConfiguration.class}) public class FeignTest { RestClientI restClientI; @Before public void setUp() throws Exception { restClientI = Feign.builder() .client(new OkHttpClient()) .encoder(new GsonEncoder()) .decoder(new GsonDecoder()) .logger(new Slf4jLogger(RestClientI.class)) .logLevel(Logger.Level.BASIC) .target(RestClientI.class, "http://localhost:8080/wedulpos/user"); } @Test public void feignTest() { System.out.println("Feign test result : " + restClientI.findPassword()); } } | cs |
https 도 가능하다
자세한 예제는 https://github.com/OpenFeign/feign 참조.
반응형
'web > Spring' 카테고리의 다른 글
스프링 DispatcherServlet 설정 방법 (0) | 2018.05.27 |
---|---|
Spring Context 종류 및 특성 (0) | 2018.05.27 |
스프링 CacheManager Ehcache (0) | 2018.05.27 |
/과 /*의 차이점을 포함한 url-mapping 정리 (0) | 2018.05.27 |
Spring 비동기 프로세스 Callable, DeferredResult, SseEmitter (0) | 2018.05.27 |