Spring WebFlux는 Spring Framework 5.0에서 도입된 리액티브(Reactive) 웹 프레임워크이다.기존의 Spring MVC가 서블릿 API를 기반으로 블로킹 I/O 모델을사용하는 반면, Spring WebFlux는 비동기 및 논블로킹(Non-B
비동기(Asynchronous)와 논블로킹(Non-blocking)은 현대 소프트웨어 개발에서 매누 중요한 개념이다. 이 두 가지는 작업이 완료될 때까지 호출자(Caller)의 프로그램 흐름이 멈추는지(블로킹) 멈추지 않는지(논블로킹)에 초점을 둔다.주로 I/O 작업(
기존 서블릿 컨테이너(ex: Tomcat)는 기본적으로 요청 하나당 하나의 스레드를 할당하여 처리한다. 이 모델에서 가장 큰 문제는 I/O 작업(데이터베이스 접근, 외부 API 호출, 파일 읽기/쓰기 등)이 발생할 때 해당 스레드가 블로킹 된다는 점이다.I/O 작업은
응답성은 시스템이 시간 내에 반응하거나 응답해야 함을 의미한다. Spring WebFlux는 논블로킹 특성을 통해 이를 달성한다.Spring WebFlux는 서블릿 3.1 이상의 API 또는 Netty 같은 논블로킹 웹 컨테이너를 기반으로 한다.이는 I/O 작업이 완료
RxJava롸 Project Reactor같은 이랙티브 라이브러리의 필요성을 설명한다.전통적인 비동기 프로그래밍 방식은 다음과 같은 문제점을 가진다.콜백 지옥 (Callback Hell): 여러 비동기 작업이 중첩될 때 코드가 깊게 들여쓰기 되고 가독성이 떨어져 유지보
Project Reactor는 JVM에서 리액티르 애플리케이션을 개발하기 위한 핵심 라이브러리이다. RxJava와 유사하지만 Spring Framework 5이상 (spring WebFlux 등)에서 리액티브 스택의 기반으로 사용되면서 널리 알라졌다.Project Re
Project Reactor의 Mono와 Flux는 다양한 연산자(operator)를 제공하여 데이터 스트림을 변환, 조합, 필터링 할 수 있도록 한다. 이 연산자들을 통해 복잡한 비동기 로직을 선언적이고간결하게 표현할 수 있다.subscribe()는 리액티브 스트림이
데이터 스트림을 생성하고 소비하는 방식에 따라 콜드(Code)또는 핫(Hot) 시퀸스로 구분한다.CD나 DVD를 재생하는 것에 비유할 수 있다. 각 시청자가 재생 버튼을 누르면 처음부터 영화가 시작된다.콜드 시퀸스는 각 구독자(Subscriber)가 스트림을 구독할 때
백프레셔는 데이터 스트림 처리에서 생산자(Producer)의 데이터 생산 속도가 소비자(Consumer)의 처리 속도보다 빠를 때 발생하는 문제를 해결하기 위한 매커니즘이다.쉽게 말해 데이터가 너무 많이, 너무 빨리 쏟아져 들어와서 받는 쪽이 감당하기 어려울 때 보내는
가장 간단한 형태로 WebFlux가 데이터를 어떻게 제어하는지 보여준다.Flux.interval은 기본적으로 요청하는 대로 데이터를 발행한다.Flux.interval(Duration.ofMillis(100))은 100밀리초마다 매우 빠르게 데이터를 생산한다.doOnRe
스프링 WebFlux는 스프링 프레임워크 5에 도입된 모듈로, 비동기적이고 논블로킹 방식으로 웹 애플리케이션을 구축하기 위한 리액티브 웹 프레임워크이다.기존의 스프링 MVC와는 근본적인 동작 방식에 차이가 있으며 이는 주오 요청 처리 방식과 스레드 모델에서 비롯된다.스
실시간 웹 애플리케이션: 채팅 서비스, 온라인 게임, 주식 시세판 등 수많은 클라이언트가 동시에 접속하여 실시간으로 데이터를 주고 받아야 하는 경우.IoT 백앤드: 수많은 IoT 디바이스에서 발생하는 데이터를 실시간으로 수집하고 처리해야 하는 경우.API 게이트웨이/프
스프링 WebFlux는 웹 애플리케이션을 구축하는 두 가지 주요 모델을 제공하는데, 애노테이션 기반 프로그래밍 모델과 함수형 엔드포인트 프로그래밍 모델이다.함수형 엔드포인트는 스프링 MVC의 애노테이션 기반 컨트롤러와 달리, 웹 요청을 처리하는 로직을 함수형 프로그래밍
스프링 WebFlux의 WebClient는 비동기적이고 논블로킹 방식으로 HTTP 요청을 보내기 위한 리액티브 클라이언트이다.기존 스프링 MVC에서 주로 사용되던 RestTemplate의 리액티브 버전이라고 할 수 있다.WebClient는 논블로킹 I/O를 기반으로 하
WebClient는 서버로부터 연속적인 데이터 스트림을 받는 데 매우 효과적이다. 특히 Server-Sent Events(SSE)나 다른 형태의 롱-폴링(Long-Polling) 또는 지속적인 스트림을 처리할 때유용하다.서버가 한 번의 요청에 대해서 여러 개의 이벤트를
WebClient는 다양한 종류의 타임 아웃을 설정할 수 있다. 각 타임아웃은 다른 계층에서 작동하며 필요에 따라 세밀하게 제어할 수 있다.설정 방법: HttpClient를 사용하여 설정하며 연결을 설정하는 데 걸리는 최대 시간을 정의한다.설정 방법: HttpClien
Reactive Relational Database Connectivity(R2DBC)는 관계형 데이터베이스에 반응형 프로그래밍 API를 제공하는 프로젝트이다.기존의 JDBC(Java Database Connectivity)가 블로킹 방식으로 동작하여 리액티브 스택과의
Spring Data R2DBC는 Spring Data 프로젝트의 일부로 R2DBC 표준을 기반으로 관계형 데이터베이스와의 상호작용을 위한 리액티브 프로그래밍 모델을 제공한다.기존의 Spring Data JPA나 Spring Data JDBC가 블로킹 방식이었다면, S
리액티브 프로그래밍에서 트랜잭션 관리는 기존의 블로킹 방식과는 다르다. 가장 큰 변화는 스레드 로컬(ThreadLocal) 기반의 트랜잭션 컨텍스트 관리가 더 이상 적합하지 않다는 점이다.JDBC나 JPA 환경에서 트랜잭션은 일반적으로 ThreadLocal 변수에 바인
스프링 WebFlux에서 Disposable은 Reactor 프로젝트에서 제공하는 인터페이스로, 자원 해제와 관련된 중요한 역할을 한다.비동기 및 논블로킹 환경에서 자원을 적절하게 해제하고 정리하는 메커니즘을 제공한다.핵심 메소드는 dispose()이다. dispose
Sink는 Reactor 프레임워크에서 프로그래밍 방식으로 리액티브 스트림(Mono/Flux)에 데이터를 발행(emit)하는 데 사용되는 도구이다.쉽게 말해서 외부 소스에서 발생한 이벤트를 리액티브 스트림 파이프라인으로 흘려보내는 "입구" 역할을 한다.일반적으로 리액티
스트림에서 에러가 발생했을 때 스트림을 종료하고 미리 정해둔 단일 값을 반환한다.이는 에러가 발생했을 때 기본값을 제공하여 스트림이 비정상적으로 종료되는 것을 방지한다.에러가 발생한 시점에서 스트림을 이 값을 마지막으로 방출하고 완료된다.Mono.just("데이터 (1
Spring WebFlux에서 글로벌 예외 처리를 구현하는 방법은 기존의 Spring MVC와 동일하게 @ControllerAdvice와 @ExceptionHandler를 사용하는 것이다.@ControllerAdvice는 @Controller 애노테이션이 적용된 모든
WebTestClient를 사용해 WebFlux 애플리케이션을 테스트 하는 방법은 크게 두 가지이다.실제 HTTP 서버를 실행하지 않고 테스트하기: 애플리케이션 컨텍스르틀 로드하지만 실제 서버는 시작하지 않고 MockMvc처럼 Mock 객체를 이용해 테스트한다.실제 H
Project Reactor의 StepVerifier는 리액티브 스트림(Mono/Flux)을 동기적으로 테스트할 수 잇도록 도와주는 유틸리티이다.비동기적으로 발생하는 이벤트(데이터, 에러, 완료)의 순서를 예측하고 검증하는 데 사용된다.예측 가능성: 스트림에서 어떤 요
Spring WebFlux의 Project Reactor에서 리액티브 스트림의 에러 전파 및 처리를 위한 주요 연산자는 onErrorResume, onErrorReturn, doOnError이다. 이 연산자들은 스트림에서 에러가 발생했을 때 각각 다른 방식으로 에러를
실시간 이미지 스트리밍 서비스에 백프레셔 적용서버에서 SSE(Server-Sent Events)를 통해 클라이언트에게 이미지 조회 URL을 연속적으로 스트리밍 하는 상황을 가정한다.이때, 클라이언트의 처리 속도가 서버의 데이터 생성 속도를 따라가지 못하면 데이터 유실이
WebFlux와 헥사고날 아키텍처가 잘 어울리는 이유는 두 기술의 핵심 철학이 유사하기 때문이다. 둘 다 분리와 유연성을 추구하기 때문이다.헥사고날 아키텍처는 비즈니스 로직을 데이터베이스, 메시징 시스템, 외부 API 등과 같은 외부 기술로부터 분리한다.이 분리 작업은