매일 매일, 차곡 차곡 쌓기



완벽하지 않은 것을 두려워 말며,
완성도를 높히는데 집중하자.

Spring/Webflux 17

Reactive Programming 2

1. 전통적인 REST API Design 명령형 코딩 스타일이며, 하향 접근방식으로 진행됨 각 단계에서 응답이 오기 까지 Block 되며, 동기적으로 로직이 수행됨 이러한 명령형 코딩 스타일로 인해 스레드가 완전히 처리되기 전까지 Blocking 이 일어나고 리소스가 비효율적으로 사용되고 있음 1.1 전통적인 REST API Design 개선 호출을 비동기식으로 하며, 기본적으로 Non blocking 여야 합니다. 자바에서는 Callback 과 Futures 방식이 있습니다. 1.1.1 Callback 기본적으로 복잡하고 좋은 옵션이 아닙니다. 콜백은 어떤 값도 반환하지 않지만, 콜백 인스턴스를 매개변수로 사용합니다. 콜백 코드는 각 수준에서 예외를 처리하는 특성을 갖고 있으며, 코드를 읽기, 유지보..

Spring/Webflux 2024.03.01

Reactive Programming

1. 프로그래밍의 진화 오늘날 우리가 구축하는 애플리케이션은 마이크로 애플리케이션으로 분할되어 실시간으로 상호 작용하며 비즈니스를 제공합니다. 10 ~ 15 년 전과 비교하여 비즈니스가 확장됨에 따라 우리가 구축하는 앱에 대한 기대치도 변경되었습니다. 시간 과거(10 - 15 년 전) 현재 실행 환경 Monolith Applications Run it in cloud 분산 시스템 여부 Dose not embrace Distributed System Embraces Distributed Systems 2. 앱에 대한 기대 Scale based on the load : 애플리케이션은 부하에 따라 확장되어야 합니다. Use resources efficiently : 과거에는 일부 데이터를 얻기 위해 데이터베이..

Spring/Webflux 2024.03.01

Context

Context란? Reactor Sequence 상에서 상태를 저장할 수 있고, 저장된 상태 값을 Operator 체인에서 공유해서 사용할 수 있는 인터페이스이다. Context 에 저장할 상태 값은 key, value 형태로 저장된다. Context에 값을 저장하기 위해서는 contextWrite()을 사용한다. Context에서 값을 읽어오기 위해서는 읽기 전용 뷰인 ContextView를 사용한다. ContextView는 Reactor Sequence에서 deferContextual() 또는 transformDeferredContextual()을 통해서 제공된다. Mono mono = Mono.deferContextual(ctx -> Mono.just("Hello" + " " + ctx.get(ke..

Spring/Webflux 2024.03.01

Scheduler의 종류

1. Scheduler의 종류: Schedulers 클래스의 정적 메서드로 제공 됨 1.1 Schedulers.immediate() 별도의 쓰레드를 추가 할당하지 않고, 현재 쓰레드에서 실행된다. Flux.fromArray(new Integer[] {1, 3, 5, 7}) .publishOn(Schedulers.parallel()) .filter(data -> data > 3) .doOnNext(Logger::doOnNext) .publishOn(Schedulers.immediate()) .map(data -> data * 10) .doOnNext(Logger::doOnNext) .subscribe(Logger::onNext); 1.2 Schedulers.single() 하나의 쓰레드를 재사용한다. 쓰레..

Spring/Webflux 2024.02.29

Scheduler

Scheduler를 위한 전용 Operator publishOn() : Operator 체인에서 Downstream Operator의 실행을 위한 쓰레드를 지정한다. subscribeOn() : 최상위 Upstream Publisher의 실행을 위한 쓰레드를 지정한다. 즉 원본 데이터 소스를 emit하기 위한 스케줄러를 지정한다. paraller(): Downstream 에 대한 데이터 처리를 병렬로 분할 처리하기 위한 쓰레드를 지정한다. ParallelFlux의 동작 방식 Flux.fromArray(new Integer[]{1, 3, 5, 7, 9, 11, 13, 15}) .parallel() .subscribe(Logger::onNext); Flux.fromArray(new Integer[]{1, 3..

Spring/Webflux 2024.02.29

Sinks

1. Sinks 란? Reactive Streams 에서 발생하는 signal을 프로그래밍적으로 push할 수 있는 기능을 가지고 있는 Publisher 의 일종이다. Thread-Safe 하지 않을 수 있는 Processor 보다 더 나은 대안이 된다. Trhead-Safe : 멀티 스레드 환경에서 공유 자원에 접근하여 로직을 수행했을 시 문제가 없는것을 의미. (교착, 올바르지 않는 값 계산) Sinks는 Thread-Safe 하게 signal을 발생 시킨다. Sinks 는 Sinks.Many 또는 Sinks.One infterface를 사용해서 Thread-Safe 하게 signal을 발생시킨다.

Spring/Webflux 2024.02.29

Backpressure

1. Publisher와 Subscriber 간의 프로세스 subscribe : Subscriber에서 subscribe 를 호출하여 구독 onSubscribe : Publisher에서 구독이 정상적으로 이루어졌음을 알리는 onSubscribe 시그널 발생 request : Subscriber는 Publisher에게 request 시그널로 데이터 요청 onNext : Publisher는 전달받은 request 시그널에 해당하는 onNext 시그널을 Subscriber에게 전송하면서 데이터를 emit onComplete : Publisher측에서 emit 할 데이터가 없으면 Subscriber에게 onComplete 시그널을 발생 onError : 데이터를 emit하는 과정중에서 에러가 발생하게 되면 on..

Spring/Webflux 2024.02.29