💡 Reactive System & Reactive Programming
선언형 프로그래밍(Lambda 표현식, Stream API), 순차 실행 X
Reactive System은 Requst Thread의 응답 대기시간을 최소화 할 수 있게 Non-Bloking 통신 지원함
Reactive Programming 에서의 반응은 Thread의 Non-Blocking과 관련이 있다
Reactive System 설계 원칙
- Means - 리액티브 시스템의 커뮤니케이션을 담당
- Message Driven
- 리액티브 시스템은 메세지 기반 통신을 통한 시스템 간 느슨한 결합 유지
- Message Driven
- Form - 메세지 기반 통신을 통한 구조 형성
- Elastic
- 트래픽량에 관계없이 일정한 응답성 유지
- Resiilient
- 시스템 장애 발생 시, 응답성 유지
- Elastic
- Value - 리액티브 시스템의 핵심 가치 표현
- Responsive
- 즉각 응답
- Maintainable
- 즉각 응답의 지속
- Extensible
- 요청 처리의 오토스케일링
- Responsive
Reactive Programing 특징
- Declarative Programming Paradigm
- 선언형 프로그래밍 방식 사용
- Data Streams and The Propagation of Change
- 지속적인 데이터의 요청이 있음을 의미하며, 요청 = 변경이벤트로 간주해 이벤트 발생시 마다 데이터 전달
- Automatic Propagation of the Changed Data Flow
- 위와 동일
- Reactive Streams
- Reactive Programming을 사용하기 위한 Specification
Components of Reactive Streams
(Interface)
- Publisher<T> - 소스로부터 데이터 emit
- subscribe(Subscriber<? super T>)
- Subscriber가 Publisher가 내보낸 데이터 소비
- Subscriber<T> - Publisher가 내보낸 데이터 소비
- onSubscribe(Subscription)
- 구독 시작 시 호출, Publisher에게 요청할 데이터의 개수 지정 & 구독 해지 처리
- onNext(T)
- 데이터 emit 시 호출, emit된 데이터 소비
- onError(Throwable)
- emit 데이터 -> Subscriber 전달 시 오류 발생되면 호출
- onComplete()
- 데이터 emit 종료 시 호출, emit후 처리할 작업이 있으면 여기서 수행
- onSubscribe(Subscription)
- Subscription - 구독상태를 표현한 인터페이스
- request(long)
- emit 개수 요청
- cancle()
- 구독 해지, 해지시 더 이상 데이터 emit X
- request(long)
- Processor<T, R> extends Subscriber<T>, Publisher<R>
- Publisher, Subscriber 의 역할을 동시에 처리
💡 Implementation Reactive Streams
- Project Reactor
- Spring Reactive Application 구현의 대표적인 구현체, Spring 5의 Reactive Stack에 포함
- RxJava
- .NET 기반 Reactive Library를 Netflex에서 Java 언어로 포팅한 JVM 기반 Reactive 확장 라이브러리
- Java Flow API
- Java9 부터 지원
- Reactive Streams의 구현체들의 SPI역할
- Reactive Streams의 Specification을 Java안에 포함 시킨 구조
- Signal
- Publisher가 발생시키는 이벤트
- Operator
- 동작 수행 메소드
- Sequence
- 메소드 체인을 하나의 시퀀스로 간주
- UpStream & DownStream
- Sequence 기준 위 아래를 의미 (ex. filter() 기준)
- Reactive Extension
- RxJS, RxAndroid, RxKotlin, RxPython, RxScala
'Framework > Spring' 카테고리의 다른 글
API Gateway 개념 & 구축 (0) | 2023.02.11 |
---|---|
Project Reactor (0) | 2022.11.29 |
OAuth2 Authentication (0) | 2022.11.25 |
Implement JWT Login Authentication (0) | 2022.11.25 |
JWT (Json Web Token) & Sticky Session (0) | 2022.11.22 |