reactiveprogramming 8

Adapt (9/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. 페이지 요약을 시작해보자, RxJava3 와 Reactor 3 타입은 별도의 라이브러리 없이 함께 사용할 수 있다. 두 라이브러리 모두 어떤한 Publisher로 부터 인스턴스를 만들 수 있는 Factory 메서드를 제공하기 때문입니다. 서로 매칭되는 타입은 어떤게 있을까? 그리곡, 과연 사용할 일이 있을까? Publisher: Flux: Flowable 연습문제 Q1. Flux to Flowable back to Flux 우선 JavaDoc 문서를 찾아놓자! Flowable (RxJava) // TODO Adapt Flux to RxJava Flowable Flowable fromFlux..

learning 2021.03.24

에러(Error, 8/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. 리액터는 에러를 전파하고 복구할 수 있는 여러 연산(=operators)을 가지고 있습니다. 복구는 보통 순서 변경 및 새로운 Subscription구독 과 같은 방법이 있습니다. 문제풀이 에러 발생시 Mono 형태의 기본값을 리턴하는 예 //======================================================================================== // TODO Return a Mono containing User.SAUL when an error occurs in the input Mono, else do not change the in..

learning 2021.03.16

요청(Request, 7/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. 위 다이어그램 중 볼륨 컨트롤은 리액티브 스트림의 Backpressure를 의미합니다. Backpressure는 Subscriber가 Publisher에게 얼마만큼의 데이터를 처리할지 신호를 보내며, 이와 같은 방법으로 Publisher의 데이터 생산을 제한합니다. 해당 컨트롤은 Subscription 레벨에서 처리됩니다. 구독(=subscribe())는 Subscription 객체를 반환합니다. 그리고 해당 객체의 request(long)또는 cancel()을 이용해서 데이터의 흐름을 제어하게 됩니다. 특히, request(Long.MAX_VALUE)은, 무제한 데이터 요청을 의미하며, ..

learning 2021.03.16

병합(Merge, 6/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. 시퀀스 병합은 여러 Publisher로 부터 값을 구독하여 하나의 Flux로 데이터를 전달하는 것을 의미한다. 문제풀이 // TODO Merge flux1 and flux2 values with interleave Flux mergeFluxWithInterleave(Flux flux1, Flux flux2) { return Flux.merge(flux1, flux2); } Flux.merge: Publisher 의 순서와 상관없이 데이터 발생할 때마다 바로바로 Flux로 전달. // TODO Merge flux1 and flux2 values with no interleave (flux1 ..

learning 2021.03.16

비동기 데이터 변형 (5/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. Transform Reactor 에는 데이터 변형시킬 수 있는 많은 연산자(Operators) 가 준비되어 있음 연습 // TODO Capitalize the user username, firstname and lastname Mono capitalizeOne(Mono mono) { return mono.map(u -> new User(u.getUsername().toUpperCase(), u.getFirstname().toUpperCase(), u.getLastname().toUpperCase())); } // TODO Capitalize the users username, firstNa..

learning 2021.03.09

StepVerifier 사용 방법 (4/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. StepVerifier Reactor-test 프로젝트에 속함 Publisher 를 구독하면서 예상값과 순서를 검증(Assert)할 수 있음 검증이 실패할 경우, AssertionError 를 발생 create메서드로 인스턴스를 생성 반드시 verify() 메서드(=StepVerifier.LastStep)를 호출해야 함 보통 다음과 같은 형태임 StepVerifier.create(T) .{expectations...} .verify() expectations 의 종류 연습 // TODO Use StepVerifier to check that the flux parameter emits "f..

learning 2021.03.09

Mono 만들기 (3/12)

Tech.io의 'Reactive Programming with Reactor 3'을 공부하면서 정리하는 글입니다. Mono 리액티브 스트림의 Publisher 구현체 단 하나의 요소만 내놓는다(=Emit) Mono 가 가능한 상태 하나의 값을 가지고 있는 상태 (complete with element) 빈 상태 (complete without element) 실패한 상태 (error) Mono타입은 완료 신호에만 관심이 있는 경우 사용 연산자를 이용하여 '비동기 파이프라인'을 구성 가능 (Publisher를 상속한 Reactor의 특징) 마블 다이어그램 Mono 의 일반적인 마블 다이어그램 실제 예제 코드 Mono.just(1) .map(integer -> "foo" + integer) .or(Mono..

learning 2021.03.09

Flux 인스턴스 생성하기 (2/12)

Tech.io의 'Reactive Programming with Reactor 3 - Flux'을 공부하면서 정리하는 글입니다. Flux 리액티브 스트림의 Publisher역할을 한다. 다음과 같은 연산(=Operators)들이 (추가로) 정의되어 있다. 생성 (Generate) 변환 (Transform) 조율 (Orchestrate) 0에서 n 개의 요소를 보낸 뒤(=emit, onNext 이벤트) 성공(=onComplete '종료' 메서드)하거나 에러를 발생(onError '종료' 메서드) 종료 이벤트가 발생하지 않으며 무한한(데이터를 만들어내는) 상태임. Static 팩토리 메서드를 이용해서 생성할 수 있음. 인스턴스 메서드를 이용해서 비동기 파이프라인 구축을 정의할 수 있습니다.(데이터 처리 방법..

learning 2021.03.02