debugging
·
개념 저장소/spring reactive
1. 용어Assembly Stacktrace:Reactive 스트림이 선언될 때 기록되는 스택프레임 정보를 의미합니다. 에러 발생 시, 원래의 스택트레이스에 이 정보가 추가되어 어느 지점에서 스트림이 구성되었는지 확인할 수 있습니다.Traceback:에러 발생 시, 프로그램 실행 경로를 역추적하여 어느 부분에서 에러가 발생했는지 보여주는 정보입니다. Reactive에서는 Assembly Stacktrace와 함께 traceback이 출력될 수 있습니다.Checkpoint:특정 시점에 수동으로 삽입하는 마커로, 해당 위치를 기준으로 Assembly Stacktrace의 일부를 캡쳐하거나 생략할 수 있습니다. 체크포인트를 사용하면 에러 발생 시 어느 구간에서 문제가 발생했는지 보다 명확하게 파악할 수 있습니..
context
·
개념 저장소/spring reactive
1. Context란전통적인 스레드 로컬 방식은 동시성과 스레드 전환이 잦은 Reactive 환경에서는 제대로 동작하지 않습니다.Context는 이러한 한계를 극복하기 위해, 데이터 스트림 전반에 걸쳐 부가 정보를 안전하게 전달할 수 있도록 해줍니다.불변 객체: Reactor의 Context는 불변 객체로, 데이터 스트림 내에서 상태를 공유할 때 사이드 이펙트를 최소화합니다.데이터 저장소: 보통 요청의 메타정보를 저장하는 용도로 사용합니다.ThreadLocal 대안: Reactive 환경에서는 스레드가 바뀔 수 있으므로, ThreadLocal 대신 Context를 사용하여 데이터 전파를 보장합니다.2. 사용법2.1 값 저장: contextWrite( )Context에 값을 저장하기 위해서는 context..
Scheduler
·
개념 저장소/spring reactive
1. 병렬 처리1.1 parallel() 메서드Flux.parallel(int parallelism):Flux 데이터 스트림을 지정한 개수의 병렬 실행 경로(rail)로 분할합니다.Flux.range(1, 10) .parallel(4) // 4개의 병렬 레일로 분할 .runOn(Schedulers.parallel()) // 각 레일을 별도의 스레드에서 실행 .map(i -> { System.out.println("Processing " + i + " on " + Thread.currentThread().getName()); return i * 2; }) .sequential() // 처리된 결과를 순차적으로 병합 .subscribe(result -..
SINKS
·
개념 저장소/spring reactive
과거의 Processor 사용 방식Reactive Streams나 Spring WebFlux와 같은 리액티브 프로그래밍 환경에서는 보통 데이터의 흐름이 내부에서 Publisher → Subscriber로 이어집니다. 그런데 때때로 외부에서 발생한 이벤트를 리액티브 스트림에 주입해야 할 필요가 있습니다. 과거에는 이러한 외부 이벤트를 리액티브 스트림에 연결하기 위해 Processor라는 컴포넌트를 사용했습니다.Processor는 기본적으로 Subscriber이면서 동시에 Publisher 역할을 하는 브릿지(bridge)였기 때문에, 외부에서 받은 이벤트를 내부 스트림으로 "중계"할 수 있었습니다.그러나 Processor 방식은 다음과 같은 문제점들이 있었습니다.명확하지 않은 상태 관리: Processor..
backpressure
·
개념 저장소/spring reactive
1. Backpressure란Backpressure는 데이터 스트림에서 Producer가 Consumer보다 빠르게 데이터를 생성할 때, 소비자가효율적으로 처리할 수 있도록 조절하는 메커니즘입니다. Spring WebFlux에서 Backpressure는 Reactive Streams 사양을 따르며, Publisher와 Subscriber 사이에서 조절됩니다.즉, Backpressure는 "소비자의 속도에 맞춰 생산자가 데이터를 공급하도록 강제하는 기법"입니다.2. 역할2.1 블로킹 방식과 비교Spring MVC의 서블릿 기반(블로킹) 모델에서는 Thread-per-Request 방식을 사용합니다. 요청을 받으면 해당 요청을 처리할 쓰레드를 할당하고, 해당 쓰레드는 응답이 완료될 때까지 블로킹됩니다.하지만..
Cold sequence/Hot sequence
·
개념 저장소/spring reactive
1.Sequence란Sequence는 시간의 흐름에 따라 순차적으로 발생하는 데이터 스트림을 의미합니다.Reactor에서 제공하는 Flux와 Mono는 데이터 흐름의 성격에 따라 Hot Sequence 또는 Cold Sequence로 분류됩니다.Cold Sequence: Subscriber가 구독할 때마다 새로운 데이터 스트림을 생성하는 방식Hot Sequence: 데이터 스트림이 이미 동작하고 있으며, Subscriber가 중간에 참여하는 방식2. Cold Sequence: Subscriber별로 독립적인 데이터 스트림2.1 특징Cold Sequence는 구독할 때마다 새로운 데이터 스트림을 생성합니다. Subscriber마다 별도의 데이터 소스를 통해 독립적인 데이터를 받게 됩니다.2.2 동작 방식@..
Mono와 Flux
·
개념 저장소/spring reactive
1. Mono와 Flux란 무엇인가?Mono와 Flux는 리액티브 프로그래밍의 핵심 요소로, 데이터 스트림을 비동기적으로 처리할 수 있도록 해줍니다. 이는 논블로킹(Non-blocking) 방식으로 동작하며 데이터가 필요할 때만 요청하고 처리할 수 있도록 설계되었습니다.Mono: 최대 1개의 데이터를 발행하는 PublisherFlux: 0개 이상의 데이터를 발행하는 Publisher2. Mono와 Flux의 차이점Spring WebFlux에서는 두 가지 주요 Publisher 타입이 있습니다:Mono: 0 또는 1개의 데이터를 발행하는 Publisher (최대 1개)Flux: 0개 이상의 데이터를 발행하는 Publisher (무한 가능)Mono mono = Mono.just("Hello, Mono!");..
리액티브 스트림 구성요소
·
개념 저장소/spring reactive
용어 정리1. Publisher (발행자, 게시자, 생산자, 방출자)데이터를 제공하고 Subscriber(구독자)에게 데이터를 전달한다.데이터를 방출(emit)하는 역할을 한다.2. Subscriber (구독자, 소비자)Publisher가 방출한 데이터를 소비한다.onSubscribe, onNext, onError, onComplete 메서드를 통해 데이터를 처리하며 Sequence를 구독(subscribe)한다.3. Emit (방출하다, 내보내다)Publisher가 데이터를 내보내는 행위4. Sequence (연속적인 흐름)Publisher가 emit하는 데이터의 흐름으로, Operator 체인 형태로 정의된다.5. Subscribe (구독)Subscriber가 Sequence를 구독하여 데이터를 전달..
리액티브 시스템이란
·
개념 저장소/spring reactive
리액티브 시스템의 특징1. 높은 응답성을 가진다2. 탄력적이고 유연하다.3. 메시지 기반으로 동작한다.4. 데이터 소스에 변경이 있을때마다 데이터를 전파한다.5. 선언형 프로그래밍 패러타임을 가진다. -> 실행할 동작을 구체적으로 명시하지 않고 목표만 정의한다.6. 함수형 프로그래밍 기법을 사용한다.// 명령형 프로그래밍 예시List numbers = Arrays.asList(1, 3, 21, 10, 8, 11);int sum = 0;for(int number : numbers){ if(number > 6 && (number % 2 != 0)){ sum += number; }}// 선언형 프로그래밍 예시List numbers = Arrays.asList(1, 3, 21, 10, 8..