Reactor Library
Reactor Library
개념과 특징
백프레셔(backpressure)를 지원하는 논블로킹 리액티브 프로그래밍 패러다임을 제공한다. 이는 데이터 생산자와 소비자 간의 속도 차이를 조절하여 시스템 안정성을 보장한다.
- 백프레셔
- 만약 초당 10,000개의 이벤트를 생성하는 생산자와 초당 100개만 처리할 수 있는 소비자가 있다면, 전통적인 방싱이라면 처리되지 못한 데이터가 메모리에 계속 쌓여 결국 OutOfMemoryError가 발생한다.
- 백프레셔는 이러한 문제를 근본적으로 해결한다.
Tomcat vs Netty
Tomcat은 전통적인 서블릿 컨테이너로 스레드 풀 기반의 블로킹 I/O 모델을 사용한다. 각 요청마다 전용 스레드를 할당하여 처리한다.
Netty는 이벤트 루프 기반의 논블로킹 I/O 모델을 사용한다. 소수의 이벤트 루프 스레드가 많은 연결을 비동기적으로 처리한다.
이벤트 루프는 단일 스레드가 여러 작업을 비동기적으로 처리하는 프로그래밍 모델이다. 전통적인 스레드 모델과 달리, 하나의 스레드가 이벤트 큐를 계속 감시하며 발생한 이벤트를 순차적으로 처리한다. 블로킹 없이 작업을 처리하므로 적은 리소스로 높은 동시성을 달성할 수 있다.
Mono와 Flux
Reactor의 핵심은 두 가지 Publisher 타입이다.
Mono는 0개 또는 1개의 요소를 비동기적으로 방출하는 Publisher로, 단일 값을 반환하는 비동기 작업에 적합하다. HTTP 응답이나 데이터베이스의 단일 레코드 조회 같은 경우에 주로 사용된다.
Flux는 0개에서 N개(무한대 포함)의 요소를 비동기적으로 방출할 수 있는 Publisher이다. 스트리밍 데이터, 실시간 이벤트 스트림, 대량의 데이터 처리에 적합하다.
This post is licensed under CC BY 4.0 by the author.