Feign이란
MSA환경에서는 각 서비스 간의 호출이 기존의 단일 시스템일 때보다 증가하게 됩니다. 이러한 상환에서 Feign은 API 간의 호출을 편하게 해 주기 위해서 만들어졌습니다. 기존에는 HttpClient의 설정을 Java에서 설정해주고 주입받아서 사용하는 방식을 해야 했습니다. 이 부분을 간편하게 바꿔주는 것이라고 생각하면 될 것 같습니다.
예시 코드
1. @EnableFeignClients 추가
@SpringBootApplication
@EnableFeignClients
public class Application {
public static void main(String ...args) {
SpringApplication.run(Application.class, args);
}
}
@EnableFeignClients는 root Package에 선언되어서 이후에 사용될 @FeignClient 어노테이션을 찾아서 등록하는 역할을 합니다. basePackages를 지정해서 사용할 수도 있습니다.
2. @FeignClient 등록
@FeignClient(name = "exampleClient", url = "https://marrrang.tistory.com")
public interface MarrrangClient {
@GetMapping(value = "/test", produces = "application/json", consumes = "application/json")
String testMethod(@RequestParam("key") String key);
@PostMapping(value = "/user", produces = "application/json", consumes = "application/json")
String registUser(@RequestHeader("auth-key") String authKey, @RequestBody User user);
}
- @FeignClient를 통해서 interface를 등록합니다.
- name : feignClient의 서비스 이름으로 필수로 작성해야합니다.
- url : 해당 interface를 통해 요청할 baseUrl입니다.
- qualifier : 해당 interface의 beanName을 등록할 수 있습니다.
- configuration : 커스터마이징 한 configuration을 넣을 수 있습니다.
- fallback : interface를 통해 요청하고 에러가 발생했을 때 이후 처리를 등록할 수 있습니다.
- @RequestHeader는 요청 시에 Header를 추가합니다.
- @RequestParam은 요청시에 파라미터를 추가합니다.
- @RequestBody는 요청시에 body를 통해 데이터를 추가합니다.
Config 등록하기
Feign에는 굳이 설정하지 않아도 기본 제공하는 기능들과 설정을 통해서 제공하는 기능들이 있습니다. 그중 설정을 해줘야만 사용할 수 있는 기능을 알아보겠습니다.
- Retryer : 재시도 알고리즘을 제공
- ErrorDecoder : Http 상태 코드에 따라서 예외로 매핑할 수 있게 해 준다.
- Request.Options : 요청의 readTimeout, connectionTimeout 시간을 설정할 수 있습니다.
- RequestInterceptor : RequestInterceptor를 등록해서 사용
YML 설정 방식
feign:
client:
config:
feignName:
connectTimeout: 5000
readTimeout: 5000
loggerLevel: full
errorDecoder: com.example.MyErrorDecoder
retryer: com.example.MyRetryer
decode404: false
encoder: com.example.MyEncoder
decoder: com.example.MyDecoder
contract: com.example.MyContract
Java Config 방식
@Configuration
public class FeignConfiguration {
@Bean
Retryer retryer() {
//(period, maxPeriod, maxAttempts)
return new Retryer.Default(1000, 5000, 3);
}
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
}
이렇게 등록한 Configuration을 @FeignClient 어노테이션의 configuration 속성에 등록하여 사용할 수 있습니다.
참조
반응형
'Web > 웹 상식' 카테고리의 다른 글
[Spring] @InitBinder에 대해서 (0) | 2022.03.31 |
---|---|
[Kubernetes] Kubernetes tls Secret 생성하기 (0) | 2021.12.29 |
URI와 URL의 차이 (0) | 2021.08.19 |
[GraphQL] GraphQL 처음 시작하기 (0) | 2021.08.12 |
HandlerMethodArgumentResolver에 대해서 (0) | 2021.07.13 |