개요

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;
	}
}

+ Recent posts