[SpringBoot] RestTemplate vs WebClient

해니·2024년 5월 10일
0

SpringBoot

목록 보기
11/24



HTTP 통신 방식

  • Spring Framework은 다양한 HTTP 요청 방식을 지원하여 웹 서비스와의 통신을 할 수 있다.
    • 주요 HTTP 요청 방식에는 RestTemplate, WebClient 등이 있다.



RestTemplate

  • Spring Framework에서 제공하는 동기식 HTTP 통신을 위한 클라이언트
  • Spring MVC 기반의 애플리케이션에서 사용되며, 다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지원함
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> responseEntity = restTemplate.exchange(uriComponents.toUri(), httpMethod, httpEntity, String.class);




WebClient

  • Spring Framework 5부터 도입된 비동기식 HTTP 통신을 위한 클라이언트
  • Non-Blocking I/O 모델을 기반으로 하며, 비동기 및 리액티브 스트림 처리를 지원
  • RestTemplate의 대안으로 제공되며, 더 나은 확장성과 성능을 제공한다.

// 출처: https://hahahoho5915.tistory.com/79 [넌 잘하고 있어:티스토리]
WebClient webClient = WebClient.create();
String url = "https://api.example.com/users/{id}";
Mono<User> userMono = webClient.get()
        .uri(url, 1)
        .retrieve()
        .bodyToMono(User.class);




동기(Synchronous) vs 비동기(Asynchronous)

  1. 동기(Synchronous)
  • 서버에서 요청을 보냈을 때, 응답이 돌아와야 다음 동작을 수행할 수 있다.
    • Thread1이 작업을 시작 시키고, Task1이 모두 진행 될때까지 Task2는 대기해야한다.
  • 작업 요청을 했을 때 요청의 결과값(return)을 직접 받는다.
    • 요청의 결과값이 return값과 동일하다.
  • 작업 완료 여부를 호출한 함수 스스로 확인한다.
  1. 비동기(Asynchronous)
  • 서버에서 요청을 보냈을 때 응답 상태와 상관없이 다음 동작을 수행 할 수 있다.
    • Thread1이 작업을 시작 시키면, 완료를 기다리지 않고, Thread1이 완료되지 않더라도 Task2를 진행 시킬 수 있다.
  • 호출한 함수는 작업 완료 여부를 신경쓰지 않는다.

호출되는 함수의 작업 완료 여부(응답 상태)를 누가 신경쓰느냐가 관심사이다.



blocking vs non-blocking
주로 IO의 읽기, 쓰기에서 사용된다

  1. blocking
  • 호출된 함수가 자신이 할 일을 모두 마칠 때까지 바로 return을 하지 않고 , 제어권을 계속 가지고서 호출한 함수에게 바로 돌려주지 않는 상황을 의미한다.
  1. non-blocking
  • 호출된 함수가 자신이 할 일을 모두 마치지 않았더라도 바로 return해서 제어권을 건네주어 호출한 함수가 다른 일을 진행할 수 있도록 해주는 상황을 의미한다.

호출되는 함수가 바로 return하느냐 마느냐가 관심사이다.





출처
JAVA(spring) - HTTP 통신 방식 3가지(RestTemplate, WebClient, OpenFeign)
[Spring] RestTemplate과 WebClient 이해하기
동기 vs 비동기 (feat. blocking vs non-blocking)
동기, 비동기 처리

profile
💻 ⚾️ 🐻

0개의 댓글

Powered by GraphCDN, the GraphQL CDN