생계유지형 개발자/Reactive Programming 4

[리액티브 프로그래밍] About Webflux, Mono

WebFlux에서 Controller의 요청처리 과정 (Mono 실행 시점) WebFlux에서 Mono.just() 를 사용해 기본적인 Controller를 구현했다. @GetMapping("/mono") fun mono(): Mono { logger.log("print 1") val m: Mono = Mono.just(generateHello()) .doOnNext { logger.log("doOnNext() => $it") } .log() logger.log("print 2") return m } fun generateHello(): String { logger.log("method generateHello()") return "Hello Mono" } * 위 소스에서 logger.log()는 Slf..

[리액티브 프로그래밍] User Thread, Daemon Thread의 차이점

사용자 쓰레드(User Thread)와 대몬 쓰레드(Daemon) 사용자 쓰레드와 대몬 쓰레드의 차이점은 메인 쓰레드(Main Thread)가 종료되었을 때 함께 종료되는가, 그렇지 않은가에 있다. 사용자 쓰레드는 메인 쓰레드가 종료되어도 프로세스를 강제로 종료하지 않는다. (종료하는 주체는 JVM이다.) 반면에 대몬 쓰레드는 메인 쓰레드 또는 남겨진 사용자 쓰레드가 종료되면 강제로 프로세스가 종료된다. 아래 예제 소스코드에서 Reactor라이브러리에서 제공하는 Flux 클래스의 Flux.interval() 함수와 단일 쓰레드를 생성하는 Executors.newSingleThreadExecutor() 함수가 정의되어 있다. Flux.interval() 함수는 내부적으로 대몬 쓰레드를 생성하여 로직을 실행..

[리액티브 프로그래밍] 리액티브 프로그래밍이란

핵심 용어 Observer (+ Obeservable) Subscriber Scheduler (+ Schedule) Functional Programming Reactive Operators (=> Pre defined function / map, flatMap, forEach 등) ※ Declarative Programming = Functional Programming + Reactive Operators 핵심 Flow 데이터의 발행 -> 데이터의 처리, 가공 -> 데이터를 구독 비동기 작업의 차이 이해 작업 A와 B를 비동기 방식으로 순차적으로 처리할 때, 흔히 알고있는 비동기 방식은 작업 A가 완료되면 작업 B를 호출 즉, 콜백하는 것이다. 이 때, 작업 A는 메인 함수, 작업 B는 콜백 함수라고..