Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

위 코드는 1부터 10까지 각 요소를  sum을 하는 어려운 코드로 보일수 있으나Stream을 설명을 할수 있는 가장 심플한 어렵게 작성된 코드입니다. 

AkkaStream은 코드만 보면 가독성이 떨어지는것처럼보이고 난해할수 있습니다.


그래서 Flow를 정의하고 그래프를 그려 코드와 일치시키는 가독률을 높이는 연습이 필요합니다.  위 코드를 그래프와 연관시켜 보겠습니다

위 스트림처리보다 더 복잡한것을 점점 추가하면서 처리할것이지만 실제 위 코드에서 더이상

복잡성이 비대하게 증가하지 않는다란점을 샘플코드로 확인및 증명 예정입니다.

Stream Graph

Stream연산을 만드는것은 마치 블록을 조합하는것과 유사합니다.

...

Basic1편에서 수행하는 것보다 더 복잡한것을 처리하지만, 실제 작성코드는 더 간결해졌습니다.

다음에 수행할 스트림을 분기하고 합하는 과정역시 코드의 복잡성이 크게 증가하지 않는다란 점에서

함수형 처리방식의 장점을 살린 방식으로,  처리방식의 Flow 방식 파악이 용이해지며


람다식과 함수형의 혼합이 가독성이 떨어지는것같지만 사실은 그렇지 않습니다.

위와같은 처리를 하려면 비동기 완료이벤트를 결합을하던, 스레드 모델을 혼합하던 작성해야할 코드가

비약적으로 늘어나게되며..,이렇게 작성된 코드는 Flow의 부분수정 결합요소변경및 전체 파악이 어려웠다란 점입니다.

물론 이것은 언어적 요소가 항상 해결해주는것이 아닌, 적절한 툴(API)을 활용해야합니다.Akka에서 스트림처리를 위해 추상화한 수준이 신기방기합니다. 

Stream Basic 3 - Flow를 분기하고 합하기

칠판에 그려놓은, 스트림처리 Flow(Graph)를 코드로 이질감없이 옮길수 있는것이(혹은반대) Akka Stream 의 목표이며

최근 모던한 언어들(Java9이상,Scala,언랭등)이 가지고 있는 자료구조들은 Stream처리가 되도록 고안이 되어있으며( 컬렉션객체는 아닙니다.)


아래 코드는 실제 작동하는 코드이며, Stream처리를 얼마나 단순하게 할수 있는지 한가지 예입니다.

전통적인 개발방식에서는 비동기 완료에 대한 함수를 수없이 연결하면서 콜백헬을 만들수 있는 부분입니다. 


최근 Stream 처리기법들이 함수형  인터페이스를 활용하면서,  사용방법이 유사해졌습니다.

여기서는 Fan(f) 이라는 새로운 것이 등장하였습니다. Fan의 개념은 간단합니다. 이것을 지날때

분기가 일어나거나? 다시 구간이 합쳐진다던지 하는 처리를 하게 됩니다. 


위 그래프에대한 Flow에  코드처리는 단 두줄이면 됩니다. 

AKK Stream Graph DSL의 강력함을 설명할수 있는 짧은 코드입니다.

Image Added

  • 녹색: 왼쪽에서 오른쪽으로 흐르는 하나의 흐름(혹은 위에서 아래로)  - Via
  • 노랑: 분기가 갈라지거나 합해지는 구간(  bcast : out이 2개 , merger : in 이 2개 ) - Merge
  • 레드:  분기 처리 - Bcast


참고 URL : https://doc.akka.io/docs/akka/current/stream/stream-graphs.html