작성
·
38
0
안녕하세요, 좋은 강의 감사합니다.
쉬운 예제코드와 그림설명 덕분에 Java 8 stream API, Spring Batch ItemStream 과 대조해가며 쑥쑥 이해하고 있습니다.
ContextAPIExmaple02 에서 궁금한 점이 있습니다.
contextWrite()
호출 순서에 의문이 생겨 순서를 변경해보니, 무조건 아래에서 위로 진행되는 걸로 확인되었습니다. 이 규칙이 적용되는 원리가 궁금합니다.
현재 추측하기로는 "subscription signal 에 따라 upstream 으로 이동하는 operator 들은 모두 아래에서 위 순서대로 이동(반전)된다." 인 것 같은데, 확신이 생기지 않습니다.
참고 할 수 있는 자료나 내부 클래스가 있을까요?
답변 2
1
안녕하세요. 좋은 질문 주셔서 감사드립니다.
아래 링크를 보시면 Reactor에서 signal이 어떤 흐름으로 발생하는지 정리가 잘 되어 있는데, 한번 읽어보시면 도움이 되실 것 같아요.
https://itvillage.tistory.com/entry/Reactor-Sequence%EC%97%90%EC%84%9C-%EB%B0%9C%EC%83%9D%ED%95%98%EB%8A%94-signal%EC%9D%98-%EC%A0%84%ED%8C%8C-%ED%9D%90%EB%A6%84
일단 핵심만 간략하게 말씀드리면, Reactor의 Operator는 기본적으로으로 Operator 하나를 Operator 체인에 연결할 때 마다 내부적으로 subscribe()가 한번씩 발생되면서 Upstream 쪽으로 subscription이 전파되는 식으로 전파가 끝나면 데이터가 Downstream 쪽으로 emit 되는 형태로 동작을 하는데요.
이 흐름에 맞춰서 Context의 동작도 발을 맞추는 거라고 생각을 합니다.
그런데 어떤 Operator 들(특히 Thread 관련된)은 내부 동작이 꽤 복잡해서 위 아래로 왔다 갔다하는 흐름도 보입니다.
아무튼 링크에 적힌 내용들 천천히 읽어보시면 도움되실 것 같습니다.
감사합니다~
0
안녕하세요, 인프런 AI 인턴입니다.
jinha3507님, Reactor에서의 contextWrite()
호출과 관련된 동작 방식에 대해 궁금해하시는 것 같습니다. 이와 같은 context의 전파 순서는 Reactor의 중요한 특징 중 하나로, 이를 이해하면 Reactive Programming을 보다 깊게 이해하는 데 큰 도움이 됩니다.
Reactor의 contextWrite()
호출은 마치 체인처럼 동작하며, 신호는 보통 아래에서 위로 방향으로 전달됩니다. 이는 기본적으로 Reactor의 프로세스가 up-stream/down-stream 방향으로 신호를 전파하는 방식과 관련이 있습니다. 코드에서 여러 contextWrite()
호출이 있을 때, 이 호출들은 “아래서 위로” 순서로 처리됩니다. 이는 전통적인 메서드 체이닝과는 반대라는 점에서 특히 주의가 필요합니다.
contextWrite
가 코드의 순서와 관계없이 먼저 발생하여 context에 값을 저장하고 이후에 Mono.deferContextual
이 실행된다는 내용이 포함되어 있습니다.이 두 질문의 답변에서 강사님은 Context의 동작 원리에 대해 상세히 설명하고 있습니다. Reactor를 포함한 리액티브 프로그래밍에서는 신호의 전파가 중요한데, 이는 context와 관련하여도 동일하게 적용됩니다.
제공된 링크에서 강사님의 설명을 통해 과연 어떻게 이러한 전파가 일어나는지, 왜 아래에서 위로 수행되는지를 더 깊이 있는 시각에서 이해할 수 있습니다. 이를 통해 context의 조작과 전파 원리에 대한 기반을 다지시길 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아~ operator 들마다 와리가리가 있긴한데, 큰 그림으로는 "구독의 흐름은 down to up, 데이터의 흐름은 up to down 이다." 요렇게 이해했습니다.
최종 응답을 원하는 연산자가 바로 전 연산자에게 "이런 데이터를 줘" 라고 요청하는 흐름이므로, 어찌보면 자연스럽고 당연한 형태겠네요.
블로그도 천천히 정독해보겠습니다. 감사합니다!