반응형
개요
Spring Cloud OpenFeign에 관해 간단하게 알아보자.
- 목차
- OpenFeign 이란?
- 기본설정
- 사용법
- 기타설정
OpenFeign 이란?
- 외부 API 호출을 쉽게할 수 있도록 도와주는 HTTP 클라이언트 도구로 어노테이션으로 손쉽게 구현가능하다. Spring Cloud에서 Open Feign을 스프링 클라우드로 통합하였다.
기본설정
- spring-cloud-dependencies 와 openfeign 의존성 추가를 해준다.
// Gradle 기준 예시
compile("org.springframework.cloud:spring-cloud-dependencies:Finchley.SR3")
compile("org.springframework.cloud:spring-cloud-starter-openfeign:2.1.4.RELEASE")
- Application 파일에 @EnableFeignClients 어노테이션을 추가해준다.
@SpringBootApplication
@EnableFeignClients // 요거 추가 필요.
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
사용법
jpa 사용법과 유사하다.
interface 를 만들고,
@FeignClient 어노테이션을 정의하고
호출하기만 하면 된다.
// 동일한 도메인을 이용하는 여러 API의 경우 @FeignClient URL 속성에 공통부분을 적어주고,
// interface 내부에 메서드를 정의할 때 개별 url 뒷부분의을 적어주면 이용 가능하다.
@FeignClient(name = "testApi", url = "https://api.test.com", configuration = TestApi.Configuration.class)
public interface TestApi {
@GetMapping(value = "/abc/auth", headers = "Accept=application/json")
String getAuth(@RequestHeader("aaa") String param1, @RequestHeader("bbb") String param2); // 헤더에 들어갈 파라미터를 정의할 수도 있다.
@GetMapping(value = "/def/select", headers = "Accept=application/json")
List<UserDao> getSelect(@SpringQueryMap UserDao param);
// interface 내에 설정을 정의할 수도 있다.
class Configuration {
@Bean
Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
}
위 클래스 안의 메서드를 호출하기만 하면 API 통신이 가능하다.
기타설정
타임아웃 설정
OpenFeign 이 제공하는 타임아웃은 두 종류가 있다.
- connectTimeout: 1000
- readTimeout: 30000
시간은 ms 기준으로, 1000 = 1초 이다.
설정은 properties 파일과 java Configuration 에서도 가능하며, properties가 우선순위를 가진다.
각 클라이언트 별로 다른 설정이 필요하면 @FeignClient 에 직접 Configuration을 설정하면 된다.
#yml 사용 예
feign:
client:
config:
default:
connectTimeout: 15000
readTimeout: 15000
로그설정
로그는 각각의 Feign client 마다 만들어지며 기본적으로 로그의 이름은 Feign client를 사용하는 인터페이스 명이다. Feign logging 은 오직 DEBUG level 에서 동작한다.
- NONE : 로그 없음 (기본)
- BASIC : 요청 메서드와 URL, 응답 상태코드와 실행 시간만 남긴다.
- HEADERS : 요청, 응답 헤더와 가본정보들만 남긴다.
- FULL : 헤더, 바디, 요청과 응답의 메타 데이터 모두 남긴다.
다음은 full 속성으로 로그를 설정한 예제이다.
@Configuration
public class FooConfiguration {
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
반응형