📗 BOOK/스프링으로 시작하는 리액티브 프로그래밍 4

4장 함수형 인터페이스

함수형 인터페이스(Functional Interface)단 하나의 추상 메서드만을 가진다.함수를 값으로 취급하기 때문에 어떤 함수를 호출할 때, 함수 자체를 파라미터로 전달가능하다.단 하나의 추상 메서드를 가지는 인터페이스 예제public class Example { public static void main(String[] args) { List cryptoCurrencies = SampleData.cryptoCurrencies; Collections.sort(cryptoCurrencies, new Comparator () { @Override public int compare(CryptoCurency c1, CryptoCurrency cc2) { return cc1.getUnit(..

3장 Blocking I/O vs Non-Blocking I/O

Blocking I/O하나의 스레드가 I/O에 의해서 차단되어 대기하는 것CPU 대비 많은 수의 스레드를 할당하는 멀티스레드는 문제점 발생컨텍스트 스위칭으로 인한 스레드 전환 비용 발생컨텍스트 스위칭기존에 실행되고 있는 프로세스의 정보를 PCB라는 공간에 저장되고, 다시 실행해야 할 프로세스 정보를 PCB로부터 불러오는 과정을 컨텍스트 스위칭이라고 한다.컨텍스트 스위칭이 많으면 많을수록 CPU 전체 대기 시간은 길어지기 때문에 성능은 저하된다.과도한 메모리 사용으로 오베헤드 발생 가능성새로운 스레드가 생성되면 JVM에서는 해당 스레드를 위한 스택 영역의 일부를 할당하며, 스래드 정보는 개별 프레임에 저장서블릿 컨테이너 기반의 Java 웹 애플리케이션은 요청당 하나의 스레드를 할당한다. 각각 하나의 스레드..

2장 리액티브 스트림즈

2.1 리액티브 스트림즈(Reactive Streams)개발자가 리액티브한 코드를 작성하기 위해서는 코드 구성을 용이하게 해주는 리액티브 라이브러리가 필요하다.리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 별도의 표준 사양이 리액티브 스트림즈이다.데이터 스트림을 Non- Blocking이면서 비동기적인 방식으로 처리하기위한 리액티브 라이브러리의 표준사양리액티브 스트림즈를 구현한 구현체로 RxJava, Reactor, Akka Streams, Java9 Flow APi 등이 있다.2.2 리액티브 스트림즈의 구성 요소리액티브 스트림즈를 통해 구현해야 하는 API 컴포넌트에는 Publisher, Subscriber, Subscription, Processor가 있다.Publisher: 데이터를 생성하고, ..

1장 리액티브 시스템과 리액티브 프로그래밍

리액티브 시스템(Reactive System)이란?어떤 이벤트나 상황이 발생했을 때, 반응을 해서 그에 따라 적절하게 행동하는 것을 의미한다.클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화한다.리액티브 선언문MEANS: 리액티브 시스템에서 주요 통신 수단으로 무엇을 사용할 것인지 표현한 것입니다.비동기 메시지 기반의 통신을 통해서 구성요소들 간의 느슨한 결합, 격리성, 위치 투명성 보장위치 투명성: 사용자 및 응용 프로그램이 데이터가 어디에 저장되어 있는지에 대한 세부 정보를 숨긴다.FORM: 메시지 기반 통신을 통해서 어떠한 형태를 지니는 시스템으로 형성되는지를 나타낸다. (탄력성, 회복성)탄력성(Elastic): 시스템의 작업량이 변화하더라도 일정한 응답을 유지하는 것을 의미한다.응답성..