Learn & Run

RxJava - 배압 전략(BackpressureStrategy)의 종류 본문

Java

RxJava - 배압 전략(BackpressureStrategy)의 종류

iron9462 2021. 1. 8. 00:50

목표

 

이전 포스팅에서 Flowable과 Observable의 차이를 알아보면서 배압이 무엇인지 알아보았습니다. 이번 포스팅에선 배압 전략에는 어떤 것들이 있는지 알아보고 간단한 소스  코드로 적용해봅니다.

 

 

 

배압 전략

 

  •  RxJava는 BackpressureStrategy를 통해 Flowable이 통지 대기 중인 데이터를 어떻게 다뤄야하는지에 대한 전략을 제공합니다.

1) MISSING : 처음엔 배압을 적용하지 않다가, 나중에 onBackpressureXXX()로 배압을 적용할 수 있습니다.

     

2) ERROR : 통지된 데이터가 버퍼의 크기를 초과하면 Exception을 통지하는 전략입니다. 이전 포스팅에서 배압 기능을 설명할 때 소스코드로 작성한 부분에서 ERROR전략을 확인해 볼 수 있었습니다.

 

3) BUFFER - DROP_LATEST : 버퍼가 가득 찬 시점에 버퍼내에서 가장 최근에 들어온 데이터를 DROP하고 DROP된 빈 자리에 대기하던 데이터로 채우는 전략입니다.

 

버퍼 크기를 2로 설정했기 때문에 오버플로우가 발생하면 DROP_LATEST전략에서는 가장 최근에 들어온 데이터를 DROP하는 것을 확인할 수 있습니다.

 

 

   

4) BUFFER - DROP_OLDEST : 버퍼가 가득 찬 시점에 버퍼내에서 가장 오래전에 버퍼로 들어온 데이터를 DROP하고 DROP된 빈 자리에 대기하던 데이터를 채우는 전략입니다.

 

버퍼 크기를 2로 설정했기 때문에 오버플로우가 발생하면 DROP_OLDEST전략에서는 버퍼에 들어온지 가장 오래된 데이터를 DROP하는 것을 확인할 수 있습니다.

 

 

 

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

   

버퍼가 가득 찬 상태에서 데이터가 통지되면 통지되는 데이터를 모두 DROP시키는 걸 확인할 수 있습니다.

 

 

 

6) LATEST : 버퍼에 데이터가 모두 채워진 상태가 되면 버퍼가 비워질 때까지 통지된 데이터는 버퍼 밖에서 대기하며 버퍼가 비워지는 시점에 가장 나중에 통지된 데이터부터 버퍼에 채우는 전략입니다.

 

버퍼가 가득 찬 상태에서 들어오는 데이터들이 대기하고 있다가 버퍼가 비워지는 시점에 가장 나중에 통지된 데이터를 버퍼에 담는 것을 확인할 수 있습니다.