인프런 커뮤니티 질문&답변

김보수님의 프로필 이미지

작성한 질문수

Kevin의 알기 쉬운 Spring Reactive Web Applications: Reactor 1부

Sinks Example 코드 설명

기본적인게 이해가 안되서 진행이 어렵네요..

작성

·

435

0

doOnNext에서 로직을 실행하는것이랑 subscribe안에서 로직을 실행하는것이랑 어떤 차이가 있는건가요?
순서는 doOnNext가 먼저 실행되는것으로 보이는데
재구독이 일어났을때 핫 퍼블리셔랑, 콜드 퍼블리셔의 차이로 데이터 소비 패턴이 달라진다 정도로 이해하면 되는걸까요?
실무에서 사용되는 코드가 subscribe();로 별도에 람다식이 없고 전부 doOnNext안에서 처리하는 로직으로 이루어져 있어서 문의 드립니다.

답변 2

0

김보수님의 프로필 이미지
김보수
질문자

늦은시간인데 답변해 주셔서 감사합니다. 이해가 되었습니다~

0

Kevin님의 프로필 이미지
Kevin
지식공유자

안녕하세요?

doOnNext 내에서 실행되는 로직과 subscribe안에서 실행되는 로직이 어떤 차이점이 있는지 질문 주셨는데요.

doOnNext()는 Upstream 쪽에서 emit 되는 데이터가 정상적으로 잘 emit 되고 있는지 어떤 데이터가 emit 되고 있는지를 확인하기 위한 용도로 주로 사용되는데 doOnNext 바로 위에 있는 Operator에서 emit 되는 데이터를 전달 받아서 로그로 출력한다든지 하는 부가적인 작업에 사용할 수 있습니다.

공식 문서에서 확인을 해 보시면 아시겠지만 doOnXXXX()으로 시작하는 Operator는 Operator 분류 목록에서 peek 할 수 있는 Opertor로 분류가 되어 있는데, 여기서 peek의 의미는 Reactor Sequence의 내부를 엿보다 라는 의미입니다. 즉, 내부 동작 과정을 확인하기 위한 용도로 사용한다는 의미로 보시면 될 것 같아요.

 

subscribe()는 말 그대로 여러 단계의 Upstream Operator를 거친 후에 최종 데이터를 전달 받아서 소비하는 역할을 합니다.

 

실제 업무에서 사용되는 로직을 제가 잘 몰라서 구체적으로 답변 드리기는 힘들겠지만

doOnNext() 안에서 모든 처리를 한다면 기능적으로 역할 분리가 제대로 되지 않았을 가능성도 있을 것 같습니다.

답변이 도움 되셨길 바랄게요.

감사합니다!