준준의 기록일지

[Spring] RestTemplate 본문

스프링

[Spring] RestTemplate

junjunwon 2020. 8. 18. 15:05

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."




출처 : https://sjh836.tistory.com/141

 

RestTemplate (정의, 특징, URLConnection, HttpClient, 동작원리, 사용법, connection pool 적용)

참조문서 : https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html 1. RestTemplate이란? spring 3.0 부터 지원한다. 스프링에서 제공하는 http..

sjh836.tistory.com

 

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 등) 

  1. new URL ("http://.....")

  2. openConnection()

  3. URLConnection

  4. getInputStream, getOutputStream

  5. InputStream, OutputStream 처리

 

2-1-1. 문제점

- 응답코드가 4xx거나 5xx면 IOException이 터진다.

- 타임아웃을 설정할 수 없다.

- 쿠키 제어 불가.

 

2-2. HttpClient

- 3.x일땐 apache commons의 프로젝트였다가 승급해서 아파치 탑 프로젝트가 되었다 .4.x부터는 Apache HttpCOmponents로 불린다.

 

 

3. RestTemplate의 동작원리

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

 

 

1. 어플리케이션이 RestTemplate를 생성하고, URI, HTTP 메소드 등의 헤더를 담아 요청한다.

2. RestTemplate는 HttpMessageConverter를 사용하여 requestEntity를 요청메세지로 변환한다.

3. RestTemplate는 ClientHttpRequestFactory로부터 ClientHttpRequest를 가져와서 요청을 보낸다.

4. ClientHttpRequest는 요청메세지를 만들어 HTTP프로토콜을 통해 서버와 통신한다.

5. RestTemplate는 ResponseErrorHandler로 오류를 확인하고 있다면 처리로직을 태운다.

6. ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답데이터를 가져와 처리한다.

7. RestTemplate는 HttpmessageConverter를 이용해서 응답메세지를 java object(Class responseType)로 변환한다.

8. 어플리케이션에 반환된다.

 

4. RestTemplate 사용

기본 생성 : RestTemplate restTemplate =getRestTemplate();

 

예제는 참조사이트 확인하기.