-
Spring MVC vs WebFlux카테고리 없음 2025. 7. 22. 22:23
Spring.io에서 제공하는
서블릿/리액티브
기반에 대한 웹 스택에 대한 비교
리액티브 기반은 스프링 부트2부터 지원
리액티브 스택
프로젝트 리액터를 사용
리액터? 리액티브 스트리밍 구현체
스프링 세큐리티 리액티브, 스프링 웹플럭스, 스프링 데이타 리액티브 리포지토리즈까지 비동기 처리의 기반이 됨
서블릿 스택
기본적으로 싱크로너스 블락킹 i/o 아키텍쳐로 동작
One-request-per-thread 모델로 동작
동기적, 순차적 처리를 위해 웹 요청부터 비즈니스 로직까지 하나의 스레드가 점유
자바에서 서블릿 컨테이너를 구현한 것
주로 사용되는 오픈소스 톰캣
Spring Security는 보안 인증 모듈
Srping MVC 모델 뷰 컨트롤러 패턴을 제공하는 동기식 웹 프레임 워크
Spring Data Repositories 데이터와 관련된 추상화된 인터페이스
모두 동기 방식으로 진행
Spring MVC with tomcat
클라이언트가 요청 -> 큐에 넣고 -> 스레드풀에서 처리
웹플럭스는 네티 활용
네티란?
논블락킹 이벤트 기반 프레임워크
내부적으로 이벤트루프 사용하여 높은 성능 보장
다양한 프로토콜 지원
네티가 웹 요청을 받는 첫번째 컴포넌트
Event Queue <—> Event Loop (Single thread) —> handler
이벤트 루프? 동시성 요청 처리를 위한 싱글 스레드 기반 스케줄러
동시적인 요청들에 대해 단일 큐에 적재
이벤트 루프는 반복해서 해당 큐에 있는 내용을 꺼내고 그에 따른 이벤트 핸들러를 실행하는 과정을 진행
대표적으로 자바스크립트의 노드제이에스가 이런 이벤트 루프 구조를 사용하고 있다
리액티브 스택의 네티도 이벤트루프를 가지고 있는데
다수의 이벤트 루프 기반으로 웹 요청을 비동기적으로 처리한다
네티는 자바의 고성능 네트워크 프레임워크
내부적으로 두 개의 큰 이벤트 루프 그룹을 활용하고 있다.
각 이벤트 루프 그룹은 이벤트 루프를 개념적으로 그룹화한 것
그래서 싱글 스레드 기반의 이벤트루프를 1개부터 N개 즉, 여러개 운영이 가능한 구조
클라이언트에 연결 요청을 처리하는 Acceptor 역할의 보스 이벤트 그룹
이후 데이터 송수신 관련하여 워커 이벤트 그룹을 통해서 요청받은 송수신을 위한 패킷 데이터를 처리
보스 이벤트 그룹 루프는 보통 한 개의 이벤트로 운영, 워커 이벤트 루프 그룹은 다수의 이벤트 루프를 운영함