[Spring] Feign-Client 도입기

윤성철·2024년 6월 20일

Back-End

목록 보기
7/22
post-thumbnail

서론

기존의 사내 레거시 코드에서 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란 Netflix에서 개발한 Http Client 입니다.
    인터페이스를 작성하고 어노테이션을 통해 따로 구현체 없이 Http Client 를 구현 할 수 있습니다.
    여기서 Http Client 란 간단히 얘기해서 특정 프로그램에서 Http 요청을 간편하게 만들어서 보낼 수 있도록 돕는 객체라고 생각하시면 됩니다.
    원래는 Netflix 에서 자체적인 개발을 진행했지만 현재는 오픈 소스로 전환되어 SpringCloud 프레임 워크의 프로젝트 중 하나로 들어가있다.

👍 Feign Client의 장점

  • Spring MVC에서 제공되는 어노테이션을 그대로 사용할 수 있다.
    @GetMapping, @PostMapping

  • 기존에 사용되던 HttpClient 보다 더 간편하게 사용될 수 있으며 가독성 측면에서 뛰어나다다.

  • 커스텀이 간편하다.

사용법 ⛏️

  • build.gradle 의존성 추가

  • @EnableFeignClients

해당 어노테이션을 선언하면 @feignclient 어노테이션이 명시돼있는 interface를 찾아 자동으로 구현해준다. 💯(굉장히 편리함)

  • feign client 인터페이스 작성
@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);  
       }
    }
    

    코드 가독성, 편리함, 커스터마이징, 속도 등 다양한 측면에서 범용성이 좋고 확장성이 넓은 오픈소스라고 생각한다.

profile
내 기억보단 내가 작성한 기록을 보자..

0개의 댓글