본문 바로가기

카테고리 없음

RestTemplate vs WebClient(+동기/비동기)

  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 :

작업의 시작,종료 시간을 맞추지 않고 다른 작업과 동시에 수행

 

요약 : 동기는 작업이 끝나는동시에 응답값이 반환 되는 것이고 / 비동기는 작업이 끝나는 것과 상관 없이 응답값이 반환되는 것이다