거꾸로 바라본 세상
[Srping Reactor] 리액티브 오퍼레이션
Spring 2023. 5. 2. 09:29

리액티브 오퍼레이션 Flux와 Mono는 리액터가 제공하는 가장 핵심적인 구성요소이며, 이 오퍼레이션들은 두 타입을 함께 결합하여 데이터가 전달될 수 있는 파이프라인을 생성한다. Flux와 Mono에는 500개 이상의 오퍼레이션이 있으며 각 오퍼레이션은 다음과 같이 분류된다. 생성(Creation) 오퍼레이션 조합(Combination) 오퍼레이션 변환(Transformation) 오퍼레이션 로직(Logic) 오퍼레이션 마블 다이어그램을 보려면 해당 사이트에 가면 볼 수 있다. (https://rxmarbles.com/#from) 1. 생성(Creation) 오퍼레이션 데이터를 생성하여 방출할 때 사용. 객체로부터 생성 Flux나 Mono로 하나 이상의 객체를 생성하려면 just() 메서드를 사용한다....

Spring Reactor 시작하기
Spring 2023. 5. 2. 09:27

Spring Reactor 리액티브 프로그래밍은 일련의 작업 단계를 기술하는 것이 아니라 데이터가 전달될 파이프라인을 구성하여 데이터가 전달되는 동안 어떤 형태로든 변경 또는 사용되는 것. 사람의 이름을 가져와 대문자로 변경 후 출력 String name = "devPaik"; String capitalName = name.toUpperCase(); String greeting = "Hello, "+ capitalName + "!"; System.out.println(greeting); Mono.just("devPaik") .map(n -> n.toUpperCase()) .map(cn -> "Hello," + cn + "!") .subscribe(System.out::println); 위와 같이 리엑티브..

[RxJava] concatMap / concatMapDelayError
Language/Java 2023. 4. 26. 09:38

concatMap / concatMapDelayError 받을 데이터를 Flowable/Observable로 변환하여 Flowable/Observable을 하나씩 순서대로 실행하여 데이터를 통지한다. flatMap 메서드와 다르게 데이터를 받는 순서대로 Flowable/Observable을 생성하여 하나 씩 실행한다. 여러 데이터를 받더라도 첫번 째 데이터로 생성한 Flowable/Observable의 실행이 완료되지 않으면 다음 데이터를 만든 Flowable/Observable의 데이터는 통지되지 않는다. 또한 호출하는 스레드와 별도의 스레드에서 실행되더라도 데이터를 받을 때 바로 실행되지 않으므로 데이터를 받는 순서대로 처리하는 것은 보장하지만, 처리성능에는 영향을 줄 수 있다. concatMap은 ..

[RxJava] flatMap
Language/Java 2023. 4. 26. 09:37

flatMap map 과 마찬가지로 원본 데이터를 변환하여 통지하는 연산자이다. 다만 map 메서드와 달리 여러 데이터가 담긴 Flowable/Observable을 반환하여 데이터 한 개로 여러 데이터를 통지할 수 있다. 또한 Flowable/Observable을 반환해 특정 데이터를 통지하지 않거나 여러 Flowable/Observable을 반환해 에러를 통지할 수 있다. flatMap-1 : 원본 타임라인에서 데이터를 받을 때마다 Flowable/Observable을 생성하고 결과 데이터를 통지한다.(생성한 Flowable/Observable이 다른 스레드에서 수행되면 통지 데이터는 비동기로 생성) flatMap-2 : 원본 통지 타임라인에서 데이터를 받아 Flowable/Observable을 생성한..

[RxJava] map
Language/Java 2023. 4. 26. 09:37

map 원본 Flowable/Observable에서 통지하는 데이터를 변환한 후 데이터를 통지하는 연산자로 flatMap과 달리 한 개의 데이터로 여러 데이터를 생성하여 통지하거나 데이터 통지를 건너뛸 수 없다. 데이터를 받으면 반드시 null이 아닌 데이터 하나를 반환해야 한다. Flowable/Observable의 메서드 //map method public final Flowable map(Function

[RxJava] never
Language/Java 2023. 4. 26. 09:36

never 아무것도 통지하지 않은 Flowable/Observable을 생성하는 연산자로, 완료도 통지하지 않는다. empty는 완료를 통지하지만 never는 아무것도 통지하지 않는다. [소스코드] public class Main { public static void main(String[] args) throws Exception { never(); } static void never() throws Exception { Flowable.never().subscribe(new PrintSubscriber()); } } [Subscribe 코드] import io.reactivex.subscribers.DisposableSubscriber; public class PrintSubscriber extend..

[RxJava] empty
Language/Java 2023. 4. 26. 09:35

empty 빈 Flowable/Observable을 생성하는 연산자로, 처리를 시작하면 바로 onComplete를 통지한다. empty 메서드는 단독으로 거의 사용하지 않고 flatMap 메서드의 데이터가 null일 때 이를 대신해 empty 메서드를 생성하여 데이터를 통지 대상에게 재외하는 작업을 할 수 있다. public class Main { public static void main(String[] args) throws Exception { empty(); } static void empty() throws Exception { Flowable.empty().subscribe(new PrintSubscriber()); } } [Subscribe 코드] import io.reactivex.subs..

[RxJava] defer
Language/Java 2023. 4. 26. 09:35

defer 구독될 때마다 새로운 Flowable/Observable을 생성하는 연산자이다. just와는 다르게 선언한 시점의 데이터를 통지하는 것이 아니라 호출 시점에 데이터 생성이 필요할 때 사용한다. [소스코드] public class Main { public static void main(String[] args) throws Exception { defer(); justTime(); } static void defer() throws Exception { System.out.println("defer() locaTime"); Flowable flowable = Flowable.defer(() -> Flowable.just(LocalTime.now())); flowable.subscribe(new ..

[RxJava] timer
Language/Java 2023. 4. 26. 09:34

timer 호출 시점부터 지정시간 동안 대기한 후 long type 숫자 0 하나만 통지하고 종료하는 Flowable/Observable을 생성하는 연산자이다. timer 메서드는 기본적으로 Schedulers.computation() 스케줄러의해 실행된다. [소스코드] import io.reactivex.Flowable; import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws Exception { tiner(); } static void tiner() throws Exception { Fl..

article thumbnail
[Reactive Programming] RxJava 개념
Language/Java 2023. 4. 26. 08:50

RxJava 개념 RxJava는 Reactive Progrmming을 구현하는데 사용하는 라이브러리 이다. 에릭 마이어가 개발한 .NET 프레임워크의 실험적 라이브러리인 Reactive Extensions(Rx) 를 2009년 마이크로소프트에서 공개하고 2013년 넷플릭스에서 자바로 이식한 것이 RxJava의 시작이다. 현재 Reactive Extensions를 다루는 라이브러리는 ReactiveX라는 오픈 소스 프로젝트로 바뀌어 자바와 .NET 뿐만 아니라 자바스크립트, 스위프트, 등 여러 프로그램언어를 지원하는 라이브러리를 제공한다. Reactive Extensions는 동기식 또는 비동기식 스트림과 관계 없이 명령형 언어를 이용해 데이터 스트림을 조작할 수 있는 일련의 도구이다. ReactiveX는..