전체 글 35

04 Adapt

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/Adapt의 문제풀이이다. RxJava3나 Reactor3 모두 Reactive Streams의 구현체이기 때문에, 외부 라이브러리 없이 서로와 호환된다. 예를들어, Flux(Reactor3의 Publisher 구현체)를 Flowable(RxJava3의 Publisher 구현체)로 (혹은 반대로) 변경할 수 있다. Flowable fromFluxToFlowable(Flux flux) { return Flowable.fromPublisher(flux); } Flux fromFlowableToFlux(Flowable flowable) { return Flux.from(flowable); } O..

03 Request

PubSub 구조는 대표적인 Push방식의 디자인 패턴이다. Push방식의 대표적인 특징으로, 데이터를 받는 입장에서는 주는 데이터를 여건에 상관없이 받아서 처리해야 한다. 만약 데이터를 받아서 복잡한 로직을 처리해야 하는데 계속 데이터가 밀려올 경우 부하가 발생할 수도 있다. 초기 Push방식의 디자인패턴인 Observer패턴에서 이러한 단점이 나타나자, 이를 보완한 PubSub 디자인 패턴이 등장하게 되었다. PubSub 디자인패턴에서는 request() 메서드를 통해서 Subscriber의 상황에 따라 Publisher에게 얼만큼의 데이터를 받을 수 있는지 전달 할 수 있다. 1. thenRequest(Long.MAX_VALUE) Reactor의 Subscriber에서 Publisher로 처리가능한..

02 Merge

복수개의 Publisher를 합칠 수 있다. 1. merge(Flux flux1, Flux flux2) merge() 메서드는 먼저 도착하는 데이터가 먼저 처리되는 Flux를 반환한다. 즉, flux1과 flux2가 생상하는 데이터들의 순서가 보장되지 않는다. Flux mergeFluxWithInterleave(Flux flux1, Flux flux2) { return Flux.merge(flux1, flux2); } 2. concat(Flux flux1, Flux flux2) concat() 메서드는 인자로 받는 Flux 객체들의 순서를 보장한다. Flux mergeFluxWithNoInterleave(Flux flux1, Flux flux2) { return Flux.concat(flux1, flux..

flatMap 알아보기

Flux.range(1, 10).flatMap( A ).map(i -> i * 10).subscribe(System.out::println);flatMap이 어떻게 동작하는지 알아보기 위해, 다음 코드의 동작을 잘 살펴보려 한다.A에 함수에 따라 달라지는 동작을 그림과 함께 살펴보자.(flatMap의 비동기성을 잘 살펴보기 위해 스레드는 1개로 제한할 것이다.)    # 1. 1초 후에 인자를 단순히 Mono로 감싸 반환하는 함수를 사용Flux.range(1, 10).flatMap(this::sleepAndWrap).map(i -> i * 10).subscribe(System.out::println);private Mono sleepAndWrap(int i) { return Mono.just(i)...

01 Introduction to Reactive Programming

이 글은 tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro 에 대한 풀이 및 정리입니다. Reactive Programming 정의 리액티브 프로그래밍이란, 비동기&논블라킹으로 동작하는 애플리케이션을 작성하기 위한 새로운 패러다임의 프로그래밍이다. Reactive Streams & Reactor Reactive Streams Reactive Programming에 대한 수요가 증가하면서, Reactive 코드를 작성하는 개발자/코드/라이브러리가 많아졌다. but, 코드마다 구현 방식이 각각 달라지면 다른사람의 코드를 라이브러리로 사용하거나 협업이 필요할 때 혼란이 생겼다. 이를 위해 Reactive Programming에 대한 하나의 표..