9.1 Sinks란? Publisher와 Subscriber의 기능을 모두 지닌 Processor의 향상된 기능 제공 Sinks는 Reactor 3.4.0부터 지원 Processor API는 Reactor 3.5.0부터 제거 예정 Signal을 프로그래밍 방식으로 푸시할 수 있는 구조 멀티스레드 방식으로 Signal을 전송해도 스레드 안전성을 보장함 (Example9_2) 9.2 Sinks 종류 및 특징 Sinks.One : 한 건의 데이터를 프로그래밍 방식으로 emit (Example9_4) Mono 방식으로 Subscriber가 데이터를 소비할 수 있도록 함 asMono() 메서드를 사용하여 Mono 객체로 변환 Sinks.Many : 여러 건의 데이터를 프로그래밍 방식으로 emit Flux 방식으로..
8.1 Backpressure란? Publisher가 끊임없이 emit하는 무수히 많은 데이터를 제어하여 데이터 처리에 과부하가 걸리지 않도록 하는 것 8.2 Reactor에서의 Backpressure 처리 방식 데이터 개수 제어 Subscriber가 request() 메서드를 통해 데이터 개수 제어 Backpressure 전략 사용 (Downstream으로 전달할 데이터가 버퍼에 가득 찰 경우) IGNORE 전략 : Backpressure 적용하지 않음 ERROR 전략 : Exception 발생 (Example8_2) DROP 전략 : 버퍼 밖에서 대기하는 먼저 emit된 데이터부터 Drop (Example8_3) LATEST 전략 : 새로운 데이터가 들어오는 시점에 가장 최근의 데이터만 남겨 두고 나..
7.1 Cold와 Hot의 의미 Cold Booting, Hot Deploy, ... Cold : 새로 시작 Hot : 새로 시작하지 않음 7.2 Cold Sequence Subscriber가 구독할 때마다 데이터 흐름이 처음부터 다시 시작되는 Sequence public static void main(String[] args) throws InterruptedException { Flux coldFlux = Flux .fromIterable(Arrays.asList("KOREA", "JAPAN", "CHINESE")) .map(String::toLowerCase); coldFlux.subscribe(country -> log.info("# Subscriber1: {}", country)); System..
6.1 마블 다이어그램(Marble Diagram)이란? 마블 : 구슬 IJ에서 확인 가능 6.2 마블 다이어그램으로 Reactor의 Publisher 이해하기 Mono Mono[1] : 데이터 한 건을 emit하는 경우 public static void main(String[] args) { Mono.just("Hello Reactor") .subscribe(System.out::println); } > Hello Reactor Mono[0] : 데이터를 전달받을 필요는 없지만 작업이 끝났음을 알리고 이에 따른 후처리를 하고 싶을 때 public static void main(String[] args) { Mono .empty() .subscribe( none -> System.out.println("..
5.1 Reactor란? Spring Framework 팀의 주도하에 개발된 리액티브 스트림즈 구현체 Spring Framework 5 버전부터 리액티브 스택에 포함 Spring WebFlux 기반의 리액티브 애플리케이션을 제작하기 위한 핵심 역할 리액티브 프로그래밍을 위한 라이브러리로 Spring WebFlux 프레임워크에 포함된다고 보면 됨 Reactor 공식 사이트 : https://projectreactor.io Reactive Streams Non-Blocking Java's functional API Flux[N] : Refactor의 Publisher 타입 0개부터 N개, 즉 무한대의 데이터를 emit할 수 있음 Mono[0|1] : Refactor의 Publisher 타입 0개 또는 1개의..
4.1 함수형 인터페이스(Functional Interface) 단 하나의 추상 메서드만 정의된 인터페이스 함수를 일급시민(값)으로 취급 함수 자체를 파라미터로 전달 가능 @FunctionalInterface public interface Comparator { int compare(T o1, T o2); // 단 하나의 추상 메서드 ... default Comparator reversed() { return Collections.reverseOrder(this); } default Comparator thenComparing(Comparator
I/O : 컴퓨터 시스템이 외부의 입출력 장치들과 데이터를 주고 받는 것 파일 I/O, DB I/O, 네트워크 I/O 등 3.1 Blocking I/O 하나의 스레드가 I/O에 의해서 차단되어 대기하는 것 멀티스레딩 기법으로 보완 가능하나 아래와 같은 문제점 존재 컨텍스트 스위칭으로 인한 스레드 전환 비용 과다한 메모리 사용으로 오버헤드 발생할 수 있음 스레드 풀에서 응답 지연 발생할 수 있음 3.2 Non-Blocking I/O 작업 스레드의 종료 여부와 관계없이 요청한 스레드는 차단되지 않음 스레드 내부에 CPU를 많이 사용하는 작업이 포함된 경우에는 성능에 악영향을 줄 수 있음 사용자의 요청에서 응답까지의 전체 과정에서 Blocking I/O 요소가 포함된 경우에는 Non-Blocking의 이점을 ..
- Total
- Today
- Yesterday