작성
·
245
0
안녕하세요.
Context 체인은 아래에서부터 위로 전파된다고 하셨는데 그 이유가 궁금합니다.
Stream()에서 순서대로 연산을 실행해서 조건에 맞는 것만 다음연산으로 넘어가는데 어떻게 context는 반대 방향으로 동작을 하나요?
답변 1
0
안녕하세요? Context의 전파 특성에 대해서 질문 주셨는데요.
공식 문서 상에는 Context에 저장된 데이터가 아래쪽에서 위쪽으로 전파되는 특성을 가진다라고 나와있지만 왜 그렇게 전파되는지에 대한 이유에 대해서는 설명이 되어 있지 않습니다.
다만, 이유에 대해서 유추를 해보면 Reactor Operator 체인의 특성과 연관이 있을거라고 생각됩니다.
Reactor 체인에서 아래 쪽으로 전달되는 데이터는 각각의 Operator 입장에서 데이터소스가 될텐데요.
Context에 저장된 데이터들은 데이터소스에 포함되어 조금 더 구체적인 데이터로 구성된 후, 아래 쪽으로 전달되는게 자연스럽다고 생각합니다.
그런데 굳이 위에서 아래로가 아니라 아래에서 위로 전파되어야 하는지에 대한 부분은,
각각의 Operator 들이 내부적으로 subscribe()를 매번 호출할텐데 이 호출이 아래에서 위로(역방향으로) 호출되면서 Context에 세팅된 값들을 최상위 Upstream까지 전파한 후, 사용하기 때문이라고 생각할 수 있을 것 같습니다.
그리고 일반적으로 쓰레드 간에 상태 정보를 공유하는건 굉장히 복잡한 과정을 거쳐야 할텐데, Reactor의 Context를 통해 쓰레드 간에 상태 정보를 손쉽게 공유할 수 있게 해주는 것과도 연관이 있을거라고 생각됩니다.(내부적으로 소스 코드를 다 파헤쳐 본 것은 아니라서 그렇게 예상만 하고 있습니다.)