프로젝트에서 ChatGPT를 활용하던 도중, RestTemplate을 쓴 경험이 있다. 조금 더 자세히 공부하고자 포스트한다.
HTTP 통신을 위한 도구로 RESTful API 웹 서비스와의 상호작용을 쉽게 외부 도메인에서 데이터를 가져오거나 전송할 때 사용되는 스프링 프레임워크의 클래스를 의미합니다.
다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하며 원격 서버와 ‘동기식 방식’으로 JSON, XML 등의 다양한 데이터 형식으로 통신합니다.
동기식 방식으로 요청을 보내고 응답을 받을 때까지 블로킹되며, 요청과 응답이 완료되기 전까지 다음 코드로 진행되지 않습니다. 원격 서버와 통신할 때는 응답을 기다리는 동안 대기해야 합니다
💡 블로킹 요청(Blocking Request)
💡 HTTP 요청 및 응답을 ‘자동’으로 변환하고 역직렬화하는 기능을 제공합니다. 이를 위해 RestTemplate은 기본적으로 MessageConverter를 사용합니다.
💡 MessageConverter는 요청 및 응답 바디의 데이터 형식을 변환하고, 요청 및 응답 헤더의 콘텐츠 형식을 설정합니다. RestTemplate은 기본적으로 다양한 MessageConverter를 제공하며, 애플리케이션에서 직접 추가할 수 있습니다.
// RestTemplate 생성
RestTemplate restTemplate = new RestTemplate();
// 요청 매개변수 설정
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<RequestDto> request = new HttpEntity<>(requestDto, headers);
// HTTP 요청 및 응답 처리
ResponseDto responseDto = restTemplate.exchange(url, HttpMethod.POST, request, ResponseDto.class).getBody();
💡 RestTemplate을 이용하여 HTTP 요청 및 응답 처리를 수행하는데 여러 가지 형식으로 요청 및 응답 처리를 할 수 있습니다.
JSON, XML 및 바이너리 데이터 형식과 같은 데이터 형식으로 응답 처리를 할 수 있고 또한 HTTP 요청 및 응답의 부분을 추출하거나 수정할 수 있습니다.
💡 HTTP 요청에 대한 요청 헤더 및 쿼리 매개변수를 설정할 수 있습니다.
요청 헤더는 RestTemplate의 HttpHeaders 클래스를 사용하여 설정할 수 있습니다. HttpHeaders 클래스의 add() 메서드를 사용하여 요청 헤더에 새 항목을 추가할 수 있습니다.
쿼리 매개변수는 RestTemplate의 exchange() 메서드를 호출할 때 UriComponentsBuilder를 사용하여 설정할 수 있습니다. UriComponentsBuilder의 queryParam() 메서드를 사용하여 쿼리 매개변수를 추가할 수 있습니다.