스프링으로 시작하는 리액티브 프로그래밍 스터디
-
13장 TestingSpring/Webflux 2023. 5. 27. 14:40
Reactor-test 모듈의 기능을 사용하기 위해서는 build.gradle 파일의 dependencies 블록에 다음 의존성을 추가해야 합니다 dependencies { testImplementation 'io.projectreactor:reactor-test' } 13.1 StepVerifier를 사용한 테스팅 Reactor 에서 가장 일반적인 테스트 방식은, 구독 시점에 해당 Operator 체인이 시나리오대로 동작하는지 테스트하는 것입니다 Reactor Sequence 에서 다음에 발생할 Signal 이 무엇인지, 기대하던 데이터들이 emit 되었는지, 특정 시간 동안 emit 된 데이터가 있는지 등을 단계적으로 테스트할 수 있습니다. 이처럼 Reactor 에서는 Operator 체인의 다양한 ..
-
10장 SchedulerSpring/Webflux 2023. 5. 7. 22:18
10.1 스레드 Thread 의 개념 이해 스레드는 크게 물리적인 스레드 Physical Thread 와 논리적인 스레드 Logical Thread 로 구분합니다. CPU 사양이 듀얼코어 4 스레드라고 표기되었다면 4 스레드는 물리적인 스레드를 의미합니다. 논리적인 스레드 논리적인 스레드는 이론적으로 메모리가 허용하는 범위 내에서 얼마든지 만들 수 있지만, 물리적인 스레드의 가용 범위 내에서 실행될 수 있습니다. 물리적인 스레드는 병렬성 Parallelism 과 관련 있으며, 논리적인 스레드는 동시성 Concurrency 와 관련 있습니다. 병렬성 -> 물리적인 스레드가 실제로 동시에 실행되기 때문에 여러 작업을 동시에 처리함을 의미합니다. 동시성 -> 동시에 실행되는 것처럼 보이는 것을 의미 합니다. ..
-
9장 SinksSpring/Webflux 2023. 5. 1. 10:53
9.1 Sinks란? Processor 는 Publisher 와 Subscriber 의 기능을 모두 지니기 때문에 Subscriber 로서 기능할 땐 다른 Publisher 로 구독할 수 있고, Publisher 로서 기능할 땐 다른 Subscriber 가 구독할 수 있습니다. Reactor 3.4 부터 Sinks 가 등장해서 Processor 는 3.5 부터 제거 될 예정입니다. Sinks 는 리액티브 스트림즈의 Signal을 프로그래밍 방식으로 푸시할 수 있는 구조이며, Flux 또는 Mono 의 의미 체계를 가집니다 Flux 또는 Mono 가 onNext 같은 Signal 을 내부적으로 전송해 주는 방식이었는데, Sinks 를 사용하면 프로그래밍 코드를 통해 명시적으로 Signal 을 전송할 수 있..
-
8장 backpressureSpring/Webflux 2023. 4. 23. 18:30
8.1 Backpressure란? Subscriber 의 속도가 느린 경우 필요 8.2 Reactor에서의 Backpressure 처리 방식 8.2.1 데이터 개수 제어 Subscriber 가 적절히 처리할 수 있는 수준의 데이터 개수를 Publisher 에게 요청하는 것 public static void main(String[] args) { Flux.range(1, 5) .doOnRequest(data -> log.info("# doOnRequest: {}", data)) .subscribe(new BaseSubscriber() { @Override protected void hookOnSubscribe(Subscription subscription) { request(1); } @SneakyThro..
-
7장 Cold Sequence 와 Hot SequenceSpring/Webflux 2023. 4. 23. 16:13
7.1 Cold와 Hot의 의미 Hot swap : 컴퓨터 전원이 켜져 있는 상태에서 디스크등의 장치를 교체할 경우 Hot deploy : 서버를 재시작하지 않고서 응용 프로그램의 변경 사항을 적용할 수 있는 기능 Hot wallet : 인터넷에 연결되어 즉시 사용 가능하지만, 보안에 취약 -> Hot 무언가 처음부터 다시 시작하지 않고, 같은 작업이 반복되지 않는 느낌 Cold wallet : 인터넷에 단절되어 사용성은 떨어지지만 보안이 강화 -> Cold 처음부터 새로 시작해야 하고, 새로 시작하기 때문에 같은 작업이 반복 Cold 는 무언가를 새로 시작하고, Hot 은 무언가를 새로 시작하지 않는다 7.2 Cold Sequence Cold Sequece : Sequece 가 새로 시작한다 정도로 볼..
-
6장 마블 다이어그램Spring/Webflux 2023. 4. 22. 17:10
Marbel Diagram 사전학습 https://brunch.co.kr/@lonnie/20 RxJava, 마블 다이어그램 마블 다이어그램, Rx를 공부하면 필연적으로 마주하게 되는 도표다. 리액티브 세상에서 일어나는 모든 일들(비동기 데이터 흐름)은 마블 다이어그램으로 시각화된다. 따라서 이 도표를 익히는 brunch.co.kr 6.1 마블 다이어그램(Marble Diagram)이란? 2개의 Timeline + 1 operator 1~4 : Publisher 가 emit 하는 타임라인 5 : operator 6 ~ 9 : Downstream 에 가공된 데이터 6.2 마블 다이어그램으로 Reactor의 Publisher 이해하기 Mono Mono 는 위 그림처럼 하나의 데이터를 emit 합니다. publ..
-
5장 Reactor 개요Spring/Webflux 2023. 4. 22. 16:12
5.1 Reactor 란? Reactor 의 특징 01. Reactive Streams 02. Non-Blocking 03. Java's functional API 04. Flux[N] 2개의 Publisher 중 하나, N 개의 데이터를 emit 함, 무한대 가능 05. Mono[0|1] 2개의 Publisher 중 하나, 한 건도 emit 하지 않거나, 단 한건만 emit 하는 단발성 데이터 06. Well-suited for microservices 07. Backpressure - ready network Publisher 로 부터 전달 받은 데이터를 처리하는 데 있어 과부하 걸리지 않도록 제어하는 Backpressure 지원 5.2 Hello Reactor 코드로 보는 Reactor의 구성요소 ..
-
4장 리액티브 프로그래밍을 위한 사전 지식Spring/Webflux 2023. 4. 22. 13:13
1 함수형 인터페이스(Functional Interface) 함수형 인터페이스 역시 인터페이스 함수를 값으로 취급, 어떤 함수를 호출할 때 함수 자체를 파라미터로 전달할 수 있습니다 ?? 암호화 화폐를 unit 순서대로 sort 하는 예제 Collections.sort() 이용 Comparator 인터페이스 사용 public static void main(String[] args) { List cryptoCurrencies = SampleData.cryptoCurrencies; // unit 순서대로 sort Collections.sort(cryptoCurrencies, new Comparator() { @Override public int compare(CryptoCurrency cc1, CryptoC..