관리 메뉴

wedul

Spring Rest Client Feign 소개 본문

web/Spring

Spring Rest Client Feign 소개

wedul 2018. 5. 27. 18:16
반응형


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 참조.








반응형