RestTemplate이란 스프링 3.0부터 스프링에서 지원하는 http 통신에 유용하게 쓸 수 있는 템플릿이다.
HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다.
RestTemplate은 기본적으로 HttpUrlConnection으로 구현되어 있다. HttpUrlConnection이나 다른 HTTP client API를 사용하면 요청을 할 때마다 같은 과정의 코드를 반복해야 하지만
RestTemplate은 고수준 API이므로 위의 모든 과정을 백그라운드에 처리되도록 하고 개발자는 반복적 코드 작성을 피할 수 있다.
1. 어플리케이션이 RestTemplate를 생성하고, URI, HTTP 메소드 등의 헤더를 담아 요청한다.
2. RestTemplate는 HttpMessageConverter를 사용하여 requestEntity를 요청 메세지로 변환한다.
- HttpMessageConverter는 HTTP API처럼 JSON 데이터를 HTTP 메시지 바디 내 직접 읽거나 쓰는 경우 사용.
requestEntity를 canRead()를 사용해 읽고 메세지로 반환
3. RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보낸다.
- ClientHttpRequest = 클라이언트 요청
4. ClientHttpRequest 는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신한다.
5. RestTemplate 는 ResponseErrorHandler 로 오류를 확인하고 있다면 처리로직을 태운다.
6. ResponseErrorHandler 는 오류가 있다면 ClientHttpResponse 에서 응답데이터를 가져와서 처리한다.
7. RestTemplate 는 HttpMessageConverter 를 이용해서 응답메세지를 java object(Class responseType) 로 변환한다.
8. 어플리케이션에 반환된다.
https://velog.io/@lilseongwon/%EC%8A%A4%ED%94%84%EB%A7%81-RestTemplate2-%EC%98%88%EC%A0%9C