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
추가
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을 되돌려 줌
이를 활용해 비동기 함수끼리의 합성이 가능하다.
'NDC > Server' 카테고리의 다른 글
[NDC 2015] 피파온라인3 서버 구조와 85만 동접 포스트 모템 (0) | 2023.01.05 |
---|---|
[NDC 2014] WCF를 이용하여 쉽게 만드는 모바일 게임서버 (0) | 2022.10.21 |
[NDC 2014] 분산서버 구축의 ABC (0) | 2022.10.19 |
[NDC2014] WCF를 이용하여 쉽게 만드는 모바일 게임서버 (0) | 2021.12.02 |
[NDC2013] 게임 서버 디자인 가이드 (0) | 2021.11.06 |