매일 매일, 차곡 차곡 쌓기



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

분류 전체보기 78

Multicasting a Flux to several Subscribers

publish 구독 시점에 즉시 데이터를 Emit 하지 않고, connect()를 호출하는 시점에 데이터를 emit한다. Hot Sequence로 변환되기 때문에 구독 시점 이후에 emit된 데이터만 전달 받을 수 있다. autoConnect 파라미터로 지정한 숫자만큼의 구독이 발생하는 시점에 Upstream 소스에 자동으로 연결된다. 즉, publish() 처럼 connect()를 직접 호출할 필요가 없다. refCount 파라미터로 지정하는 숫자만큼의 구독이 발생하는 시점에 Upstream 소스에 자동으로 연결된다. 파라미터로 입력한 숫자 만큼의 구독이 취소되거나 Upstream 데이터 emit이 종료되면 연결이 해제된다. replay 구독 시점에 즉시 데이터를 emit 하지 않고, connet()를..

Spring/Webflux 2024.03.05

Splitting a Flux

window Upstream에서 emit되는 첫 번째 데이터부터 maxsize 숫자만큼의 데이터를 포함하는 새로운 Flux로 분할한다. Upstream 에 요청하는 데이터 개수 = Downstream에서 요청한 개수 x maxSize buffer Upstream 에서 emit 되는 데이터가 maxSize 숫자만큼 버퍼에 채워지면 버퍼를 비운다. 버퍼에 비워진 데이터는 List 형태로 한번에 Downstream으로 emit된다. bufferTimeout Upstream에서 emit된 데이터가 버퍼에 채워질 때, maxTime에 도달하면 버퍼를 비운다. maxTime에 도달하기 전에 maxSizxe 만큼의 데이터가 버퍼에 채워지면 maxTime까지 기다리지 않고, 버퍼를 비운다. groupBy groupBy..

Spring/Webflux 2024.03.05

Handling errors

error 파라미터로 지정된 에러로 종료하는 Mono 또는 Flux를 생성합니다. Java의 throw 키워드를 사용해 예외를 의도적으로 throw 하는것 처럼 Error signal을 Downstream으로 전송한다. onErrorReturn 에러가 발생했을 때, onError signal을 Downstream 으로 전파하지 않고, 대체 값을 emit한다. Java에서 try - catch 문의 catch 블록에서 발생한 예외 대신에 대체 값을 리턴하는 방식과 유사하다. onErrorResume 에러가 발생했을 때, onError signal을 Downstream으로 전파하지 않고 대체 Publisher를 리턴한다. 즉, 에러로 인해 중단된 Sequenece를 다시 재개하는 역할을 한다. onError..

Spring/Webflux 2024.03.05

Transforming an existing sequence

map Upstream에서 emit된 데이터를 mapper Function을 사용하여 변환한 후, Downstream으로 emit한다. map Operator 내부에서 에러 발생시, sequence가 종료되지 않고 계속 진행되도록 하는것이 가능하다. flatMap Upstream 에서 emit된 데이터를 inner Publisher를 통해 변환한다. map이 1대1 매핑인 반면 flatMap은 1대 다 매핑이다. 비동기적으로 동작할 경우, emit되는 순서를 보장하지 않는다. concat 파라미터로 입력되는 Publisher Sequence 들을 연결해서 데이터를 순차적으로 emit한다. 먼저 입력된 Publisher Sequence의 emit이 종료될 때까지 나머지 Publisher Sequenece ..

Spring/Webflux 2024.03.04

Filtering a sequence

filter Upstream에서 emite된 데이터 중에서 조건에 일치하는 데이터만 Downstream으로 emit한다. fileter operator의 파라미터로 입력받은 Predicate의 return 값이 true인 데이터만 Downstream으로 emit한다. skip Upstream 에서 emit 된 데이터 중에서 파라미터로 입력 받은 숫자만큼 건너뛴 후, 나머지 데이터를 Downstream으로 emit한다. 파라미터로 입력받은 시간내에 emit된 데이터를 건너뛴 후, 나머지 데이터를 emit한다. take Upstream에서 emit되는 데이터 중 파라미터로 입력받은 숫자만큼만, Downstream 으로 emit한다. Upstream에서 emit되는 데이터 중에서 파라미터로 입력받은 시간내에 ..

Spring/Webflux 2024.03.04

Creating a new sequence

목적에 맞는 Operator 분류 Creating a new sequence : 리액트 시퀀스를 새롭게 생성할때 Transforming an exisiting sequence : 이미 존재하는 시퀀스를 가공할때 Filtering a sequence : 특정 조건에 맞춰 emit 되는 데이터를 필터링 할 때 Peeking into a sequence : 내부에서 보내는 Signal을 엿볼 수 있는 api Handling error : 에러 다루는것 Working with time : 시간 가지고 작업하는 오퍼레이터 Splittting a Flux : Emit 되는 데이터들을 나눌수 있는것 Multicasting a Flux to several Subscribers : 다수의 Subscriber 에게 한번에..

Spring/Webflux 2024.03.04

R2DBC

R2DBC는 언제 사용할까? Reactive Programming을 하는 과정에서 Dtabase 사용이 필요한 경우에 사용한다. 많은 예제로 Proejct Reactor 기반의 Spring Webflux를 사용하며 Database를 사용해야 할 때 R2DBC를 많이 사용한다. 그냥 Stpring 진영에서 많이 사용하는 JPA를 사용하면 안되나? 사용할 수 있다만, 사용하지 않는것이 좋다. JPA는 기본적으로 비동기를 제공하지 않는다. 즉 Webflux 기반에서 JPA를 사용하면 Database 부분에서 block 되고, 그동안 thread가 기다리게 된다. Webflux 환경에서 이러한 block은 전체 시스템에 영향이 갈 수 있다. 따라서 Webflux 기반에서 JPA를 사용할 수 있으나 사용하지 않는..

Spring/Webflux 2024.03.02

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