https://www.reactive-streams.org/
Reactive Streams
Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.
Reactive Streams*는 비동기*스트림 처리에서 논블로킹*(back pressure*를 지원하는) 표준을 제공하기 위한 이니셔티브다. 이 표준은 런타임 환경(JVM과 JavaScript)뿐만 아니라 네트워크 프로토콜까지 아우른다.
- Reactive Streams는 말 그대로 반응형 스트림이라는 뜻이다. 데이터를 한 번에 다 처리하지 않고, 데이터가 생길 때마다 조금씩 흘려보내면서 처리하는 방식이다.
- 비동기(asynchronous)라는 건, 데이터를 처리할 때 기다리지 않고 다른 작업을 계속할 수 있다는 의미다.
- 논블로킹(non-blocking)은 비슷한 개념인데, 뭔가 요청을 해놓고 결과가 올 때까지 멈추지 않는 걸 뜻한다. (즉, 일이 막히지 않는다.)
- back pressure(역압)는 조금 어렵지만 이렇게 생각하면 된다: 만약 데이터를 만들어내는 쪽은 빠른데 처리하는 쪽이 느리면, 처리하는 쪽이 "잠깐만, 너무 빨라!" 하고 속도를 조절할 수 있어야 한다. 이게 바로 back pressure다.
왜 이런 게 필요할까?
보통 서버나 애플리케이션이 실시간으로 많은 데이터를 주고받을 때, 한 번에 다 처리하기는 어렵다. 예를 들어 유튜브에서 영상을 볼 때도 영상을 한 번에 다 받지 않고 조금씩 받으면서 계속 재생하지 않나? 그런 식으로 데이터도 스트림처럼 잘게 나눠서 처리해야 할 때가 많다.
그런데 그냥 나눠서 받기만 하면 문제가 생길 수 있다. 데이터가 너무 빨리 들어오면 처리하는 쪽에서 감당을 못 해서 시스템이 멈출 수도 있다. 그래서 "데이터를 보낼 때 서로 속도를 조절할 수 있는" 표준이 필요하다. 그게 바로 Reactive Streams의 목표다.
보통 서버나 애플리케이션이 실시간으로 많은 데이터를 주고받을 때, 한 번에 다 처리하기는 어렵다. 예를 들어 유튜브에서 영상을 볼 때도 영상을 한 번에 다 받지 않고 조금씩 받으면서 계속 재생하지 않나? 그런 식으로 데이터도 스트림처럼 잘게 나눠서 처리해야 할 때가 많다.
그런데 그냥 나눠서 받기만 하면 문제가 생길 수 있다. 데이터가 너무 빨리 들어오면 처리하는 쪽에서 감당을 못 해서 시스템이 멈출 수도 있다. 그래서 "데이터를 보낼 때 서로 속도를 조절할 수 있는" 표준이 필요하다. 그게 바로 Reactive Streams의 목표다.
정리하자면
Reactive Streams는 "비동기적으로 데이터를 스트림 방식으로 주고받되, 데이터를 보내고 받는 쪽 모두 속도를 조절할 수 있도록 만든 표준"이라고 이해하면 된다. 코틀린이나 스프링에서도 이런 리액티브 방식을 점점 더 많이 사용하고 있어서, 앞으로 익숙해지면 좋겠다.
Web on Reactive Stack
https://docs.spring.io/spring-framework/reference/web-reactive.html
반응형 스택에서의 웹
이 문서는 Netty, Undertow 및 Servlet 컨테이너와 같은 non-blocking 서버에서 실행되는 Reactive Streams API를 기반으로 구축된 Reactive-Stack 웹 애플리케이션을 다룬다. Spring WebFlux 프레임워크, Reactive WebClient, 테스트 지원 및 Reactive 라이브러리에 대해 다룬다. Servlet-Stack 웹 애플리케이션에 대해서는 Servlet Stack의 Web을 참조하라.
WebClient
Spring WebFlux includes a client to perform HTTP requests with. WebClient has a functional, fluent API based on Reactor, see Reactive Libraries, which enables declarative composition of asynchronous logic without the need to deal with threads or concurrency. It is fully non-blocking, it supports streaming, and relies on the same codecs that are also used to encode and decode request and response content on the server side.
HTTP 요청 처리를 포함한 Spring WebFlux이다 웹 클라이언트는 Reactor에 기반한 api를 제고앟ㄴ다. 이는 non-blocking이고 streaming을 지원한다.
WebClient needs an HTTP client library to perform requests with. There is built-in support for the following:
웹 클라이언트는 HTTP 클라이언트 라이브러리를 필요로한다. 빌트인 된 라이브러리는 아래와 같다.
- Reactor Netty
- JDK HttpClient
- Jetty Reactive HttpClient
- Apache HttpComponents
- Others can be plugged via ClientHttpConnector.
Section Summary
하다가 지쳐서 그만뒀다
https://godekdls.github.io/Reactive%20Spring/springwebflux/
이 분 글을 보자
'【 개발 이야기 】' 카테고리의 다른 글
볼만한 개발 블로그.. (0) | 2025.05.30 |
---|---|
WebClient의 .body(...)와 .bodyValue (1) | 2025.05.13 |
[kotlin] inline 함수란 뭘까... (1) | 2025.04.29 |
[보안] Base64 인코딩과 iv (0) | 2025.04.25 |
[intelliJ] kotlin.stdlib cannot be found in the module graph (0) | 2025.04.17 |