Versions Compared

Key

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

오늘날 우리가 인터넷에서 서비스를 사용하는 방식은 데이터 전송을 비롯한 많은 스트리밍 데이터 인스턴스를 포함하고 있습니다.

그것이 다운로드 서비스이든,영화스트리밍 서비스이든 대용량의 데이터를 우리의 어플리케이션이 가진 메모리와 네트워크대역으로는 순간적으로 처리할수가 없습니다.

스트리밍은 항상 생산자와 소비자로 구분되어 있으며 어떻게 생산자와 소비자의 다양한 속도차이를 고려하여 잘처리하느냐에 대한 고민이 필요합니다.


akka-stream은 스트림처리에 제약을 거는 방법(버퍼사용)을 제공하여 이러한 문제에대한 해법을 제공하며 나아가 스트림을 사용하여 외부 시스템과의 통합하는 방법도 제공합니다.


검증코드:http://git.webnori.com/projects/WEBF/repos/spring_cachedb/browse/src/test/java/com/psmon/cachedb/actortest/ActorStream.java


AkkaStreams

...

스트림처리 설정을 공식화하고 직관적이고 안전한 방법을 제공하기위해

...

여러 기업들이 모여 Reactive Streams에 대한 표준을 정의 하였습니다. Reactive Stream은 구현체가 아니라, 이것을 구현하기위한 스펙입니다. ( http://www.reactive-streams.org/ )

이것에 대한 스펙은 네트워크상의 비동기처리 ,비 블로킹,이벤트 기반 데이터 처리등에 대한 다양한 공통 스펙을 표준화 하는것입니다. 그리고 이것은 개발 플래폼,시스템경계가 틀려도 공통적으로 소통및 적용할수 있는 구현 방향 목표를 제시 하는것입니다. 

...

서로 다른 스트리밍 구현이 상호 운영될수 있도록하는 Reactive Streams의 프로젝트의 기대치와  일치합니다. 

k=

AKKA Streams  프로그래밍의 목표

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

최근 모던한 언어들(Java9이상,Scala,언랭등)이 가지고 있는 자료구조들은 Stream처리가 되도록 고안이 되어있으며

함수형인터페이스와 람다를 지원함으로 활용가능해진부분으로 별도의 학습이 필요한 부분입니다.

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

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

최근 Stream 처리기법들이 이러한 방식으로 표준화가 되면서 꼭 Akka Stream만으로 이렇게 처리 할수 있는것은아닙니다.

앞장에서도 설명을 하였지마, Akka가 아니여도 되며 스트림처리에대한 표준적인 방식 한가지만 잘 알고 있다고하면

나머지도 비슷하게 사용할수 있다란것입니다.

Image Removed

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


Akka Stream을 통해 표준적이고  실행가능한 스트림처리를 익히는것이 목표입니다.관련링크:http://www.reactive-streams.org/ 

Note

약간의 차이가 존재하지만, 몇가지 스트림처리가 되는 API를 비교하는것은 스트림처리를 익히는데 좋은 주제입니다.

  • Java 9 Flow API
  • rx java
  • Akka Stream
  • ReActor

참고 url :


Image Added

어느 한가지가 독보적으로 장점을 가진다고 볼수는 없으며 , 개발팀에 구축된 활용 수준에따라 선택을 하면 되는 부분으로 보입니다. 

5년도 더된시점 JAVA7에서 AKKA를 통해 이러한 Stream 이란 개발 컨셉을 예고하였고 사용가능하였습니다.

이러한 개발패턴은 신기방기했으며 구체적으로 어디서 어떻게 사용될지 예측을 하지못했지만

현재 이러한 컨셉은 JAVA9에 자연스럽게 녹아들었으며, 여러가지 활용 패턴과 구체적인 예가 존재합니다.

  • Java 9 Flow API
  • rx java
  • Akka Stream

비동기 동시성처리에 대한 콜백헬을 방지하고

유연한하고 가시성있게 추상화하여 단순하게 표현할것이가? 상호간 영향을 받고 발전을 하는듯 보입니다

Image Added

또한 흐름량을, 부하에따라 제어할수 있는 역압력장치를 이용할수 있는것이 최근 Stream처리들이 기본으로 포함하고 있는 스펙입니다.


참고 url :

참고 url :