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개의..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/6kWVE/btsoxGiTCU8/SFkldSfrxwVZ68cIzAOoa0/img.png)
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
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/8dLNp/btsow96PgnX/kSuZW14xVdNjJY8PEKmeeK/img.png)
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의 이점을 ..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/bu9riM/btsovaM3BAD/iSnZhXJJYGALuWp9pwr9f0/img.png)
2.1 리액티브 스트림즈(Reactive Streams)란? 데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리 표준 사양 구현체 예시 : Reactor, RxJava, Akka Streams, Java 9 Flow API 등 2.2 리액티브 스트림즈 구성요소 Publisher : 데이터 생성 및 통지 Subscriber : 구독한 Publisher로부터 통지된 데이터를 전달 받아 처리 Subscription : Publisher 구독, 요청할 데이터의 개수 지정, 구독 취소 Processor : Publisher와 Subscriber 기능 모두 2.3 코드로 보는 리액티브 스트림즈 컴포넌트 Publisher package org.reactivestreams..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/b45oSc/btsou9AyFIU/CduDHJgkVilUsL5WreMCc0/img.png)
1.1 리액티브 시스템(Reactive System)이란? Reactive : 반응을 하는 Reactive System : (어떤 이벤트나 상황에) 반응을 잘하는 시스템 클라이언트의 요청에 즉각 응답함으로써 지연 시간을 최소화 1.2 리액티브 선언문으로 리액티브 시스템 이해하기 MEANS (수단) : 메시지 기반 통신 FORM (형태) : 탄력성과 회복성 탄력성 : 시스템의 작업량이 변화하더라도 일정한 응답 유지 회복성 : 시스템에 장애가 발생하더라도 응답성 유지 VALUE (가치) : 빠른 응답성을 바탕으로 유지보수와 확장이 용이한 시스템 구축 1.3 리액티브 프로그래밍(Reactive Programming)이란? 리액티브 시스템을 구축하는 데 필요한 프로그래밍 모델 리액티브 시스템의 설계 원칙에 부합..
- Total
- Today
- Yesterday