[Spring] HTTP Client - RestTemplate

김강욱·2024년 4월 29일
0

Spring

목록 보기
3/17

😁 RestTemplate란?

RestTemplate은 스프링 3.0 버전부터 지원하는 라이브러리로, 자바에서 RESTful 웹 서비스와 동기적으로 HTTP 통신을 할 수 있게 해줍니다.

즉, RestTemplate을 사용하면 HTTP 요청을 보내고 해당 요청이 완료될 때까지 현재 스레드가 대기하게 됩니다. 자바에서 비동기적으로 웹 서비스와 통신하고 싶다면 WebClient를 사용하시면 됩니다. WebClient는 스프링 5에서 도입된 WebFlux 모듈의 일부로, 비동기적으로 서버와 통신할 수 있게 해줍니다.

😁 Restemplate 특징

1. 동기 방식

RestTemplate은 기본적으로 HTTP 요청을 처리하는 동안 호출 스레드가 블로킹되어 동기적으로 동작하게 됩니다.

2. 다양한 HTTP 메서드 지원

GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 사용하여 웹 서비스를 호출할 수 있게 해줍니다.

3. JSON,XML,문자열 등의 다양한 형식의 응답 데이터 바인딩

RestTemplate은 자동으로 JSON이나 XML과 같은 데이터를 자바 객체로 매핑할 수 있습니다. HttpMessageConverter 인터페이스를 사용하여 데이터 변환을 처리할 수 있습니다.

4. 헤더 및 요청 매개변수 설정 가능

RestTemplate은 HTTP 요청을 보낼 때 헤더 값이나 URL 매개변수를 자유롭게 조정할 수 있어, API 호출에 유연성을 제공해줍니다.

5. HttpClient 등 HTTP 클라이언트 라이브러리 추상화로 간단히 사용 가능

HttpClient는 HTTP 프로토콜을 사용하여 웹 서버와 통신하기 위한 라이브러리입니다. RestTemplate은 다양한 HTTP 클라이언트 라이브러리들(Ex - Apache HttpClient)을 추상화하여 웹 서버와의 통신을 간소화하고, 사용자가 쉽게 HTTP 요청을 구성하고 응답을 처리할 수 있게 해줍니다.

이런 추상화 덕분에 복잡한 설정 없이 다양한 HTTP 메서드를 사용하여 웹 서비스와의 상호작용을 직관적으로 수행할 수 있게 합니다.

😁 RestTemplate 동작 원리

출처 : soosungp33님의 스프링 RestTemplate 정리

1. Restemplate 인스턴스 생성

애플리케이션 단에서 RestTemplate 인스턴스를 생성합니다. ClientHttpRequestFactory와 같은 구성 요소를 설정할 수 있습니다.

2. HTTP 요청 준비

애플리케이션 단에서 URI, HTTP 메서드, 필요한 경우 HTTP 헤더와 바디를 포함한 HttpEntity 객체를 생성합니다.

3. 메시지 변환

RestTemplate은 설정된 HttpMessageConverter 목록을 사용해 주어진 요청 데이터를 HTTP 요청 메시지로 변환합니다. 변환 과정은 요청 데이터의 타입과 HTTP 요청의 Content-Type에 따라 달라집니다.

4. 요청 전송

RestTemplateClientHttpRequestFactory를 통해 ClientHttpRequest를 생성하고, 이를 사용하여 변환된 요청 메시지를 서버로 전송합니다. 이 과정에서 HTTP 프로토콜을 사용하며, 네트워크를 통해 실제 서버와 통신이 이루어집니다.

5. 오류 처리

서버로부터의 응답을 받은 후, RestTemplateResponseErrorHandler를 사용하여 응답에 오류가 있는지 검사합니다. 오류가 발견되면 적절한 예외를 생성하고 처리 로직을 실행합니다.

6. 응답 처리

정상적인 응답일 시 RestTemplateHttpMessageConverter를 사용하여 서버로부터 받은 응답 메시지를 Java 객체로 변환합니다. 응답 타입은 요청 시 지정된 클래스 타입에 따라 결정됩니다.

7. 결과 반환

변환된 응답 객체가 최종적으로 애플리케이션에 반환됩니다. 애플리케이션에서는 이 데이터를 사용하여 다음 작업을 수행합니다.

예시 코드


😁 RestTemplate 메서드

출처 : soosungp33님의 스프링 RestTemplate 정리

profile
TO BE DEVELOPER

0개의 댓글

관련 채용 정보