호비시의 끄적끄적

Spring WebFlux 본문

Back/Spring

Spring WebFlux

호비시 2022. 6. 22. 09:00

Spring WebFlux란?

Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈이다.
WebFlux는 클라이언트, 서버에서 Reactive 한 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며, non-blocking reactive stream을 지원한다.

Reactive Programming 이란?

리엑티브 프로그래밍은 데이터 흐름과 변화 전파에 중점을 둔 프로그래밍 패러다임이다. 프로그래밍 언어로 정적이거나 동적인 데이터 흐름을 쉽게 표현할 수 있어야 하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다.

Rx 프로그래밍의 핵심은 3가지 Observable, Observer, Schedulers 이다.

  • Observable
    데이터의 흐름이다. Observable은 하나의 스레드에서 다른 스레드로 전달할 데이터를 압축한다. 주기적으로 또는 설정에 따라 데이터를 방출한다.

  • Observers
    Observable에 의해 방출된 데이터를 소비한다. Observers는 subscribeOn() 메서드를 사용해서 observable을 구독하여 방출하는 데이터를 수신한다.

  • Schedulers
    Rx는 비동기 프로그래밍을 위한 것이고, 스레드관리가 필수이다. Schedulers는 Observable과 Observers에게 실행되어야 할 스레드를 알려주는 Rx의 구성요소이다.

Spring MVC

Spring MVC는 보통 Spring Framework와 Boot를 사용하면서 가장 보편적으로 쓰는 방식이다.
Spring MVC 같은 경우 Client의 요청이 들어왔을 때, 그 때마다 Thread를 생성하여 처리한다.
하지만 다수의 사용자가 요청이 들어온다면, Thread를 생성하는 등 자원적인 부담이 매우 클 것이다.
그래서 Spring MVC는 어플리케이션이 실행되면서 Thread를 생성하면 Thread Pool을 만들어 놓는다.
요청이 들어오면 Queue에 쌓고 Thread 들이 요청을 가져가서 처리한다.
이 방식의 단점은 단 시간에 다수의 사용자가 요청을 한다면 Thread Pool Size를 초과하여 Queue에 요청이 쌓이게 되는 점이다.
이것을 Thread Pool Hell 이라고 부른다.
따라서 Spring MVC에서는 트래픽을 예상, 측정하여 Pool Size를 조정하는 것이 매우 중요하다.

Spring WebFlux

Spring WebFlux는 Event Driven으로, 비동기 Non-Blocking 방식이다. 이벤트 루프가 돌아서 요청이 발생할 경우, 그것에 맞는 Event 핸들러에게 위임하고 처리가 완료되면 callback 메소드를 통해 응답을 반환한다. 이러한 처리방식 때문에 Spring MVC에 비해 사용자의 요청을 대량으로 받아낼 수 있다는 장점이 있다.

하지만 무조건 WebFlux가 좋은것은 아니다. 모든 파이프라인이 Non-Blocking하게 동작해야만 의미가 있다. 어떤 구간에서 blocking이 발생하는 구간이 있다면 거기서 Thread Pool Hell 문제가 발생할 것이다.

'Back > Spring' 카테고리의 다른 글

Lombok ?  (0) 2022.06.28
POJO 란?  (0) 2022.06.23
JVM  (0) 2022.06.21
Apache Tomcat  (0) 2022.06.17
maven / gradle  (0) 2022.06.16
Comments