[RX Java 2.x] Flowable vs Observable
* Flowable
- 대량의 데이터를 처리할 때(10,000건 이상의 데이터)
- 네트워크 통신이나 데이터베이스 등의 I/O를 처리할 때
* Observable
- GUI 이벤트
- 소량의 데이터를 처리할 때(1,000건 이하의 데이터)
- 데이터 처리가 기본적으로 동기방식이며, 자바 표준의 Stream 대신 사용할때
일반적으로 Observable 이 Flowable 보다 오버헤드가 적다고 알려져있다.
따라서 성능이 중요하다면 Observable 을 사용하는걸 권장
이 외에도 RxJava 를 서버측에서 사용하는지,
모바일 등의 클라이언트 측에서 사용하는지도 고려해야함.
기본적으로 서버 측에서는 메모리가 부족하거나 처리 대기 중인 데이터가 쌓이게 되면 해당 처리뿐만 아니라 서버 전체에 영향을 줄 수 있다. 게다가 서버 측에서 문제가 발생하게되면 이 문제의 영향을 받는 사용자와 서비스의 수가 증가됨
따라서 클라이언트 측에서는 기본적으로 "MissingBackPressureException" 이 발생하지 않는 것이 좋지만,
서버 측에서는 "Flowable로 버퍼링 하는 데이터의 상한을 설정"해 문제가 발생하기 전에 "MissingBackPressureException"이 발생하게 해 서버에 영향을 주지 않도록 대응 하는 방법도 있긴함.
그리고 통지되는 데이터 중 일부만 필요하다면 어떤 데이터를 어떻게 선택할지에 따라 Flowable과 Observable 중 어느 것을 사용해야 하는지가 달라짐.
예를 들면 "Flowable 의 BackpressureStrategy.DROP을 설정하면 처리할 수 없는 데이터를 삭제"하는 것도 가능하고, "Observable의 throttle 계열의 메서드로 특정 시점의 데이터만 검색"하는 것도 가능함
RxJava를 사용하는 위치나 환경에 따라 Flowable, Observable 둘중 어느것을 사용하든 처리 자체만 생각 할 것이 아니라
전반적인 영향을 생각하고 판단하는 것이 좋다.