전통적인 웹 방식 (스프링 MVC)
비동기-논블로킹 방식
C10K 문제
JVM 환경에서 리액티브 프로그래밍의 표준 API 사양으로비동기 데이터 스트림과논블로킹-백프레셔(Back-Pressure)에 대한 사양을 제공
리액티브 스트림 이전의 비동기식 애플리케이션에서는 멀티 코어를 제대로 활용하기 위해 복잡한 병렬 처리 코드가 필요
처리할 데이터가 무한정 많아져서 시스템의 한계를 넘어서는 경우 애플리케이션은병목 현상(bottleneck)이 발생하거나 심각한 경우 애플리케이션이 정지되는 경우도 발생할 수 있음(논블로킹-백프레셔로 해결)
Netflix, Vmware(Pivotal), Lightbend, Red Hat과 같은 유명 회사들이 표준화에 참여 중
리액티브 스트림 인터페이스
Publisher : 데이터를 생성하고 구독자에게 통지
Subscriber : 데이터를 구독하고 통지 받은 데이터를 처리
Subscription : Publisher, Subscriber간의 데이터를 교환하도록 연결하는 역할을 하며 전달받을 데이터의 개수와 구독을 해지할 수 있다
Processor : Publisher, Subscriber을 모두 상속받은 인터페이스
리액티브 스트림에서 Publisher와 Subscriber 간의 데이터 처리 흐름
비동기 스트림 처리를 위한 표준으로써 next는 다음신호를 담고 complete는 신호가 끝난것 그리고 error은 신호보내는 도중 에러가 발생한 것을 의미한다.Publisher가 전송하면 데이터는 sequence 대로 전송한다. 그러면 Subscriber가 데이터를 수신한다.next, complete, error 신호를 발생시킨다.