본문 바로가기

심화 캠프 정리

RestTemplate vs FeignClient

외부 API를 사용할때 사용해본적이 없는 두가지의 두가지의 통신 방법을 잘 몰라서 각 방법에 대해 장단점에 대해서 정리 

1. RestTemplate

RestTemplate은 Spring의 HTTP 요청을 위한 동기식 템플릿으로, RESTful 서비스와의 통신을 쉽게 만들어 준다

특징

  • 직접 구성 필요: 헤더, 요청 본문 등을 수동으로 구성해야 한다
  • 구조화된 API 호출: GET, POST, PUT, DELETE 등 HTTP 메서드에 대한 다양한 메서드를 제공
  • 직접적인 제어 가능: 클라이언트 요청/응답 처리를 세밀하게 제어 가능

장점

  • 코드가 명확하고 심플하며 Spring 프로젝트에서 기본적으로 제공
  • 통신 로직이 단순한 경우 유리
  • Spring의 기존 라이브러리와의 호환성 보장

단점

  • 매번 요청/응답 객체를 설정해야 하므로 코드가 장황해질 수 있음
  • 외부 API 호출 설정을 코드 내에서 모두 관리해야 함
  • 재사용성과 가독성이 떨어질 수 있음

FeignClient

FeignClient는 Netflix OSS에서 제공하며, 선언적 HTTP 클라이언트로 외부 API 호출을 간단하게 설정할 수 있다

특징

  • 선언적 인터페이스 사용: 인터페이스와 애노테이션 기반으로 API 호출을 정의
  • 간단한 사용법: 복잡한 로직을 인터페이스와 메서드 수준의 설정으로 대체
  • Spring Cloud와의 통합: Spring Cloud 프로젝트에서 주로 사용되며, Ribbon, Eureka와 같은 도구와 자연스럽게 연동

장점

  • 코드가 간결하며 가독성이 좋음
  • 공통 설정(헤더, 로깅, 에러 처리 등)을 한 곳에서 관리 가능
  • 유지보수가 쉬움

단점

  • 동작이 추상화되어 있어 디버깅이 어렵거나 동작이 명확하지 않을 수 있음
  • 동적인 요청 구성이 필요한 경우에는 제약이 있을 수 있음

RestTemplate vs FeignClient: 비교

구성 방식 직접 요청/응답을 구성 선언적 인터페이스 사용
코드 간결성 코드가 다소 장황 코드가 매우 간결
유지보수성 코드 수정 시 여러 곳 수정 필요 인터페이스만 수정하면 됨
Spring Cloud 통합 직접 Ribbon 등 추가 설정 필요 자동 통합 지원
동적 요청 처리 유연한 동적 요청 처리 가능 제한적 (동적 경로나 헤더가 복잡하면 불편)
성능 비슷하지만 간단한 호출의 경우 Feign이 유리 비슷하지만 복잡한 호출은 RestTemplate 유리

 

프로젝트에서 어떤 것을 선택할까?

  • 단순한 API 호출: FeignClient가 적합합니다. 코드가 간결하고 유지보수하기 쉽다
  • 동적/복잡한 요청 구성 필요: RestTemplate이 더 유연하며 세밀한 제어가 가능하다
  • Spring Cloud 사용 여부: Spring Cloud 프로젝트에서는 FeignClient가 더 자연스럽게 통합된다

'심화 캠프 정리' 카테고리의 다른 글

ModelAttribute  (0) 2024.11.20
PageableArgumentResolver  (0) 2024.11.20
동적쿼리 BooleanExpression  (0) 2024.11.20
동적쿼리 OrderSpecifier  (0) 2024.11.20
PreAuthorize  (2) 2024.11.19