작성
·
23
0
안녕하세요! 강의 잘 듣고 있습니다.
그림 속 예시에서 request(2) * maxSize(3) = upStream request(6) 으로 표현되어 있는 예시 코드에서는 이것이 잘 활용되는 모습이 안보여서 어디에 사용되는건지, 어떻게 사용되는건지 궁금합니다.
답변 2
0
안녕하세요? 제가 해외에 있어서 답변이 조금 늦어진 점 양해 부탁드리겠습니다. 지금쯤 주무시고 계실것 같은데 여긴 아침이라서 아침 먹고 바로 답변쓰고 있습니다. ^^;
궁금해 하시는 내용이 아마도 window()라는 operator를 어떤 상황에서 적절하게 사용할 수 있는지
라고 생각되어서 이 부분을 말씀드릴게요.
공식 문서에서도 설명이 되어 있지만 window() operator는 upstream의 데이터를 지정된 개수만큼 포함한 flux window로 쪼개어서 downstream에서 처리하도록 한다 라고 나와있습니다.
flux window라는건 말 그대로 window라는 단위로 데이터가 포함되어 있는데 이 데이터들을 각각의 flux를 이용해서 개별적으로 처리할 수 있다라는건데요(개별적으로 처리할 수도 있고, List로 변환해서 한꺼번에 처리할 수도 있을테구요).
다만, buffer(maxSize) 같은 경우에는 maxSize만큼 데이터를 쪼개서 버퍼에 담지만 Downstream으로 내려줄때 flux가 아닌 List 형태로 내려줍니다.
flux로 내려주느냐 List로 내려주느냐는 확연한 차이점이 있습니다.
flux를 전달받으면 flux에서 emit되는 개별 데이터를 처리하기 위해 다른 Operator 들을 이용해서 유연하게 처리할 수있고, 비동기적인 처리도 손쉽게 할 수 있기 때문에 buffer 보다 조금 더 상황에 맞는 유연한 처리가 가능하다라고 생각합니다. buffer()는 쪼개어서 List에 담긴 데이터들을 한 번에 모아서 일괄 처리하는데 중점을 둔 operator이기 때문에 window() operator보다는 좀 더 처리가 심플할테구요.
물론 buffer가 아니라 window operator를 이용해서 buffer처럼 데이터를 한번에 일괄 처리할 수도 있을텐데 이 경우에 비동기적으로 처리할 수 있기 때문에 효율성 측면에서 더 나을 수 있다고 생각합니다.
한마디로 buffer는 쪼개어진 데이터에 대한 단순 일괄 처리, window는 단순 일괄 처리 이상의 작업들(비동기 처리, 데이터의 복잡한 가공처리, 지연 처리 등)을 처리할 때 사용한다. 이렇게 생각하시면 될 것 같아요.
답변이 도움 되셨으면 좋겠네요.
감사합니다! 좋은 꿈 꾸세요~
0
안녕하세요, 인프런 AI 인턴입니다.
jinha3507님, window
연산자와 관련된 request(n) * maxSize
부분에 대해 궁금하신 것 같습니다. windows 연산은 주어진 데이터 스트림을 지정된 크기의 청크로 분할하는 데 사용됩니다. 이 과정에서 request(n)
와 maxSize
는 상호작용하여, up-stream까지 전파되는 총 요청 수를 결정하는 역할을 합니다.
예를 들어, request(2)
라 하면, 2개의 윈도우(win)를 요청하고 각각의 윈도우는 최대 maxSize(3)
만큼의 요소를 담을 수 있습니다. 결과적으로, upstream으로부터 2 * 3 = 6
개의 아이템이 요청되게 됩니다. 이는 데이터가 stream을 따라 내려오면서 윈도우에 채워질 때까지 요청을 유지하거나 추가 요청을 발행하는 방식입니다.
관련된 개념과 예시는 아래 기존 답변에서 확인하실 수 있습니다:
jinha3507님이 겪고 있는 ‘어디서 사용되는지’에 대한 부분은 정확히 실행 예제 내의 다른 코드와 흐름을 보아야 할 수 있습니다. 강의 예제나 실습 코드에서 해당 변수들이 주요한 역할을 하는 다른 부분을 살펴보시면 이러한 개념들이 보다 명확하게 다가올 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.