NDC/Server

[NDC 2014] Rx와 Functional Reactive Programming으로 고성능 서버 어플리케이션 만들기

MAKGA 2021. 12. 2. 22:58
320x100

Reactive Programming

프로그래머들이 외면해 왔던 프로그래밍 패러다임

 

- Excel은 대표적인 Reactive Programming이다.

 

- 순서대로 실행될 명령들이 아닌 데이터가 흐르는 방법을 나타내는 것

 

- 명령형 -> 선언적, 순차적 -> 동시적으로 생각하는 방식을 바꿔야 한다.


The Reactive Manifesto

새로운 시대의 새로운 소프트웨어를 위한 선언문

 

- 객체지향 프로그래밍 패턴을 구성하는 인터페이스

OUPUT foo(INPUT a);

너무 당연하게 입력이 들어가고 출력이 나올 때까지 스레드가 아무것도 하지 못한다고 가정하고 있다

 

- Functional Programming의 핵심

M<OUTPUT> foo (INPUT a);

Functional Programming

함수형 프로그래밍으로 무엇을 얻을 수 있는가

 

- MONAD: 함수형 프로그래밍에서 순서가 있는 연산을 처리할 때 사용되는 디자인 패턴

어떤 값을 감싸서 어떤 효과를 주는 것

 

MONAD의 특징

1. 유닛이라 껍데기를 씌우는 연산이 있다 (X => M(X))

2. 플랫맵 (M(X) => M(Y))

a = unit(2)
b = a.flatMap(x->unit(x+3))
c = b.flatMap(y->unit(y+4))
// c == unit(9)

Rx - Reactive Extensions

비동기 스트림으로 흐르는 데이터

 

Rx = Observable(비동기 데이터 스트림) + LINQ(쿼리 연산) + Scheduler(병렬처리 제어)

 

iterable(pull)

getDataFromLocalMemory()

    .skip(10)

    .take(5)

    .map(s -> s + "foo")

    .forEach(println)

이런식으로 함수의 합침이 가능하다.

 

- map - synchronous Continuation

Observable<int> add(Observable<int> input)
{
    return input.map(x -> x+3).map(y -> y+4);

 

- FlatMap - Asynchronous Continuation

Observable<int> query1(int input);
Observable<int> query2(int input);

Observable<int> query(Observable<int> input)
{
    return input.flatMap(query1).flatMap(query2);
}

 

- Zip - Composition

Observable<int> zip(Observable<int> xs, Observable<int> ys)
{
    return zip(xs, ys, (x, y) -> x + y);
}

출처: 김종욱 / 엔씨소프트

http://ndcreplay.nexon.com/NDC2014/sessions/NDC2014_0049.html

 

NDC Replay

안녕하세요. 저는 이런 제목으로 발표를 하게 된 김종욱이라고 합니다. 소개 슬라이드인데요. 학교에서 공부한 것들은 Engineering, science, music 이런 거였고, NC 소프트에서 2012년부터 지금까지 LE

ndcreplay.nexon.com

 

추가

https://dev.ebaykorea.com/20

 

Monad 를 이해하는 방법

Monad 어떤 것을 설명하는 방법에는 몇 가지가 있습니다. 그것의 정의를 가지고 설명할 수도 있고 그것이 갖는 특성을 나열하며 설명할 수도 있습니다. Monad 를 설명할 때는 어떤 방법이 좋을까요?

dev.ebaykorea.com

https://wonism.github.io/monad-simple-example/

 

WONISM's Blog

WONISM's Blog

wonism.github.io

https://www.youtube.com/watch?v=jI4aMyqvpfQ 

 

map은 Input, Output, function을 받고 input을 function으로 처리한 뒤 output을 되돌려 줌

이를 활용해 비동기 함수끼리의 합성이 가능하다.

 

320x100