분류 전체보기

·Spring
리액티브 오퍼레이션 Flux와 Mono는 리액터가 제공하는 가장 핵심적인 구성요소이며, 이 오퍼레이션들은 두 타입을 함께 결합하여 데이터가 전달될 수 있는 파이프라인을 생성한다. Flux와 Mono에는 500개 이상의 오퍼레이션이 있으며 각 오퍼레이션은 다음과 같이 분류된다. 생성(Creation) 오퍼레이션 조합(Combination) 오퍼레이션 변환(Transformation) 오퍼레이션 로직(Logic) 오퍼레이션 마블 다이어그램을 보려면 해당 사이트에 가면 볼 수 있다. (https://rxmarbles.com/#from) 1. 생성(Creation) 오퍼레이션 데이터를 생성하여 방출할 때 사용. 객체로부터 생성 Flux나 Mono로 하나 이상의 객체를 생성하려면 just() 메서드를 사용한다....
·Spring
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); 위와 같이 리엑티브..
·Spring
리엑터 개요 애플리케이션 코드를 개발할 때 명령형(Imperative)과 리엑티브(Reactive) 두 가지 형태로 코드를 작성할 수 있다. 명령형 : 순차적으로 연속되는 작업이고, 각 작업은 한 번에 하나씩 그리고 이전 작업 다음에 실행한다. 데이터는 모아서 처리되고 이전 작업 데이터 처리를 끝낸 후에 다음 작업으로 넘어갈 수 있다. 리엑티브(반응형) : 데이터 처리를 위해 일련의 작업이 병렬로 실행될 수 있으며, 각 작업은 부분집합의 데이터를 처리할 수 있고, 처리가 끝난 데이터는 다음 작업에 남겨주고 다른 부분집합의 데이터로 계속 작업할 수 있다. 이런 리액터 프로젝트는 비동기 파이프라인을 구축할 때 콜백 지옥과 깊게 중첩된 코드를 생략하는 목적으로 설계되었다. 리액터 1.x는 배압조절 기능이 없다..
·Spring
@EventListener를 사용한 발행-구독 패턴 스프링 프레임워크는 @EventListener 어노테이션과 이벤트 발행을 위한 ApplicationEventPublisher 클래스를 제공한다. Observer Pattern과 달리 발행-구독 패턴을 이용하면 게시자와 구독자는 서로 알 필요가 없다. 그리고 게시자와 구독자 간에 간접적인 계층을 제공하고 구독자는 브로드캐스트하는 이벤트 채널로부터 받고, 게시자는 누군지 신경쓰지 않는다. 이벤트 채널은 동시에 몇 명의 게시자가 있는지 알 수 있으며, 수신 메시지를 구독자에게 배포하기 전에 필터링 작업을 할 수도 있고, 필터링 및 라우팅은 메시지 내용이나 메시지 주제, 때로는 둘 다 발생할 수 있다. 따라서 토픽 기반 시스템(Topic-Based System..
·Language/Java
buffer buffer는 말 그대로 버퍼에 담아서 통지를 하는 것. import io.reactivex.Flowable; import java.util.concurrent.TimeUnit; public class Buffer { public static void main(String[] args) throws Exception { Flowable.interval(100L, TimeUnit.MILLISECONDS) .take(12) //12건통지 .buffer(3) //3개씩 모아서 통지 .subscribe(data -> System.out.println(data)); Thread.sleep(4000L); } }
·Language/Java
concatMap / concatMapDelayError 받을 데이터를 Flowable/Observable로 변환하여 Flowable/Observable을 하나씩 순서대로 실행하여 데이터를 통지한다. flatMap 메서드와 다르게 데이터를 받는 순서대로 Flowable/Observable을 생성하여 하나 씩 실행한다. 여러 데이터를 받더라도 첫번 째 데이터로 생성한 Flowable/Observable의 실행이 완료되지 않으면 다음 데이터를 만든 Flowable/Observable의 데이터는 통지되지 않는다. 또한 호출하는 스레드와 별도의 스레드에서 실행되더라도 데이터를 받을 때 바로 실행되지 않으므로 데이터를 받는 순서대로 처리하는 것은 보장하지만, 처리성능에는 영향을 줄 수 있다. concatMap은 ..
·Language/Java
flatMap map 과 마찬가지로 원본 데이터를 변환하여 통지하는 연산자이다. 다만 map 메서드와 달리 여러 데이터가 담긴 Flowable/Observable을 반환하여 데이터 한 개로 여러 데이터를 통지할 수 있다. 또한 Flowable/Observable을 반환해 특정 데이터를 통지하지 않거나 여러 Flowable/Observable을 반환해 에러를 통지할 수 있다. flatMap-1 : 원본 타임라인에서 데이터를 받을 때마다 Flowable/Observable을 생성하고 결과 데이터를 통지한다.(생성한 Flowable/Observable이 다른 스레드에서 수행되면 통지 데이터는 비동기로 생성) flatMap-2 : 원본 통지 타임라인에서 데이터를 받아 Flowable/Observable을 생성한..
·Language/Java
map 원본 Flowable/Observable에서 통지하는 데이터를 변환한 후 데이터를 통지하는 연산자로 flatMap과 달리 한 개의 데이터로 여러 데이터를 생성하여 통지하거나 데이터 통지를 건너뛸 수 없다. 데이터를 받으면 반드시 null이 아닌 데이터 하나를 반환해야 한다. Flowable/Observable의 메서드 //map method public final Flowable map(Function
·Language/Java
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..
·Language/Java
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..
조슈아。
'분류 전체보기' 카테고리의 글 목록 (2 Page)