Spring 을 사용하게 되면서, resttemplate 를 사용하는 것을 보게 되었는데 자세히 알고 있지 않은듯하여 정리하게 되었다.
Spring에서 Rest방식의 API를 호출할 수 있게 해주는 Spring 내장 클래스이다. Rest API 서비스를 요청하여 응답받을 수 있으며, HTTP 프로토콜 메소드(GET, POST, DELETE, PUT)에 적합한 여러 메소드들을 제공한다. (*deprecated된다는 소문은 있었지만, 실제로 deprecated 되지 않았음.)
(1) 어플리케이션이 RestTemplate를 생성하여 URL, HTTP 메소드등을 헤더에 담아 요청을 보낸다.
(2) RestTemplate 이 HttpMessageConverter를 사용하여 request body에 담을 message(json등)로 변환한다. (이때 메세지 형태는 상황에 따라 다를 수 있다.)
(3) ClientHttpRequestFactory에서 ClientHttpRequest를 받아와서 요청을 전달하게 된다.
(4) ClientHttpRequest가 요청을 수행한다.
(5) RestTemplate이를 통해 ResponseErrorHandler에러를 핸들링해준다.
(6) ClientHttpResponse가 응답 데이터를 가져오고, 오류가 있으면 ResponseErrorHandler에서 처리한다.
(7) MessageConverter에서 response body의 message를 java object로 변환한다.
(8) 결과를 어플리케이션에 반환해준다.
RestTemplate restTemplate = new RestTemplate();
HttpEntity<Foo> request = new HttpEntity<>(new Foo("bar"));
Foo foo = restTemplate.postForObject(fooResourceUrl, request, Foo.class);
cc. https://dejavuhyo.github.io/posts/spring-resttemplate/ , https://sjh836.tistory.com/141