Spring , JPA

[spring] Spring Webflux 란?

seulseul 2023. 1. 17. 23:24

목차

 

    1. Webflux 란

    Webflux 란 Spring 5에서 새롭게 추가된 모듈이며, 클라이언트와 서버에서 Reactive 한 개발을 할 수 있도록 도와준다.

    출처: https://docs.spring.io/spring-framework/docs/current/reference/html/web-reactive.html

     

    1.1. Spring MVC (전통적 웹 방식)

    [출처] https://www.baeldung.com/spring-webflux-concurrency

    • Spring MVC 는 Servlet 기반으로 만들어졌고, Sync + Blocking 방식으로 동작한다.
    • 하나의 요청을 처리할 때 요청당 1개의 스레드(Thread)를 사용하며, Response 를 기다리며 Thread 를 지연시킨다.
    • 물론 Spring MVC 모델을 사용해도, 서버 자원량을 늘려서 Multi Thread 를 사용하면 block 되지 않고 많은 요청을 처리 할 수 있지만 스레드(Thread) 간의 Context Swith 발생 시 비용이 생겨 비효율적이다.
    • 요청에 따라 무한정 스레드를 생성할 수 없기 때문에 스레드풀(Thread Pool) 을 사용해 스레드를 재사용한다.
      • Tomcat 의 스레드풀(Thread Pool)에서 사용할 최대 스레드 개수 기본값은 200 개 이다.

     

    1.2. Spring Webflux (리액티브 프로그래밍)

    [출처] https://www.baeldung.com/spring-webflux-concurrency

    • Spring Webflux 는 요청이나 응답을 처리하는 IO 를 Async + Non-Blocking 방식으로 수행하여 callback 을 통하여 작업이 진행되기 때문에 Blocking 이나 Polling 방식을 사용하지 않는다.
    • 더 적은 스레드(Thread) 로 같은 일을 할 수 있기 때문에 Context Switching 에 따른 비용이 훨씬 적다.
      • 즉 적은 서버 자원으로 더 많은 요청을 처리할 수 있기 때문에 효율적이다.

    1.3. Event Loop

    [출처] https://www.baeldung.com/spring-webflux-concurrency

    • 이벤트기반 아키텍처를 사용해서 자원을 매우 효율적으로 사용할 수 있게 된다. (Context 스위칭을 최소화 해서 CPU를 매우 효율적으로 사용할 수 있다.)
    • 네티 (Netty) 의 주요 개념은 EventLoop라고 하는 쓰레드풀을 가지고 있는 것이고, 이 쓰레드풀은 보통 코어 수만큼 만들어진다. (설정에서 변경 가능)
    • 모든 요청들은 이벤트로 처리되기 시작하고 이벤트 핸들러(Event Handler) 에 등록이 된다.  요청 후 응답이 없는 경우에는 이벤트 핸들러에 등록만 되고 어떤 쓰레드도 점유하지 않을 수 있다.
      • 다만 , 이벤트 루프가 실행되는 동안 매우 느린작업이 실행되면 전체 이벤트 루프가 느려지는 Reactor MeltDown 이 발생할 수 있으므로 Blocking 로직을 최소화하는 프로그래밍이 필요하다.


    다음 포스팅에서는 Spring Webflux CRUD 코드를 소개한다.

    참고

    스프링 공식 문서 WebFlux

    'Spring , JPA' 카테고리의 다른 글

    Spring Boot Logging (log4j, logback, log4j2)  (0) 2023.07.09
    Spring Boot , Java Application Graceful Shutdown  (0) 2023.03.13
    [spring] Spring Webflux CRUD  (0) 2023.01.16
    [kafka] kafka Install  (0) 2023.01.09
    Webflux with MDC  (0) 2023.01.04