반응형
RestTemplate
: RestTemplate은 Spring Framework에서 제공하는 HTTP 통신을 간편하게 처리할 수 있는 클래스이다.
org.springframework.web.client.RestTemplate 패키지에 존재한다.
RESTful 웹 서비스와의 통신을 위해 주로 사용되고 기본적으로 동기 방식으로 처리되며,
비동기 방식으로 처리하고 싶을 경우 AsyncRestTemplate을 사용하면 된다.
RestTemplate은 요청과 응답에 대한 결과값을 가지고 있다.
클라이언트 요청 → Server1(나) 요청 → Server2(Resource Server)
클라이언트 응답 ← Server1(나) 응답 ← Server2(Resource Server)
RestTemplate의 대표적인 기능
- HTTP 요청 메서드 지원 : GET, POST, PUT, DELETE 등 다양한 HTTP 메서드를 사용하여 원격 서버에 요청을 보낼 수 있다.
- URL 변수와 쿼리 파라미터 지원 : URL에 동적인 값을 전달하거나 쿼리 파라미터를 추가할 수 있다.
- 요청과 응답의 데이터 변환 : 요청과 응답의 데이터를 다양한 타입으로 변환할 수 있다.
JSON, XML 등의 데이터 형식을 자바 객체로 변환하거나, 자바 객체를 JSON, XML 등의 데이터 형식으로 변환할 수 있다. - 요청과 응답의 에러 처리 : 원격 서버로부터의 응답이 에러 상태 코드를 포함할 경우, 예외 처리를 통해 에러를 처리할 수 있다.
- 인터셉터 지원 : 요청과 응답의 전/후 처리를 위해 인터셉터를 등록할 수 있다.
RestTemplate의 동작 원리
- 어플리케이션이 RestTemplate을 생성하고, URI 등의 헤더를 담아 요청한다.
- RestTemplate은 HttpMessageConverter를 사용하여 requestEntity를 요청 메세지로(HttpMessage) 변환한다.
- RestTemplate은 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와서 요청을 보낸다.
- ClientHttpRequest는 요청 메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신한다.
- RequestTemplate은 ResponseErrorHandler로 오류를 확인하고 있다면 처리 로직을 태운다.
- ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답 데이터를 가져와서 처리한다.
- RestTemplate은 HttpMessageConverter를 이용해서 응답 메세지를 java object(Class responseType)로 변환한다.
- 어플리케이션에 반환된다.
RestTemplate 대표적 메서드
RestTemplate Method | HTTP Method | 설명 |
getForEntity | GET | get 요청을 보내고 ResponseEntity로 응답을 받음 |
getForObject | GET | get 요청을 보내고 java object로 매핑받아서 반환 받음 |
exchange | Any | 헤더 세팅해서 HTTP Method로 요청 보내고 ResponseEntity로 반환 받음 |
put | PUT | PUT 형식으로 요청 |
delete | DELETE | DELETE 형식으로 요청 |
postForLocation | POST | post 요청을 보내고 java.net.URI로 반환받음 |
postForObject | POST | post 요청을 보내고 Object로 반환받음 |
optionsForAllow | OPTIONS | 해당 URI에서 지원하는 HTTP 메서드를 조회 |
execute | Any | 요청과 응답에 대한 콜백 수정 |
반응형
'프로그래밍 > Spring Boot' 카테고리의 다른 글
Spring Boot_Message 사용법 (0) | 2023.08.23 |
---|---|
Spring Boot_Model과 ModelAndView (0) | 2023.08.22 |
Spring Boot_Security 프로젝트 생성 및 Git 설정 (0) | 2023.05.13 |
Spring Boot_스프링 기본 파싱 전략 (0) | 2023.05.13 |
Spring Boot_@Transactional (0) | 2023.05.07 |