안녕하세요. 메로나입니다.
오늘은 Flowable과 Observable의 차이점을 공부하겠습니다.
Flowable과 Observable 차이점
| Flowable | Observable |
| Reactive Streams 인터페이스를 구현함 | Reactive Streams 인터페이스를 구현 하지 않음 |
| Subscriber에서 데이터를 처리 | Observer에서 데이터를 처리 |
| 데이터 개수를 제어하는 배압 기능이 있음 | 데이터 개수를 제어하는 배압 기능이 없음 |
| Subscription으로 전달 받는 데이터 개수를 제어할 수 있음 | 배압 기능이 없기 때문에 데이터 개수를 제어할 수 없음 |
| Subscription으로 구독을 해지함 | Disposable로 구독을 해지함 |
배압 기능이란?
Flowable에서 데이터를 통지하는 속도가 subscriber에서 통지된 데이터를 전달받아 처리하는 속도보다 빠를 때 밸런스를 맞추기 위해 데이터 통지량을 제어하는 기능을 말합니다.
즉. 한 생산과 소비의 속도를 맞추기 위함입니다. 속도가 차이 나면 에러가 납니다.
배압 전략법
1. missing 전략
- 배압을 적용하지 않는다.
- 나중에 onBackpressureXXX() 연산자를 사용하여 배압을 처리해야 합니다.
- onBackpressureBuffer(): 생산된 데이터를 버퍼에 저장하여 소비자가 처리할 수 있게 대기합니다.
- onBackpressureDrop(): 소비자가 데이터를 처리하는 속도가 느릴 경우, 새로운 데이터를 버립니다.
- onBackpressureLatest(): 소비자가 데이터를 받을 준비가 될 때까지 가장 최근에 발행된 데이터만 유지하고 이전의 데이터는 버립니다.
2. Error 전략
- 통지된 데이터가 버퍼의 크기를 초과하면 MissingBackpressureException() 에러를 통지합니다.
- 소비자가 생산자의 통지 속도를 따라잡지 못할 때 발생합니다.
3. Buffer 전략
3-1. DROP_LATEST
- 버퍼가 가득 찬 시점에 버퍼 내에서 가장 최근에 버퍼로 들어온 데이터를 drop 합니다.
- drop 된 빈 자리에 버퍼 밖에서 대기하던 데이터를 채웁니다.
3-2. DROP_OLDEST
- 버퍼가 가득 찬 시점에 버퍼 내에서 가장 먼저 들어온 데이터를 drop 합니다.
- drop 된 빈자리에서 버퍼 밖에서 대기하던 데이터를 채웁니다.

4. Drop 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 이후에 생성되는 데이터를 DROP하고, 버퍼가 비워지는 시점에 DROP되지 않은 데이터부터 다시 버퍼에 채우는 전략입니다.


5. Latest 전략
- 버퍼에 데이터가 모두 채워진 상태가 되면 버퍼가 비어질 때까지 통지된 데이터는 버퍼 밖에서 대기하며 버퍼가 비워지는 시점에 가장 최근에 통지된 데이터부터 버퍼를 담는다.


공부를 하면서 배압을 잘 사용해야 데이터 관리를 잘할 수 있겠다는 생각이 들었습니다. 헷갈리는 내용이 많지만, 정리를 잘해서 협업에서도 자유롭게 사용할 수 있도록 하겠습니다!!!
참고 문헌
https://irontech.tistory.com/20
RxJava - 배압 전략(BackpressureStrategy)의 종류
목표 이전 포스팅에서 Flowable과 Observable의 차이를 알아보면서 배압이 무엇인지 알아보았습니다. 이번 포스팅에선 배압 전략에는 어떤 것들이 있는지 알아보고 간단한 소스 코드로 적용해봅니다
irontech.tistory.com
'RxJava' 카테고리의 다른 글
| [RxJava] 생성 연산자 (0) | 2025.01.30 |
|---|---|
| [RxJava] Single vs Maybe vs Completable (0) | 2025.01.27 |
| [RxJava] Reative Streams (0) | 2025.01.22 |
| [RxJava] 마블 다이어그램 (0) | 2025.01.19 |
| [RxJava] 리액티브 프로그래밍 (0) | 2025.01.19 |
