사이드 프로젝트를 진행하면서, 외부API를 가져와 가공할 작업이 생겨 어떻게 구현하지 고민중에 webClient와 RestTemplate에 대해 알게되었다.
Spring5이후부터, WebClient를 사용하는 것이 권장되었다고 하지만, RestTemplate을 한번 확인해보고 WebClient로 넘어가고 싶은 이상한 고집이 생겼다.(뭔가 내가 직접 체감하고 싶은마음..?)
게다가 RestTemplate와 달리 WebClient의 경우 비동기적인 방식으로 처리하여,Non-blocking과 비동기적 즉, 기다리지 않고 처리한다는 장점은 있으나, 보통 RDB(관계형 데이터베이스) 드라이버는 blocking 방식으로 동작하기때문에, 처리가 꼬이게된다.
그래서 이번 프로젝트에서, 아래 방법으로 진행해보고자 한다.
1. RestTemplate으로 먼저 구현해보고
2. 성능테스트
3. WebClient로 수정 (RDB -> R2DBC로 바꾸는 작업도 해볼 예정)
4. 성능테스트
이번 시간엔 간단하게 RestTemplate에 대해서만 알아보자
JSON
및 XML
을 지원한다.기본적으로 spring-webmvc 혹은 spring-boot-starter-web 의존성 추가하여야 한다.
spring-boot-starter-web
=의존=> spring-webmvc
=의존=> spring-web
HTTP 메소드
예시 코드(해당 url로 get요청보내는 코드)
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestTemplate;
public class RestTemplateExample {
public static void main(String[] args) {
RestTemplate restTemplate = new RestTemplate();
String url = "http://example.com/users/{id}";
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class, "1");
System.out.println(response.getBody());
}
}
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
6~7초
걸림.