reactive streams, frp

분류없음 2017.05.02 10:48 posted by dev.bistro


쓰고는 있는것 같지만... 제대로 쓰고 있는지 제대로 알고 있는지 항상 아리송한 것들?

정답은 아니고... 그냥 다시 한번 훑어보는 정도

(밑의 내용들이 다 맞는지도 모르겠다, 그리고 보고나서도 새로운걸 많이 본것 보다는 여전히 아리송하다는거 ㅎ)



Reactive Streams

- asynchronous stream processing with non-blocking back pressure 를 위한 표준 스펙

- 2013년 경부터 넷플릭스, 피보탈, 트위터, 타입세이프등이 모여서 논의를 했고 시작은 akka, play 팀이다. (역시!) [2][3]

- 이 구현체로 JDK9, RxJava2, 스프링-리액터 등이 있다.

- RxJava는 이 스펙의 등장으로 인해서 1 -> 2 메이저 버전올라갈때 완전히 재작성 되었다. [4]


리액티브 프로그래밍 Vs 리액티브 시스템, FRP [5]

- 리액티브 시스템은 여러 독립 프로그램이 통합되어 유기적인 결합은 하는 아키텍쳐 스타일

- 리액티브 프로그래밍 : 하나의 어플리케이션에 리액티브 스타일의 프로그래밍을 할 수 있다 (퍼즐의 하나로 표현한다)

- FRP : 최근들어 잘못 사용되는 경우가 많다. 정확한 정의는 [6] , [7]도 참고


[1] https://en.wikipedia.org/wiki/Reactive_Streams#cite_note-16

[2] https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.0/README.md#specification

[3] 오라클 문서 JDK9의 리액티브-스트림을 구현하는 표준 Flow API : https://community.oracle.com/docs/DOC-1006738

[4] http://realignist.me/code/2017/01/25/rxjava2-changelog.html

[5] https://www.hanbit.co.kr/network/category/category_view.html?cms_code=CMS6076376207

[6] http://conal.net/papers/icfp97/

[7] http://www.enshahar.me/2014/07/frp.html


zuul/erueka 기반으로 cf 

신고

Superseded by Akka HTTP

language/scala 2017.05.01 20:21 posted by dev.bistro

spary 팀이 akka-http 에 합류하더라도, spary는 계속 진행될 거다 라는 내용은.. 아마 https://github.com/sirthias의 글에서 본 걸로 기억이 난다. 당시만 해도 akka-http가 시작되는 정도였지만  spary는 거의 중단된채 akka쪽에 힘쓰는걸 보니, 말과는 다르게 접히겠구나 생각되었다.  

오늘 갑자기 생각나서 들어가보니  PRdocumentation 와는 다르게 Superseded by Akka HTTP 라는 내용으로 README.md가 대체되었다. 그리고 sparu 1.3.3 과 함께 고민을 하게 하면 akka-http는 experimental 에서 2.5.0 까지 나왔인줄 알았는데 현재 10.0.5 -_-;

akka에서 분리되어 독립 project가 생겼고,버전을 10으로 크게 올렸다.

akka: http://akka.io/docs

akka-http : http://doc.akka.io/docs/akka-http/current/scala.html



신고

'language > scala' 카테고리의 다른 글

SCALA TYPE ERASURE & TYPETAG  (0) 2017.06.30
SCALA UPPER/LOWER TYPE BOUND & VIEW BOUND  (0) 2017.06.28
Superseded by Akka HTTP  (0) 2017.05.01
FP 비엄격성  (1) 2015.05.18
scala package object  (0) 2014.11.05
scala의 lazy 비용  (0) 2014.10.21


spring 5.0 이후 RouterFunction을 이용하여 EndPoint를 구현 할 수 있다. 이 RouterFunction을 스프링 빈으로 만들면 기존의 @Controller와 동일한 포지션의 역할을 수행하는데 어떻게 스캐닝을 하는걸 까?


Springboot 2.0 은 아직 개발중이지만, 그 안에서 확인 할 수 있다.

링크 를 보면

@ConditionalOnMissingBean(RouterFunction.class)
@ConditionalOnBean(RouterFunction.class)

즉, RouterFunction의 스프링 존재 여부에 따라 분기를 타고 AnnotationConfig, FunctionalConfig 설정을 적용하게 된다. 

즉 현재 기본 설정으로는 RouterFunction Bean, Controller Bean을 동시에 스캐닝 해주지 않는다 ('기본설정'에서')


1. List<RouterFunction<T>> routerFunctions 을 파라미터로 주입받아 하나의 RouterFunction으로 재구성한다. 

2. 오더링 하고, 기본 DefaultHandlerStrategiesBuilder, ViewResolvers를 설정한다.

3. WebHandler를 구성한다. 실제 구현 클래스는 HttpWebHandlerAdapter 이다. (만약 기존의 방식이었다면, 새롭게 WebHandler 인터페이스를 상속받는 DispatcherHandler 가 처리하게 된다)

신고


티스토리 툴바