외부 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 |