Spring 애플리케이션에서 사용할 수 있는 HTTP Client에 대해 정리합니다.
아래에 나오는 각 HTTP Client 별 상세 설명은 노션에서 확인하실 수 있습니다.
HTTP Client 목록
- {클래스명} : {의존성}
- RestTemplate : spring-web
- WebClient : spring-webflux
- RestClient : spring-web (Spring Boot 3.1 이상부터 지원)
- HttpInterface
- Spring Boot 3.1 이상일 경우 spring-web (내부 구현체 : RestClient)
- Spring Boot 3.0 이하일 경우 spring-webflux (내부 구현체 : WebClient)
- OpenFeign : spring-cloud
- required
- openjdk-21 install
- optional
- IntelliJ Ultimate install
git clone https://github.com/2dongyeop/spring-cloud-openfeign.git
이 프로젝트는 요청 서버와 응답 서버를 모두 실행해야 따라하실 수 있습니다.
# 1. 요청 서버 프로젝트로 이동
$ cd spring-cloud-openfeign/request-server
# 2. Open in IDE
# 3. Project Setting (JDK 21, etc...)
# 4. Run Spring Application
# 5. 응답 서버도 1~4를 반복
모든 HTTP Client 별 요청은 REST API를 호출하면서 동작을 확인할 수 있도록 작성하였습니다.
- request-server/http 디렉토리에 생성된 .http 파일을 이용하면 편리하게 API를 호출할 수 있습니다.
- 각 HTTP Client 별 Retry(재시도), 타임아웃(Timeout), 에러 핸들링에 초점을 맞추어 보시길 바랍니다.
- 각 HTTP Client 마다 장단점을 비교해보시길 바랍니다.
- 의존성을 필요로 하는게 부담스럽지는 않은지
- 비동기로 동작을 지원하는/지원하지 않는게 현재 자신의 상황에 적합한지
- JDK/Spring Boot 특정 버전 이상만 사용 가능한 점이 단점은 아닌지
- 애너테이션으로 선언형을 이용할 경우 얼마나 많은 코드를 줄이고 유연하게 작성할 수 있는지
- RestTemplate
- WebClient
- RestTemplate 비교
- WebClient 특징
- WebClient 활용 코드
- 의존성 추가
- 로그 레벨 수정
- 설정 클래스 작성
- 실제 사용 코드
- WebClient 단점
- RestClient
- RestClient 소개 및 특징
- RestClient 활용 코드
- 의존성 추가
- 로그 레벨 수정
- 재시도(Retry) 구현
- 설정 클래스 작성
- 실제 사용 코드
- RestClient 단점
- HttpInterface
- HttpInterface 소개 및 특징
- HttpInterface 활용 코드
- 의존성 추가
- 로그 설정
- HttpInterface 정의
- HttpInterface Custom Builder 작성
- 실제 사용 코드
- HttpInterface 단점
- OpenFeign
- OpenFeign 소개
- OpenFeign 기능
- OpenFeign 활용 코드
- 의존성 추가
- Feign Client 활성화 및 정의
- 타임아웃, 로그 설정
- 재시도(Retry) 설정
- RequestInterceptor 작성
- Error Handling 설정
- OpenFeign 장점 및 기능 정리
- 참고 자료