[Spring Boot] RestTemplate (1)

smlee·2022년 7월 25일
0

SpringBoot - JDBC

목록 보기
7/8

오픈 API를 사용하거나 서버 아키텍처가 MSA와 같은 형태라면 서버와 서버 간의 HTTP 호출이 필요해진다. 이렇게 다른 서버의 API endpoint를 호출할 때 RestTemplate을 많이 쓴다.

❓ RestTemplate이란?

Spring에서 제공하는 HTTP ClientREST API를 호출하기 위한 함수를 제공하는 클래스이다. 고수준의 API를 제공하므로 API endpoint 호출을 간잔하게 처리해준다.

Spring 4.x부터 지원하는 Spring의 HTTP 통신 템플릿으로, HTTP 요청 후 JSON, XML, String과 같은 응답을 받을 수 있는 템플릿이다. RestTemplate은 이름처럼 RESTful 형식을 지원한다. 또한, 반복적인 코드를 줄여주고, Blocking I/O기반의 Synchronouse API이다.

RestTemplate와의 다른 HTTP Client로는 HttpURLConnection, HttpClient(HttpComponent), WebClient(이때, WebClient는 NonBlocking 방식이며, 비동기 역시 지원하는 http client이다.) 등이 있다.

👩‍💻 RestTemplate의 동작


1. 애플리케이션 내부에서 REST API에 요청하기 위해 RestTemplate의 메서드를 호출한다.
2. RestTemplate은 MessageConverter를 이용해 java object를 request body에 담을 message(JSON etc.)로 변환한다. 메시지 형태는 상황에 따라 다름
3. ClientHttpRequestFactory에서 ClientHttpRequest을 받아와 요청을 전달한다.
4. 실질적으로 ClientHttpRequest가 HTTP 통신으로 요청을 수행한다.
5. RestTemplate이 에러핸들링을 한다.
6. ClientHttpResponse에서 응답 데이터를 가져와 오류가 있으면 처리한다.
7. MessageConverter를 이용해 response body의 message를 java object로 변환한다.
8. 결과를 애플리케이션에 돌려준다.

💻 RestTemplate Method

  • get 요청에서 헤더를 적용하고 싶을 경우 exchange 메서드를 사용한다.
  • 응답 타입을 지정하면 자동으로 object 매핑을 해준다.
  • exchange는 ResponseEntity를 반환하는데 ResponseEntity안에 담긴 응답 바디의 타입을 지정할 수 있다.

0개의 댓글