
기존의 사내 레거시 코드에서 HttpUrlConnection 객체를 생성하고 setter를 통해 값을 담아 httpmethod를 파라미터로 외부 api request를 날린다. 😢 함께 개발한 팀원이 서비스 계층에서 외부 api를 2번 호출하기 때문에 성능이 더 좋은 방법을 고려하면서 찾던 중, Netflix에서 사용하는 오픈소스인 feign-client를 도입하자고 의견을 제시했다.
Feign Client란? -참고 : https://velog.io/@choidongkuen/FeignClient-%EC%82%AC%EC%9A%A9%EB%B2%95%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B4%85%EC%8B%9C%EB%8B%A4.-Spring-Cloud-OpenFeign
👍 Feign Client의 장점
Spring MVC에서 제공되는 어노테이션을 그대로 사용할 수 있다.
@GetMapping, @PostMapping
기존에 사용되던 HttpClient 보다 더 간편하게 사용될 수 있으며 가독성 측면에서 뛰어나다다.
커스텀이 간편하다.
사용법 ⛏️


해당 어노테이션을 선언하면 @feignclient 어노테이션이 명시돼있는 interface를 찾아 자동으로 구현해준다. 💯(굉장히 편리함)
@FeignClient(name= "{}", url = "{request 날릴 도메인:port}"
public interface ApiClient {
@GetMapping("/{endpoint}")
ResponseDto apiRequest(RequestDto request);
//== Request 객체와 Response객체를 생성해서 커스터마이징이 가능하다.
@PostMapping()
....
request, response 객체를 List<> 배열로 만들어서 Bulk로 요청을 날릴 수 있다고한다.
의존성 주입 후 사용
@RequiredArgsConstructor
@RestController
public class apiController {
private final ApiClient apiclient;
//예시 코드
public ResponseDto getSomething(SendDto sendDto){
ResponseDto response = apiclient.apiRequest(sendDto);
}
}
코드 가독성, 편리함, 커스터마이징, 속도 등 다양한 측면에서 범용성이 좋고 확장성이 넓은 오픈소스라고 생각한다.