인프런 커뮤니티 질문&답변

주성호님의 프로필 이미지

작성한 질문수

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

마블 다이어그램으로 Flux와 Mono 이해하기

RestTemplate과 Webclient

23.12.28 20:28 작성

·

236

0

webflux를 사용할때, webClient를 사용하게 되는데, non-blocking하게 동작해서,,, 란 추상적인 의미 때문에 사용합니다. webclient는 왜 non-blocking 하게 작동하는 걸까요?..

제대로 이해하지 못하고 사용하는것 같은데, 강사님께 설명 부탁드립니다.

 

그에 반해 RestTemplate, openFeign은 사용하지 않는데,
예제코드를 보니 다음과 같이 사용해도 똑같이 non-blocking 하게 작동할까요?

Mono.just(restTemplate.get()).subscribe()

Mono.just(feign.get()).subscribe()

 

답변 1

0

Kevin님의 프로필 이미지
Kevin
지식공유자

2023. 12. 28. 21:19

안녕하세요?
Mono의 예제 코드에서 RestTemplate을 이용한 건 외부 API를 호출해서 데이터를 가지고 와서 Downstream 쪽으로 하나의 데이터 즉, 여기서는 response가 될텐데 response 자체가 하나의 데이터라는 것을 설명하기 위한 예시이고, Non-Blocking에 대한 설명을 하기 위함은 아니었습니다.

WebClient는 3부에서 학습하게 될 내용이라 1부에서 다루기 힘든 부분이 있어 RestTemplate을 사용했다라고 보시면 될 것 같구요.

적어주신 예시처럼 Mono.just(restTemplate.getForEntity()) 같은 형태로 호출하면 외부 API의 요청과 응답 프로세스가 끝날 때까지 현재 실행되는 쓰레드가 차단이 됩니다. 즉 Blocking 방식으로 동작을 합니다.

 

Non-Blocking에 대해서는 3부에서 조금 상세하게 다룰 예정이긴한데, 그 전에 조금 막연한 느낌이 드신다면

Java 7부터 지원하는 NIO나 Netty 같은 내용을 먼저 학습해 보시길 추천드립니다.

 

NIO나 Netty는 3부에서 일정 부분 다룰 예정입니다.

감사합니다.