RestTemplate 란
- HTTP 통신을 위한 도구로 RestFul API 웹 서비스와의 상호작용을 쉽게 외부 도메인에서 데이터를 가져오거나 전송할 때 사용되는 스프링 프레임워크의 클래스를 의미한다.
- 다양한 HTTP 메소드 (GET, POST, PUT, DELETE 등)을 사용하며 원격 서버와 ‘동기식 방식'으로 JSON, XML 등의 데이터 형식으로 통신한다.
- 동기식 방식으로 요청을 보내고 응답을 받을 때까지 블로킹되며, 요청과 응답이 완료되기 전까지 다음 코드로 진행되지 않는다. 원격 서버와 통신할 때는 응답을 기다리는 동안 대기해야 한다.
동기 방식 및 비동기 방식
동기 방식은 특정 코드가 끝나고 다음 코드가 실행된다. 그래서 API 방식을 호출하고 응답을 받을때까지 기다렸다가 다음 코드를 실행하는 방식이다.
비동기 방식은 특정 코드가 끝날때까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 것을 의미한다.
RestTemplate 은 동기방식으로 실행된다. 그래서 다음 코드가 호출이 되려면 코드 1이 실행 완료가 된 후 코드 2가 실행이 된다. RestTemplate 와 동일하게 HTTP 호출을 하는 WebClient 가 있다. WebClient 는 동기 방식이 아닌 비동기 방식을 사용한다.
RestTemplate 예제 및 사용법
// RestTemplate 생성
RestTemplate restTemplate = new RestTemplate();
// 요청 매개변수 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentTYpe(MediaType.APPLICATION_JSON);
HttpEntity<ReqeustDto> request = new HttpEntity<>(requestDto, headers);
// HTTP 요청 및 응답 처리
ResponseDto responseDto = restTemplate.exchange(url, HttpMethod.POST, request, ResponseDto.class).getBody();
- 먼저 RestTemplate 를 선언합니다.
- HTTP 통신시 필요한 헤더 정보를 HttpHeaders 를 통해 추가합니다. 헤더에 어떤 데이터 타입으로 보내줄지 설정해줘야 합니다.
- 헤더 정보와 바디 정보를 담을 HttpEntitty 객체를 선언 후 헤더와 바디 정보를 담습니다.
- restTemplate.exchange 메소드에 URL 정보, HTTP 통신방식, HttpEntity 정보, 그리고 응답받을 객체를담고 호출합니다.
- 위의 메소드를 통해 응답을 받으면 responseDto 객체에 담깁니다.
RestTemplate 메소드
메소드 | HTTP 방식 | Return 타입 | 설명 |
getForObject | GET | Object | GET 요청에 대한 결과를 객체로 반환합니다 |
getForEntity | GET | ResponseEntity | GET 요청에 대한 결과를 ResponseEntity로 반환합니다 |
postForLocation | POST | URI | POST 요청에 대한 결과로 헤더에 저장된 URI 반환합니다 |
postForObject | POST | Object | POST 요청에 대한 결과를 객체로 반환합니다 |
postForEntity | POST | ResponseEntity | POST 요청에 대한 결과를 ResponseEntity로 반환합니다 |
put | PUT | void | PUT 요청을 실행합니다 |
patchForObject | PATCH | Object | PATCH 요청을 실행하고 결과를 객체로 반환합니다 |
delete | DELETE | void | DELETE 요청을 실행합니다 |
headForHeaders | HEADER | HttpHeaders | 헤더 정보를 추출하고 HTTP HEAD 메서드를 사용합니다 |
optionsForAllow | OPTIONS | Set<HttpMethod> | 지원되는 HTTP 메서드를 추출합니다 |
exchange | any | ResponseEntity | 헤더를 생성하고 모든 요청 방법을 허용합니다 |
execute | any | T | 요청/응답 콜백을 수정합니다 |
헤더 종류
- 헤더란 지정되거나 전송되는 데이터 블록의 맨 앞에 위치한 데이터를 가리킨다. 특정 프로토콜의 헤더의 내용이나 기능을 제공하기 위한 정보를 담고 있다.
- 종류 : 종단간 헤더(end-to-end), 홉간 헤더(hop-by-hop), General header, Request header, Response header, Entity header 등이 있다.
- Content-Type : HTTP 요청 또는 응답에서 ‘전송되는 데이터’ 형식을 지정할 때 사용한다.
- Accept : 클라이언트가 서버에게 요청한 ‘데이터 유형’을 알려준다. 어떤 타입으로 응답 받을지를 지정한다.
HttpHeaders 메소드
메소드 | 설명 |
setContentType | Content-Type 헤더 설정 |
setAccept | Accept 헤더 설정 |
add | 특정 헤더 추가 |
addAll | 여러 개의 헤더 추가 |
setBearerAuth | Authorization 헤더에 Bearer 토큰 추가 |
setBasicAuth | Authorization 헤더에 Basic 인증 정보 추가 |
setIfNoneMatch | If-None-Match 헤더 추가 |
setIfModifiedSince | If-Modified-Since 헤더 추가 |
set | 특정 헤더 설정 |
ContentType 종류
MediaType | Content Type | 설명 |
APPLICATION_JSON | application/json | JSON 형식 |
TEXT_PLAIN | text/plain | 일반 텍스트 형식 |
APPLICATION_XML | application/xml | XML 형식 |
APPLICATION_ATOM_XML | application/atom+xml | Atom 피드 형식 |
APPLICATION_FORM_URLENCODED | application/x-www-form-urlencoded | HTML 폼 형식 |
APPLICATION_OCTET_STREAM | application/octet-stream | 임의의 바이너리 데이터 |
APPLICATION_PDF | application/pdf | PDF 형식 |
APPLICATION_RSS_XML | application/rss+xml | RSS 피드 형식 |
APPLICATION_XHTML_XML | application/xhtml+xml | XHTML 형식 |
IMAGE_GIF | image/gif | GIF 이미지 형식 |
IMAGE_JPEG | image/jpeg | JPEG 이미지 형식 |
IMAGE_PNG | image/png | PNG 이미지 형식 |
MULTIPART_FORM_DATA | multipart/form-data | 여러 개의 다른 형식의 파트를 하나의 요청에 함께 전송 |
TEXT_HTML | text/html | HTML 형식 |
TEXT_XML | text/xml | XML 형식 |
'Framework > Springboot' 카테고리의 다른 글
스프링부트에서 validation 적용하기 (0) | 2024.01.27 |
---|---|
스프링부트로 네이버 로그인 구현하기 - 설정 (2) | 2024.01.26 |
WebClient 이해하기 (2) | 2024.01.25 |
스프링부트로 카카오 로그인 구현하기 - 설정 (0) | 2024.01.23 |