목록책 정리/실전! 스프링 5를 활용한 리액티브 프로그래밍 (4)
초보개발자 긍.응.성
리액터 프로젝트 필수 요소 목적 - 콜백 지옥, 깊게 중첩된 코드를 생략 가독성을 높이고 리액터 라이브러리에 의해 정의된 워크플로에 조합성(composability)를 추가 리액트 API 연산자로 실행 그래프를 제작 실제 구독을 만들기 전까지 아무 일도 발생하지 않으며 구독을 했을 때만 데이터 플로가 기동 비동기 요청의 결과를 효율적으로 처리가능 오류 처리 간단, 복원력 있는 코드 작성 가능 배압 제공 푸시 전용 : subscription.request(Long.MAX_VALUE) 풀 전용 : subscription.request(1) 풀-푸시 혼합 풀-푸시 모델 미 지원하는 이전 API 사용 시 예전 스타일의 배압 메커니즘 제공 리액터 추가 io.projectreactor reactor-core 3.2..
CompletionStage를 이용하는 자바 코어 라이브러리 RxJava와 같은 다양한 라이브러리 존재 코드 작성시 다양한 선택 가능 풀 방식과 푸시 방식 리액티브 초기 단계에서 모든 라이브러리의 데이터 흐름은 소스에서 구독자에서 푸시되는 방식이었다. 푸시 모델을 채택하는 가장 큰 이유는 요청하는 횟수를 최소화 하기 위해서이다. 반면 푸시 모델만 사용하는것은 기술적 한계가 있다. 메시지 기반 통신의 본질은 요청에 응답하는 것 프로듀서가 컨슈머의 처리 능력을 무시하면 전반적인 시스템 안정성에 영향을 미칠 수 있다 프로듀서 컨슈머 동작 케이스 1. 느린 프로듀서 빠른 컨슈머 동적으로 시스템의 처리량을 증가시키는 것은 불가능 (프로듀서가 따라와줘야함) 2. 빠른 프로듀서와 느린 컨슈머 프로듀서가 컨슈머가 처리..
관찰자(Observer) 패턴 Subject와 Observer 두 개의 인터페이스로 구성된다 Observer는 관찰자 이며, Subject는 주체이다. Observer는 Subject에 등록되며 Subject로 부터 알림을 수신한다. java.util 패키지에서 Observer, Observable 제공 JDK 1.0에 릴리즈, 제네릭이 없어 type safety 하지 못함 옵저버 패턴은 멀티스레드 환경에서 효율적이지 않다private final ExecutorService executorService = Executors.newCacheThreadPool(); public void notifyObservers(String event) { observers.forEach(observer -> { exec..
🎯 목적 리액티브와 매우 잘 어울리는 비즈니스 사례를 통해 리액티브 솔루션이 사전 대응형(proactive) 솔루션보다 우수한 이유를 이해한다 서버간 통신 방법을 보여주는 예시를 통해 현재의 비즈니스 요구사항을 이해한다 현대 스프링 프레임워크의 요구 사항에 대해 이해한다 리액티브 선언문 탄력성(Resilient): 시스템이 장애 에 직면하더라도 응답성을 유지 하는 것을 탄력성이 있다고 합니다. 탄력성은 고가용성 시스템, 미션 크리티컬 시스템에만 적용되지 않습니다. 탄력성이 없는 시 www.reactivemanifesto.org 왜 리액티브인가? 증가하는 부하에 대해 응답 능력을 유지할 수 있다. 탄력성(elasticty) 다양한 작업 부하에서 응답성을 유지하는 능력 수요에 따라 처리량이 자동으로 증가 또..