개념
- 보다 쉽게 REST 클라이언트를 구현할 수 있도록 도와주는 자바 라이브러리
- 처음은 넷플릭스에서 자체적으로 개발한 오픈 소스 소프트웨어였다.
- 인터페이스 형태로 REST API 요청 메서드를 선언하면 런타임 시점에서 자동으로 구현체가 생성된다.
- Spring Data Jpa 처럼 단순히 인터페이스 선언만으로 REST API 호출기능을 구현할 수 있다.
- 스프링 프레임워크의 기본 웹 관련 여러 Annotation 들과 함께 사용한다.
- RestTemplate 같은 다른 REST 클라이언트 라이브러리와 유사하지만 훨씬 간편하고 몇가지 추가적인 기능도 제공한다.
- 요청/응답에 대한 매핑 지원, 자동 재요청, 로드 밸런싱 등
사용 방법
의존성
구현
@EnableFeignClients 선언
@FeignClient 선언과 REST Client 구현
@FeignClient(
name = "smody-api-caller",
url = "https://admin.smody.co.kr",
configuration = [FeignConfig::class]
)
interface SmodyApiCaller {
@GetMapping("/challenges")
fun getChallenges(
@RequestParam size: Int,
@RequestParam cursorId: Int
): List<SmodyRetrieveResponse.Challenge>
}
- 인터페이스에
@FeignClient
를 선언하고 관련 속성 값들을 설정한다.
- name : FeignClient 가 요청하는 서비스 이름을 명시하는 속성, 필수값이다.
- url : 요청을 보낼 서비스의 Base URL
- qualifier : FeignClient 의 Bean Name
- configuration : FeignClient 를 위한 커스텀 Configuration 클래스 세팅
- 인터페이스 메서드 형태로 REST Client 를 구현한다.
@RequestMapping
계열의 Annotation 을 사용하여 Path 를 설정할 수 있다.
- 기본적으로 Return 타입으로 선언한 dto 클래스로 결과가 자동 매핑되어 반환된다.
@RequestParam
, @PathVariable
, @RequestBody
등과 같은 Annotation 으로 요청에 필요한 값들을 매개변수로 설정할 수 있다.
Custom Configuration
@Configuration
class FeignConfig {
@Bean
fun options(): Request.Options {
return Request.Options(
3000L, TimeUnit.MILLISECONDS,
7000L, TimeUnit.MILLISECONDS,
false
)
}
}
@FeignClient
의 configuration
속성을 통해서 커스텀 Configuration 을 설정할 수 있다.
- 할 수 있는 설정들
- 요청 옵션 설정
- Connet Timeout, Read Timeout 등
feign.Requset.Options
빈 등록을 통해 설정 가능
- Basic Auth 설정
feign.auth.BasicAuthRequestInterceptor
빈 등록을 통해서 설정 가능
- 요청 헤더 설정
- 헤더 설정은 꼭 Configuration 을 통한 빈 등록으로 세팅할 필요없다.
@RequestHeader
Annotation 을 활용할 수도 있다.
- Decoder 설정
feign.codec.Decoder
빈 등록을 통해 설정 가능