본문 바로가기

백엔드 개발/SpringMVC

Rest-Template란 무엇인가

스프링에서 제공하는 HTTP Client REST API 호출에 필요한 함수를 제공하는 클래스이다.

HTTP Client Rest API란?

먼저 웹이 어떻게 돌아가는지 살펴봐야한다. 웹은 클라이언트와 서버로 나뉜다. 클라이언트 부분은 사용자에게 필요한 정보를 서버에게 요청하고, 서버는 그에 맞는 데이터를 클라이언트에게 제공한다. 해당 과정에서 클라이언트가 서버에게 원하는 정보를 요청하는 부분을 HTTP Client REST API라고 한다.

  우리가 사용하려는 SPRING은 백엔드 프레임워크로 서버의 역할을 담당하는 경우가 많지만, 때에 따라서 외부 API에게 데이터를 요청해야하는 클라이언트의 역할을 해야할 수도 있다. 원래 JAVA에서는 URLConnect나 HTTPClient 같은 클래스를 사용하여 HTTP Client REST API를 했었는데, Spring 프레임워크를 사용하면, 이 두 가지보다 훨씬 편한RestTemplate를 사용 가능하다.(URLConnect나 HttpClient 써보고 오면 느끼겠지만, 함수가 훨씬 잘 되어있다. ㄷㄷㄷ )

그러면, REST-Template가 제공하는 함수에는 무엇이 있는지 확인해보자.

1. 보유 매소드

2. RestTemplate의 동작 원리

  1. RestTemplate 생성 및 메타 데이터 세팅
    우리가 만든 Application 내부에서 다른 서버에 REST API 요청을 보내기 위해 RestTemplate의 매서드를 호출한다. 이때 REST Template가 생성되고, 도착해야하는 URI, HTTP 매소드 등을 Template Header에 담는다. (REST Template이란 우리가 REST 요청을 보내는 것을 수월하게 하기 위한 하나의 양식이라 생각하는 편이 편하다.)
  2. Request 내용물을 담은 java 객체를 진짜 RequestBody에 담을 메세지 타입으로 변환
    RestTemplate는 MessageConverter를 이용해 java 객체로 되어있는 requestEntity를 request body에 담을 message(예를 들어 JSON 형태)로 변환한다. 메세지 형태는 상황에 따라 다르다.
  3. 배달부를 불러서 배달할 소포를 전달.
    ClientHttpRequestFactory가 ClientHttpRequest를 받아와서 2번에서 만든 Message를 전달한다.
  4. 배달부가 소포를 전달하고, 답장을 들고옴
    이제 실질적으로 ClientHttpRequest가 HTTP 통신으로 요청을 수행한다.
  5. 만약에 배달 과정에서 에러가 나면 본사로 전화옴
    RestTemplate가 에러 핸들링을 한다.
  6. 답장을 우체국에서 받아서 처리 (착불인지, 내용물 괜찮은지 등등)
    ClientHttpResponse에서 응답 데이터를 가져오고 오류가 있으면 처리한다.
  7. 답장을 우체국에서 받아서 처리 (착불인지, 내용물 괜찮은지 등등)
    MessageConverter를 이용해 response body의 message를 java Object로 변환한다.
  8. 답장을 다시 처음 요청 보냈던 고객에게 전달
    결과를 어플리케이션에게 전달