티스토리 뷰
원래 계획은 리액티브 스트림에 이어서 모노, 플럭스까지 정리하는 거였지만,
하나도 모르는 내가 한 번에 몰아 정리하기는 불가능하다는 판단이 들어 글을 나누었다.
읽고, 실습해도 이상하게 개념이 잡히지 않는 웹플럭스, 쪼개서 알아보자.
Reactive Streams
리액티브 스트림은 비동기/논블로킹 처리를 위한 스트림 기반의 프로그래밍 모델이다.
또한 데이터 생산자와 소비자 사이에서 백프레셔를 지원해 데이터의 흐름을 제어할 수 있으며,
이는 리액티브 선언문에 쓰여있는 대로 병목현상이나 예기치 못한 소프트웨어의 정지를 방지한다.
리액티브 스트림의 탄생 이전에는 라이브러리마다 다른 방식으로 같은 목적의 프로그램을 구현해야 했으며,
2013년 넷플릭스와 레드햇을 위시한 기업들이 공동으로 개발하며 표준화 작업을 진행하기 시작했다.
이후 자바 9에서부터 리액티브 스트림 API로 JVM 환경에서 표준화되었으며,
Flow 클래스를 통해 기본적으로 사용할 수 있게 되었다.
앞으로 자주 사용하게 될 단어를 명확히 정의하고 넘어가도록 하자.
- Publisher - 데이터를 생성해 Subscriber에게 전달하는 역할을 하는 생산자 인터페이스
- Subscriber - Publisher로부터 데이터를 전달받아 처리하는 소비자 인터페이스
- Subscription - Subscriber가 Publisher에게 데이터를 요청하거나 구독을 취소하는 역할의 인터페이스
- Backpressure - Subscriber가 처리하는 데이터 양을 제한하는 요청방식. 기존의 Push 방식과 반대로 Pull 방식을 이용해 자신이 처리할 데이터의 사이즈를 Publisher에게 요청하는 것을 가리킨다. 이를 통해 Subscriber는 자신이 데이터를 처리할 준비가 되었을 때만 데이터를 요청할 수 있으며, OOM을 예방하고 서버의 자원을 효율적으로 관리할 수 있게 된다.
또한 조금 헷갈리지만 리액티브 스트림 = 웹플럭스는 아니다.
정확하게 말하자면 스프링 웹플럭스(Spring WebFlux)는 리액티브 스트림을 기반으로 비동기/논블로킹을 구현한
스프링 프레임워크의 모듈 중 하나라고 할 수 있다.
더 정확하게 말하면 리액티브 스트림을 구현한 라이브러리는 아래와 같으며,
- RxJava
- Reactor - 자바 8
- Akka Streams
- Vert.x
- Project Reactor - 자바 9+
- Kotlin Flow
- Java 9 Flow API
- Ratpack
스프링 웹플럭스는 이중 프로젝트 리액터(Project Reactor)를 다시 이용해서 구현한 라이브러리라고 할 수 있다.
'Java+Spring > WebFlux' 카테고리의 다른 글
[WebFlux]Reactive MongoDB - Criteria (2) | 2023.04.03 |
---|---|
[WebFlux]자주 사용하는 연산자 정리(1) (2) | 2023.03.29 |
[WebFlux]Mono, Flux (0) | 2023.03.28 |
[WebFlux]이벤트 루프, Netty, 그리고 (2) | 2023.03.25 |
[WebFlux]Reactive Manifesto (1) | 2023.03.20 |
[Spring]프로젝트 리액터(Project Reactor) 튜토리얼 (3) | 2022.10.14 |
- Total
- Today
- Yesterday
- Python
- Backjoon
- BOJ
- 세모
- 유럽
- 파이썬
- 지지
- 유럽여행
- 백준
- 남미
- a6000
- 스트림
- RX100M5
- 칼이사
- 세계여행
- 야경
- 알고리즘
- spring
- 자바
- 맛집
- 면접 준비
- 중남미
- 여행
- 세계일주
- java
- 기술면접
- 스프링
- 리스트
- 동적계획법
- Algorithm
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |