RestTemplate | WebClient | |
spring 3.0 | spring 5.0 | |
blocking / 동기 | non-blocking / 비동기 | |
각각의 쓰레드가 응답을 받을 때까지 쓰레드가 동작하지 않는 동기화 모델 | 이벤트 루프 방식을 구현한 reactive stream API를 사용 | |
요청 증가 → 해당 요청 쓰레드 생성 → 쓰레드풀 소모 → 메모리 소비 증가 → 빈번한 컨텍스트 스위칭으로 성능 저하 / 요청 수에 연관 되어 성능 저하가 발생한다. | task생성 → 큐에 저장 후 응답이 있는 경우에 처리 : 요청에 관계 없이 일정한 성능을 제공한다. | |
getForObjct() getForEntity() : responseEntity postForObject() postForEntity() patchForObject() exchange() : return responseEntity |
get() post() put() patch() head() delete() create() builder() retrieve() : 바디값만 가지고 오기 exchange() :httpstatus와 바디값도 가지고 온다 bodyToMono : 값을 하나로 받아오는 것 bodyToFlux : |
|
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/reactive/function/client/WebClient.html | https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/client/RestTemplate.html |
동기/blocking :
작업의 시작,종료 시간을 맞추고 다른 작업을 수행 중일 때는 대기
비동기/blocking :
작업의 시작,종료 시간을 맞추지 않고 다른 작업이 수행 중일 때는 대기
동기/non-blocking :
작업의 시작,종료 시간을 맞추고 다른 작업과 동시에 수행
비동기/non-blocking :
작업의 시작,종료 시간을 맞추지 않고 다른 작업과 동시에 수행
요약 : 동기는 작업이 끝나는동시에 응답값이 반환 되는 것이고 / 비동기는 작업이 끝나는 것과 상관 없이 응답값이 반환되는 것이다