RxJava 배압(Backpressure) 이슈와 Flowable
2025. 1. 13. 16:24ㆍAndroid/도구 및 라이브러리
728x90
반응형
🌟 들어가기 전
안드로이드 개발자라면 누구나 익숙한 라이브러리인 RxJava.
RxJava는 비동기 데이터 처리와 반응형 프로그래밍을 위한 Java 라이브러리다.
(참고 링크 👉 https://anovice-dp.tistory.com/179)
데이터를 통신하는 과정에서 앱이 멈추지 않고 자연스럽게 흘러가며, UI가 변경되도록 도와준다.
이렇게 유용한 RxJava를 사용할 때 주의할 점 있다.
바로 배압 이슈.
Backpressure라고도 한다.
🔍 세부 내용
1. 배압이란?
데이터를 생산하는 속도와 데이터를 소비하는 속도가 불균형할 때 발생하는 문제이다.
생산자가 데이터를 너무 빨리 발행하고, 구독자가 이를 처리하지 못하면 데이터가 계속 누적되어 OOM 이슈가 발생한다.
2. Flowable로 관리하기
Flowable이란, RxJava에서 배압을 지원하는 데이터 스트림 타입이다.
(* 데이터스트림이란, 연속적으로 발생하는 데이터를 순차적으로 처리하는 방식)
RxJava에서 Observable은 배압을 지원하지 않아 적은 양의 데이터 처리에 적합하다.
반면 Flowable은 배압을 지원하여 대량의 데이터 스트림에 적합하다.
/* 배압을 지원하지 않는 Observable 소스코드 */
Observable.fromIterable(it.getData())
.subscribeOn(Schedulers.computation()) // 데이터 발행은 computation 스레드에서
.observeOn(AndroidSchedulers.mainThread()) // UI 업데이트는 메인 스레드에서
.subscribe { info ->
// 데이터 처리
}
/* 배압을 지원하지 않는 Flowable 소스코드 */
Flowable.fromIterable(it.getData())
.subscribeOn(Schedulers.computation()) // 데이터 발행은 computation 스레드에서
.observeOn(AndroidSchedulers.mainThread()) // UI 업데이트는 메인 스레드에서
.onBackpressureBuffer() // 배압 전략: 데이터를 버퍼에 저장
.subscribe { info ->
// 데이터 처리
}
- onBackpressureBuffer()는 배압 상황에서 데이터를 버퍼에 저장해 두는 방식. 소비자는 버퍼에서 데이터를 차례로 처리할 수 있다.
🤔 배운 점 & 느낀 점
나는 늘 Observable만 사용해와서 Flowable의 방법이 있는지조차 몰랐다.
비동기 식으로 데이터를 처리할 때는 메모리 초과 이슈에 가장 주목해야 할 것 같다.
현재 내가 관리하는 앱에도 OOM 이슈가 발생하였는데 한 번 체크해볼 것 ✔
728x90
반응형
'Android > 도구 및 라이브러리' 카테고리의 다른 글
안드로이드 성능 최적화, 왜 경량 스레드(코루틴)를 써야 할까? (0) | 2025.02.08 |
---|---|
Android Studio Compose에서 Color 미리보기 (게터 아이콘) (0) | 2025.01.17 |
[Android]DeepLink와 Scheme (0) | 2023.05.29 |
[Android/Async]RxJava에서 Throttle과 Debounce (0) | 2023.05.10 |
[Android]Deeplink (0) | 2023.02.25 |