리액티브 프로그래밍
Reactive 흔히 Rx 프로그래밍이라고 합니다.
Reactive Programming이라고 하면 “반응형 프로그래밍”이라고 해석할 수 있을 것입니다. Event Driven 방식으로 프로그래밍을 가능하게 해주는 프레임워크입니다.
Why?
-
Blocking is evil. Thread의 경우 CPU를 효육적으로 사용하기 위해서 Multi-thread이 가능합니다. 즉 여러 Thread를 생성하여 Thread마다 Task를 부여하여 동시에 작업을 진행하는 것입니다. Thread를 사용할 경우 성능에 영향을 미칠 수 있는 요인은 바로 Blocking 작업입니다. CPU의 경우 충분히 연산을 수행할 수 있음에도 CPU외의 DISK IO 등의 결과를 기다리기 위해서 Thread를 멈추는 것을 말합니다. 이러한 Blocking이 많으면 많을 수록 CPU 사용률이 떨어지고 전체적인 시스템 성능이 가장 느린 Operation에 따라 가게 됩니다.
-
Out of Callback hell. [/images/reactive_callback_hell.jpg] How?
- Java Callbacks? ○ no Composition at all
- Java Futures
?
From - Netflix Opensource - .Net
Duality - [Java] Iterable - Iterator (pull) - [RxJava] Observable - Observer (push)
The Reacti - www.reactivemanifesto.org - www.reactive-streame.org
Show me!
- Interface Observer
From Legacy code to reactiveX - Rest Controller(Observer) –> Observable
Observable Factories - just - from : using a collection - create
Functional Programming
- Map
○ Input –(transform)–> Output
- Revert back to Blocking
○ toBlocking
○ Choose what item to return
• Transforming
- flatMap
○ Make the data flat
- Reduce
○ Running computation
○ Previous result come to next input
- Filter
○ Filtering the input stream into output stream
- Take
○ Subscribe the number of iterest
- Take unitl
○ Subscribe the stream until condition
- Count
○ Calculate the total number of stream
•
• Side Effect
- doOnXXX (Logging 등…)
○ doOnNext
○ doOnError
○ doOnCompoleted
○ doOnEach
- Combine
○ Concat : 2개의 Observable을 하나의 Stream으로 앞 뒤로 합침
○ Merge : 실시간으로 합친다.(ex: flatMap)
○ Zip : 2개의 Observable과 Tramsformation Function을 이용하여 변경
• Recovering
- Retry : 에러 발생시 다시 처음부터 읽어들임.
• Obverable
- Hot observable
○ 같은 데이터를 emit
○ Retry할 수 없음(같은 에러 발생)
- Cold observable
○ Retry할 수 있음
• OnErrorReturn
- 에러 발생시 대처
• Chaining
- ZipWith
○ Called from stream a instead of statically
○ Combine both rates to get the final one
- OnErrorResumeNext
• Clean up controllers
- Prepare a DefferedResult