RestTemplate
은 스프링 3.0 버전부터 지원하는 라이브러리로, 자바에서 RESTful 웹 서비스와 동기적으로
HTTP 통신을 할 수 있게 해줍니다.
즉, RestTemplate
을 사용하면 HTTP 요청을 보내고 해당 요청이 완료될 때까지 현재 스레드가 대기하게 됩니다. 자바에서 비동기적으로 웹 서비스와 통신하고 싶다면 WebClient
를 사용하시면 됩니다. WebClient
는 스프링 5에서 도입된 WebFlux
모듈의 일부로, 비동기적으로 서버와 통신할 수 있게 해줍니다.
RestTemplate
은 기본적으로 HTTP 요청을 처리하는 동안 호출 스레드가 블로킹되어 동기적으로 동작하게 됩니다.
GET, POST, PUT, DELETE
등 다양한 HTTP 메서드를 사용하여 웹 서비스를 호출할 수 있게 해줍니다.
RestTemplate
은 자동으로 JSON이나 XML과 같은 데이터를 자바 객체로 매핑할 수 있습니다. HttpMessageConverter
인터페이스를 사용하여 데이터 변환을 처리할 수 있습니다.
RestTemplate
은 HTTP 요청을 보낼 때 헤더 값이나 URL 매개변수를 자유롭게 조정할 수 있어, API 호출에 유연성을 제공해줍니다.
HttpClient
는 HTTP 프로토콜을 사용하여 웹 서버와 통신하기 위한 라이브러리입니다. RestTemplate
은 다양한 HTTP 클라이언트 라이브러리들(Ex - Apache HttpClient)을 추상화하여 웹 서버와의 통신을 간소화하고, 사용자가 쉽게 HTTP 요청을 구성하고 응답을 처리할 수 있게 해줍니다.
이런 추상화 덕분에 복잡한 설정 없이 다양한 HTTP 메서드를 사용하여 웹 서비스와의 상호작용을 직관적으로 수행할 수 있게 합니다.
출처 : soosungp33님의 스프링 RestTemplate 정리
애플리케이션 단에서 RestTemplate
인스턴스를 생성합니다. ClientHttpRequestFactory
와 같은 구성 요소를 설정할 수 있습니다.
애플리케이션 단에서 URI, HTTP 메서드, 필요한 경우 HTTP 헤더와 바디를 포함한 HttpEntity
객체를 생성합니다.
RestTemplate
은 설정된 HttpMessageConverter
목록을 사용해 주어진 요청 데이터를 HTTP 요청 메시지로 변환합니다. 변환 과정은 요청 데이터의 타입과 HTTP 요청의 Content-Type에 따라 달라집니다.
RestTemplate
은 ClientHttpRequestFactory
를 통해 ClientHttpRequest
를 생성하고, 이를 사용하여 변환된 요청 메시지를 서버로 전송합니다. 이 과정에서 HTTP 프로토콜을 사용하며, 네트워크를 통해 실제 서버와 통신이 이루어집니다.
서버로부터의 응답을 받은 후, RestTemplate
은 ResponseErrorHandler
를 사용하여 응답에 오류가 있는지 검사합니다. 오류가 발견되면 적절한 예외를 생성하고 처리 로직을 실행합니다.
정상적인 응답일 시 RestTemplate
은 HttpMessageConverter
를 사용하여 서버로부터 받은 응답 메시지를 Java 객체로 변환합니다. 응답 타입은 요청 시 지정된 클래스 타입에 따라 결정됩니다.
변환된 응답 객체가 최종적으로 애플리케이션에 반환됩니다. 애플리케이션에서는 이 데이터를 사용하여 다음 작업을 수행합니다.
출처 : soosungp33님의 스프링 RestTemplate 정리