Reactor에서의 디버깅 방법 Reactor는 처리되는 작업들이 대부분 비동기적으로 실행되고, Reactor Sequence는 선언형 프로그래밍 방식으로 구성되므로 디버깅이 쉽지 않습니다. 이러한 디버깅의 어려움을 최소화하기 위해 Reactor에서는 몇 가지 방법을 제공합니다. 1. Debug Mode를 사용한 디버깅 Reactor에서는 디버그 모드(Debug Mode)를 활성화해서 Reactor Sequence를 디버깅할 수 있습니다. @Slf4j public class DemoApplication { public static Map fruits = new HashMap(); static { fruits.put("banana", "바나나"); fruits.put("apple", "사과"); fruit..
Context란? Context는 어떠한 상황에서 그 상황을 처리하기 위해 필요한 정보 라고 할 수 있습니다. 프로그래밍에서 몇 가지 예시를 들어보면 다음과 같습니다. ServletContext := Servlet이 Servlet Container와 통신하기 위해서 필요한 정보를 제공하는 인터페이스 ApplicationContext := Spring Framework에서 애플리케이션의 정보를 제공하는 인터페이스 SecurityContext := Spring Security에서 애플리케이션 사용자의 인증 정보를 제공하는 인터페이스 이처럼 프로그래밍 세계에서 Context는 어떠한 상황을 처리하거나 해결하기 위해 필요한 정보를 제공하는 어떤 것이라고 할 수 있습니다. Java에서는 인터페이스 또는 클래스가 ..
Reactor에서 사용되는 Siganl을 프로그래밍 방식으로 전송할 수 있는 Sinks에 대해 알아봅시다. Sinks란? Sinks는 앞서 설명했던, Processor 인터페이스의 기능을 개선한 것입니다. Sinks에 대해 Reactor API 문서에서는 다음과 같이 설명하고 있습니다. 첫 문장을 보면, "Sinks는 리액티브 스트림즈의 Signal을 프로그래밍 방식으로 push 할 수 있는 구조이며, Flux or Mono의 의미 체계를 가진다" 라고 설명하고 있습니다. 지금까지 설명했던 방식은 모두 Flux 또는 Mono가 onNext 같은 Signal을 (메서드 체이닝을 이용해서)내부적으로 전송해주는 방식이었는데, Sinks를 사용하면 프로그래밍 코드를 통해 명시적으로 Signal을 전송할 수 있습..
Backpressure 란? Backpressure는 우리말로 배압 또는 역압이라고 합니다. 배관으로 유입되는 가스나 액체 등의 흐름을 제어하기 위해 역으로 가해지는 압력을 의미합니다. 리액티브 프로그래밍에서는 Publisher가 끊임없이 emit 하는 무수히 많은 데이터를 적절하게 제어해 데이터 처리에 과부하가 걸리지 않도록 제어하는 것이 Backpressure의 역할입니다. Publisher가 data 1부터 N까지를 emit하는 상황을 생각해봅시다. 먼저, Publisher가 data 1을 Subscriber에서 emit 합니다. 하지만, Subscriber가 data 1을 처리하는 속도가 느려서 처리가 끝나기도 전에, Publisher는 data 2부터 data N까지 계속해서 emit하게 됩니다..
Cold와 Hot의 의미 간단히 얘기하자면, 컴퓨터 시스템에서 Cold와 Hot의 의미는 다음과 같습니다. Cold는 무언가를 새로 시작하고, Hot은 무언가를 새로 시작하지 않는다. 이렇게만 보면 어떤 의미인지 잘 와닿지 않을 수 있습니다. 따라서, 예시를 몇 가지 들어보겠습니다. Hot Swap 컴퓨터 시스템에서 Hot Swap이란, 전원을 끄거나 시스템을 중지시키는 행위 없이 장치를 교체해서 사용이 가능한 기능을 말합니다. 즉, 전원이나 시스템을 껐다 키는 행위를 새로 시작한다는 의미로 볼 수 있고, 이 행위를 하지 않는다는 것입니다. 위에서 말한 "무언가를 새로 시작하지 않는다."와 대응되는 의미라고 볼 수 있습니다. 반대로, Cold Swap의 경우는 컴퓨터에 연결하거나 제거하기 위해 완전히 컴..
마블 다이어그램(Marble Diagram)이란? 마블 다이어그램은 여러 가지 구슬 모양의 도형으로 구성된 도표 로 Reactor에서 지원하는 Operator를 이해하는 데 중요한 역할을 합니다. 비동기적인 데이터 흐름을 시간의 흐름에 따라 시각적으로 표시한 다이어그램 이라고 이해 할 수 있습니다. 위 그림은 마블 다이어그램의 기본 구성을 설명한 그림입니다. 하나씩 살펴 봅시다. 다이어그램에는 두 개의 타임라인이 존재하는데, 첫째가 1과 같이 Publisher가 데이터를 emit하는 타임라인입니다. Operator 함수(5)를 기준으로 상위에 있는, 즉 Upstream의 Publisher입니다. Reactor에서 Flux의 경우, Source Flux라고 부릅니다. 2는 Publisher가 emit하는 ..