HTTP Client 비교
HTTP Client 비교
개요
신규 프로젝트와 채팅 서버가 통신하기 위해서 API를 주고 받는 과정이 있다. 기존 채팅 시스템에서는 Retrofit2
을 사용했으나, 런칭한지도 꽤 되었고 그 사이에 다른 라이브러리나 오픈소스가 생겼을 것 같아 조사해보고 검토한 뒤에 적용해 볼까하는 생각으로 조사하였음.
종류
1. RestTemplate
RestTemplate
은 Spring Framework에서 제공하며, 동기식 HTTP 통신을 위한 클라이언트이다.
- 스프링 3.0에서 추가되었다.
- 주로 Spring MVC 기반의 애플리케이션에서 사용
- 다양한 HTTP 메서드(GET, POST, PUT, DELETE)를 지원
- HttpClient를 추상화하여 제공한다.
- 동기식으로 동작하기 때문에, 응답을 받을때까지 대기하며 스레드를 차단함. (성능 이슈 가능성)
- Spring Framework 5.0부터 RestTemplate은 유지관리모드(제거되지 않는 상태)에 있다
- 대안 기술로 WebClient를 고려 해보라고 한다.
2. WebClient
Spring Framework 5.0부터 도입된 Http 클라이언트 라이브러리로, 비동기/논블로킹 방식으로 API 호출이 가능하다. (동기식도 가능)
- 비동기 및 리액티브 스트림 처리를 지원
- 대량의 요청을 효과적으로 처리할 수 있다.
- RestTemplate의 대안으로 거론됨
- 웹플럭스(webflux)를 추가해야만 사용 가능함 (= webflux 모듈 의존성이 추가된다)
3. OkHttp & Retrofit
OkHttp는 Squre사에서 개발한, Android 및 Java 전용 type-safe Http 클라이언트 라이브러리이다.
Retrofit은 OkHttp를 조금 더 추상화하여 직관적이고 편리하게 사용할 수 있다. (즉, retrofit 또한 내부적으로 okhttp를 사용)
- HTTP API를 자바 인터페이스 변환해주는 선언적 웹 서비스 클라이언트이다.
- 간단한 API 인터페이스를 통해 안정적인 네트워크 요청을 처리할 수 있다.
- 성능이 우수하고 사용이 간편하다.
- Spring Framework의 기본 지원 범위가 아니고, 별도로 라이브러리를 추가해야 한다. (호환성 검토 필요)
4. (Spring Cloud) OpenFeign
Feign은 Netflix에서 개발한 HTTP 클라이언트 binder이다.
HTTP 클라이언트를 쉽게 작성할 수 있는 선언적 HTTP 클라이언트이다.
현재 Feign은 Spring Cloud echo 시스템에 통합되었고 Netflix에서 사용을 중단하면서 OpenFeign이라는 오픈 소스 커뮤니티의 프로젝트로 이전되었다.
- annotation을 통해 다양한 옵션을 간단히 처리할 수 있다.
- 구현 코드 없이 로직을 명확히 이해 가능하도록 유도 (인터페이스 작성을 통한 구현체 자동 생성)
- 다른 Spring Cloud 기술들과 통합이 쉽다.
- 기본적으로 동기로 동작하므로, 선언적 구문을 통한 비동기를 활용하려면 Feign Reactive 사용