[Spring Webflux] WebClient (HTTP 클라이언트)

2024. 6. 17. 16:20·Spring
728x90

WebClient

  • RestTemplate를 대체하는 HTTP 클라이언트
  • 기존의 동기 API를 제공할 뿐만 아니라, 논블로킹 및 비동기 접근 방식을 지원해서 효율적인 통신이 가능
  • 요청을 나타내고 전송하게 해주는 빌더 방식의 인터페이스를 사용
  • 외부 API로 요청을 할 때 리액티브 타입의 전송과 수신(Mono, Flux)
  • 싱글 스레드 방식을 사용

 

Non-Blocking & Synchronouse

2024.06.13 - [Spring] - [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe

 

[Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe

2024.06.10 - [CS/OS] - 동기 VS 비동기, 블로킹 VS 논블로킹 동기 VS 비동기, 블로킹 VS 논블로킹동기(Synchronous) vs 비동기(Asynchronous)Synchronous작업을 동시에 수행하거나, 동시에 끝나거나, 끝나는 동시에

karla.tistory.com

 

 

resttemplete과 webclient 차이

1. RestTemplate

  • 요청 Thread Pool은 애플리케이션 구동 시에 미리 만들어 놓음
  • Request는 먼저 Queue에 쌓이고 가용한 쓰레드가 있으면 그 쓰레드에 할당되어 처리됨
  • 1개의 요청당 1개의 스레드 할당
  • 각 스레드는 Blocking 방식으로 처리되어 응답이 올때까지 그 스레드는 다른 요청에 할당 될 수 없음
요청을 처리할 스레드가 있으면 아무런 문제가 없지만, 스레드가 다 차는 경우 이후의 요청은 Queue에 대기하게 됩니다.
대부분의 문제는 네트워킹이나 DB와의 통신에서 생기는데 이런 문제가 여러 스레드에서 발생하면
가용한 스레드수가 현저하게 줄어들게 되고, 결국 전체 서비스는 매우 느려지게 됩니다.

2. WebClient

  • Core 당 1개의 Thread를 이용
  • Single-Thread, Non-Blocking
  • 이벤트 반응형으로 동작 Spring Web Reactive 모듈에 포함
  • React Web 프레임워크인 Spring WebFlux에서 Http Client로 사용됨
각 요청은 Event Loop내에 Job으로 등록이 됩니다.
Event Loop는 각 Job을 제공자에게 요청한 후, 결과를 기다리지 않고 다른 Job을 처리합니다.
Event Loop는 제공자로부터 callback으로 응답이 오면, 그 결과를 요청자에게 제공합니다.
WebClient는 이렇게 이벤트에 반응형으로 동작하도록 설계되었습니다.
그래서 반응성, 탄력성, 가용성, 비동기성을 보장하는 Spring React 프레임워크를 사용합니다.

 

728x90
'Spring' 카테고리의 다른 글
  • [Spring WebFlux] 1. 리액티브 프로그래밍
  • [Spring WebFlux] 3. Non-Blocking, WebClient, Mono, subscribe
  • Spring Event, 스프링 이벤트, ApplicationEventPublisher
  • Spring Batch, 배치와 스케줄러의 차이, Job, Tasklet, Chunk
Karla Ko
Karla Ko
𝘾𝙤𝙣𝙩𝙞𝙣𝙪𝙤𝙪𝙨𝙡𝙮 𝙄𝙢𝙥𝙧𝙤𝙫𝙞𝙣𝙜, 𝘾𝙤𝙣𝙨𝙩𝙖𝙣𝙩𝙡𝙮 𝘿𝙚𝙫𝙚𝙡𝙤𝙥𝙞𝙣𝙜 𝙔𝙚𝙨!
    250x250
  • Karla Ko
    karlaLog
    Karla Ko
  • 전체
    오늘
    어제
    • Total (467)
      • Spring (19)
      • JPA (4)
      • Cloud & Architecture (15)
        • Kubernetes (5)
        • Docker (3)
        • MSA (2)
        • GCP (1)
        • AWS (4)
      • Devops (1)
      • Message Queue (4)
        • Kafka (2)
        • RabbitMQ (2)
      • Git (4)
      • DB (4)
      • Java (9)
      • Python (4)
      • CS (11)
        • OS (8)
        • Network (2)
        • Algorithm (1)
      • Coding Test (392)
        • programmers (156)
        • Graph (43)
        • DP (37)
        • Search (31)
        • Tree (13)
        • Data Structure (26)
        • Combination (12)
        • Implement (18)
        • Geedy (23)
        • Sort (7)
        • Math (21)
        • geometry (2)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    트리
    그래프
    큐
    다익스트라
    구현
    정렬
    플로이드워셜
    알고리즘
    조합
    동적계획법
    스택
    구간합
    백준
    BFS
    힙
    최대공약수
    자료구조
    최소신장트리
    월간코드챌린지
    덱
    DFS
    재귀
    Algorithm
    그리디
    LIS
    파이썬
    이분탐색
    프로그래머스
    최단거리
    DP
  • hELLO· Designed By정상우.v4.10.3
Karla Ko
[Spring Webflux] WebClient (HTTP 클라이언트)
상단으로

티스토리툴바