21.09.08 13:20 작성
·
168
0
아직 강의 초기라 잘 이해되지 않는 부분이 있습니다.
drop 된다는 의미
버려진다는 것이 데이터를 subsciber에서 모두 처리 못한다는 의미인가요? 그렇다면 유실된 데이터 처리는 어떻게 되는건가요?
drop된 데이터를 다시 소비하는 걸로 생각했는데 아닌가요?
감사합니다.
답변 1
0
2021. 09. 08. 22:24
안녕하세요. 아기 재우느라 답변이 좀 늦었습니다.
질문에 답을 우선 해드리자면,
"버려진다는 것이 데이터를 subsciber에서 모두 처리 못한다는 의미인가요?"
--> 네, 맞습니다. subscriber에게 전달은 되지 않습니다. 아래는 Flowable의 onBackPressure( )에 대한 API 설명인데요.
: 마블 다이어그램을 보시면 Upstream 쪽으로 request를 보낼때마다 Subscriber쪽으로 전달되는 데이터는 1개만 전달 되고 나머지는 전달이 되지 않는것을 볼 수 있습니다.
"그렇다면 유실된 데이터 처리는 어떻게 되는건가요?"
--> 위 그림을 보시면 onBackpressureDrop(Consumer<? super T> onDrop) 이라는 메서드 시그니처를 볼 수 있는데요. onDrop이라는 Consumer에서 버려지는 데이터들을 전달 받을 수가 있습니다. 버려지는 데이터를 별도로 처리하고 싶으시다면 이곳에서 하시면 될 것 같습니다.
"drop된 데이터를 다시 소비하는 걸로 생각했는데 아닌가요?"
--> 위에서 답변 드렸지만 drop된 데이터를 별도로 처리하고 싶으시다면 onDrop이라는 Consumer로 하시면 될것 같습니다. 배압 전략이라는게 시스템이 중단되지 않도록 끊임없이 들어오는 데이터를 적절하게 Control 하는 것이 주목적이기 때문에 Subscriber 쪽에 전달되지 못하는 데이터가 있다는 것을 전제로 만들어진 것인데요. 만약에 데이터의 유실없이 모든 데이터를 전달을 받고 싶다면 request의 개수를 적절하게 조절하시면 될 것 같다는 생각이 듭니다. request의 개수를 조절하는것도 배압 전략의 한가지라고 볼 수 있겠습니다.
답변이 어느 정도 되셨는지 모르겠네요. 강의 들으시다가 궁금하신게 있으시면 언제든지 질문 남겨주시면 감사 드릴게요.
2021. 09. 11. 11:37
상세한 답변 감사합니다. 강의를 이해하는 데 많은 도움이 되었습니다.