RestTemplate란

정신차룟·2021년 2월 19일

1. RestTemplate이란?

spring 3.0 부터 지원한다. 스프링에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿이며, HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다. jdbcTemplate 처럼 RestTemplate 도 기계적이고 반복적인 코드들을 깔끔하게 정리해준다. 요청보내고 요청받는데 몇줄 안될 정도..

특징

기계적이고 반복적인 코드를 최대한 줄여줌
RESTful형식에 맞춤
json, xml 를 쉽게 응답받음

2. HTTP 서버와의 다양한 통신방법

2-1. URLConnection

jdk 1.2 부터 내장되어 있으며, java.net 패키지에 있다. URL의 내용을 읽어오거나, URL 주소에 GET, POST로 데이터를 전달 할 때 사용한다. 또한 http 프로토콜 이외에도 가능하다.(file 등) 보통 아래와 같이 사용한다.

new URL("http:// ....")
openConnection()
URLConnection
getInputStream, getOutputStream
InputStream, OutputStream 처리

2-1-1. 문제점

응답코드가 4xx 거나 5xx 면 IOException 이 터진다.
타임아웃을 설정할 수 없다.
쿠키 제어가 불가

2-2. HttpClient

3.x일 땐 apache commons 의 프로젝트였다가 승급해서, 아파치 탑 프로젝트가 되었다. 4.x부터는 Apache HttpComponents 로 불린다. maven dependency 를 설정하거나, http://hc.apache.org/downloads.cgi 에서 다운로드할 수 있다. org.apache.http 패키지에 있다.보통 아래처럼 사용한다.

CloseableHttpClient httpclient = HttpClients.createDefault();
메소드에 따라 new HttpGet("http:// ....");
CloseableHttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
Stream으로 entity.getContent() 처리 등

2-2-1. URLConnection 와 비교하였을 때 장점

모든 응답코드를 읽을 수 있다. httpResponse.getStatusLine().getStatusCode()
타임아웃 설정 가능
쿠키 제어가 가능

2-2-2. 문제점

URLConnection 을 이용한 방식보다 코드가 간결해졌지만, 여전히 반복적이고 코드들이 길다.
스트림 처리 로직을 별도로 짜야한다. (EntityUtils 를 쓰면 되는거 같긴하지만)
응답의 컨텐츠타입에 따라 별도 로직이 필요하다. (RestTemplate 가 이때 유용!!)

3. RestTemplate 의 동작원리

org.springframework.http.client 패키지에 있다. HttpClient는 HTTP를 사용하여 통신하는 범용 라이브러리이고, RestTemplate은 HttpClient 를 추상화(HttpEntity의 json, xml 등)해서 제공해준다. 따라서 내부 통신(HTTP 커넥션)에 있어서는 Apache HttpComponents 를 사용한다. 만약 RestTemplate 가 없었다면, 직접 json, xml 라이브러리를 사용해서 변환해야 했을 것이다.

출처: https://sjh836.tistory.com/141 [빨간색코딩]

profile
Young Min

0개의 댓글