Spring/Webflux
-
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 체인의 다양한 ..
-
12장 DebuggingSpring/Webflux 2023. 5. 21. 16:51
12.1.0 Reactor에서의 디버깅 방법 동기식, 명령형 프로그래밍에서는 Exception이 발생했을 때 Stacktrace 를 확인하거나 예외 발생이 예상되는 코드에 Breakpoint 를 걸어서 문제가 발생한 원인을 단계적으로 찾아가면 되기 때문에 상대적으로 디버깅이 쉽습니다. 반면에 Reactor 는 작업이 비동기적으로 실행되고, Reactor Sequence 는 선언형 프로그래밍 방식으로 구성되므로 디버깅이 쉽지 않습니다. 12.1.1 Debug Mode를 사용한 디버깅 Hooks.onOperatorDebug() 를 사용해서 Debug Mode 를 활성화 합니다. example 12_1 : 4th 데이터의 key grape 인데, MELONS 를 읽어서 오류가 발생하는 코드 public sta..
-
11장 ContextSpring/Webflux 2023. 5. 12. 20:59
1 Context란? * context [ˈkɑːˌtɛkst] 2. the situation in which something happens, the group of conditions that exist where and when something happens 2. 어떤 일이 발생하는 상황, 어떤 일이 발생하는 장소와 시간에 존재하는 조건의 집합 1. the words that are used with a certain word or phrase and that help to explain its meaning 1. 특정 단어 또는 구와 함께 사용되며 그 의미를 설명하는 데 도움이 되는 단어 예 : 아파서 병원 방문 시 의사에게 소개하는 전후 사정과 증상이 Context 에 해당합니다. → 어떠한 상..
-
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..