SlideShare una empresa de Scribd logo
1 de 92
Descargar para leer sin conexión
웹 프론트엔드 개발자의
얕고 넓은 Rx 이야기
김훈민, NAVER 스마트에디터 3.0
http://huns.me
비동기와 이벤트 기반 프로그램을 작성하는 데 필요한
Observable 시퀀스 처리 라이브러리
Rx
2005 현재
2007,
Volta
2009,
RX.NET
2010,
RXJS
2012,
오픈소스 공개
2013
RxJava
“Of all the work I’ve done in my career so far, this is
the most exciting. […] I know it’s a bold statement,
but I really believe that the problem of
asynchronous programming events has been
solved.”
https://campustechnology.com/articles/2009/08/10/microsofts-new-.net-rx-
framework-tackles-challenges-of-asynchronous-programming.aspx
목차
1. Rx를 지탱하는 세 가지 키워드
2. 요즘 들어 왜 자주 보일까?
3. 함수형 리액티브 프로그래밍
4. 웹 프론트엔드, 그리고 RxJS
#1
Rx를 지탱하는
세 가지 키워드
Reactive Programming
LINQ to Events
Scheduler
Reactive
Programming
데이터 플로우와 상태 변경을 전파한다는
생각에 근간을 둔 프로그래밍 패러다임
Reactive Programming in Wikipedia, The Free Encyclopedia
Reactive systems […] are repeatedly prompted
by the outside world and their role is to
continusouly respond
external inputs
- On the development of reactive systems, 1985 -
http://dl.acm.org/citation.cfm?id=101990
자극은 밖에서 안으로 흐름
자극이 있어야만 반응하는 수동성
반응
Iterator Data
next()
Observer Data
subscribe()
어떤 체계 간에 존재하는 다음과 같은 논리적 성질. 각각 1:1로 대
응하는 개념 xi와 yi(i=1, 2, …)로 이루어진 체계 S1={x1,
x2, …}, S2={y1, y2, …} 등이 있다고 하자. 여기서 S1과 S2는 전
체로서는 같은 체계라도 괜찮다. S1에 관하여 명제 r(x1, x2, …,
xn)가 성립될 때 이 명제에 있어서 각 xi를 대응하는 yi로 치환한
명제 P(y1, y2, …, yn)가 S2에 관하여 성립된다. S1, S2 간에 존재
하는 이와 같은 논리적 성질을 쌍대성이라 하고 xi, yi를 쌍대인 개
념 r(x1, x2, …), P(y1, y2, …)를 쌍대 명제라 한다. 전기 회로에서
는 표와 같이 대응할 때마다 쌍대성이 존재하여 중요하다.
[네이버 지식백과] 쌍대성 [duality] (IT용어사전, 한국정보통신기술협회)
A와 B의 본질이 같다
(약간의 정신 승리)
어떤 체계 간에 존재하는 다음과 같은
논리적 성질. 각각 1:1로 대응하는 개
념 xi와 yi(i=1, 2, …)로 이루어진 체계
S1={x1, x2, …}, S2={y1, y2, …} 등
이 있다고 하자. 여기서 S1과 S2는 전
체로서는 같은 체계라도 괜찮다. S1에
관하여 명제 r(x1, x2, …, xn)가 성립될
때 이 명제에 있어서 각 xi를 대응하는
yi로 치환한 명제 P(y1, y2, …, yn)가 S2
에 관하여 성립된다. S1, S2 간에 존재
하는 이와 같은 논리적 성질을 쌍대성
이라 하고 xi, yi를 쌍대인 개념 r(x1,
x2, …), P(y1, y2, …)를 쌍대 명제라 한
다. 전기 회로에서는 표와 같이 대응할
때마다 쌍대성이 존재하여 중요하다.
event
Iterable
(pull)
Observable
(push)
데이터 가져오기 T next() next(T)
에러 처리 throws Exception error(Exception)
완료 !hasNext() complete()
LINQ to Events
이벤트와 LINQ의 개념을 결합한
오퍼레이터(Operator) 제공
Language
INtergrated
Query
에릭 마이어가 만든 통합 질의 언어
C# 3.0부터 등장
데이터 질의 문법 설탕
//Query syntax:

IEnumerable<int> numQuery1 =

from num in numbers

where num % 2 == 0

orderby num

select num;



//Method syntax:

IEnumerable<int> numQuery2 = numbers

.Where(num => num % 2 == 0)

.OrderBy(n => n);
//Query syntax:

IEnumerable<int> numQuery1 =

from num in numbers

where num % 2 == 0

orderby num

select num;



//Method syntax:

IEnumerable<int> numQuery2 = numbers

.Where(num => num % 2 == 0)

.OrderBy(n => n);
Your Mouse is
a DataBase
= Observable + LINQ
Mouse Move
Event
const targetElement = document.getElementById('dragElement');

const drag$ = Rx.Observable

.fromEvent(targetElement, 'mouseup');



drag$

.flatMap(ev => ({

startX: ev.pageX,

startY: ev.pageY

}));



drag$.subscribe(pos => {

console.log(pos);

});
Mouse Move
Event
const targetElement = document.getElementById('dragElement');

const drag$ = Rx.Observable

.fromEvent(targetElement, 'mouseup');



drag$

.flatMap(ev => ({

startX: ev.pageX,

startY: ev.pageY

}));



drag$.subscribe(pos => {

console.log(pos);

});
Subscribe
const targetElement = document.getElementById('dragElement');

const drag$ = Rx.Observable

.fromEvent(targetElement, 'mouseup');



drag$

.flatMap(ev => ({

startX: ev.pageX,

startY: ev.pageY

}));



drag$.subscribe(pos => {

console.log(pos);

});
Scheduler
비동기(멀티스레드) 환경에서
오퍼레이터 실행 시점 제어
#2
요즘 들어,
왜 자주 보일까?
Rx만 잘난 것도 아닌데
왜 굳이 Rx?
https://medium.com/reactive-programming/what-is-reactive-programming-bc9fa7f4a7fc#.ddo2ci9wx
Reactive Manifesto
http://www.reactivemanifesto.org/
Responsive
Reactive Manifesto
http://www.reactivemanifesto.org/
Responsive
Elastic Resilient
Reactive Manifesto
http://www.reactivemanifesto.org/
Responsive
Resilient
Message-Driven
Elastic
callback
promise
generator
async/await
…
(Compositionality)
구성성
춘향은 잠에서 퍼뜩 깼다
춘향 / 은 / 잠 / 에서 / 퍼뜩 / 깼다
춘향 / 은 / 자-/ ㅁ / 에서 / 퍼뜩 / 깨- / 었- / 다
1
2
3
http://labs.bench.co/blog/2014/12/10/microservices-at-bench-intro
https://www.kirupa.com/react/components.htm
Functional + Rx
복잡 -> 분리 -> 결합
동시성 구성성
sum = a + b
sum = a + b
a와 b의 합을 sum에 할당?
sum = a + b
정체성, 관계 정의
a
b
sum
const a = document.getElementById('a');

const a$ = Rx.Observable

.fromEvent(a, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(a.value, 10));

const b = document.getElementById('b');

const b$ = Rx.Observable

.fromEvent(b, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(b.value, 10));



const result$ = Rx.Observable

.combineLatest(a$, b$)

.map(values => values.reduce((acc, cur) => acc + cur));



result$.subscribe(res => document.getElementById('result').value = res);
a
const a = document.getElementById('a');

const a$ = Rx.Observable

.fromEvent(a, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(a.value, 10));

const b = document.getElementById('b');

const b$ = Rx.Observable

.fromEvent(b, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(b.value, 10));




const result$ = Rx.Observable

.combineLatest(a$, b$)

.map(values => values.reduce((acc, cur) => acc + cur));



result$.subscribe(res => document.getElementById('result').value = res);
a
b
const a = document.getElementById('a');

const a$ = Rx.Observable

.fromEvent(a, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(a.value, 10));
const b = document.getElementById('b');

const b$ = Rx.Observable

.fromEvent(b, 'keyup')

.map(e => parseInt(e.target.value || 0, 10))

.startWith(parseInt(b.value, 10));
const sum$ = Rx.Observable

.combineLatest(a$, b$)

.map(values => values.reduce((acc, cur) => acc + cur));



sum$.subscribe(res => document.getElementById('result').value = res);
a
b
sum
#3
함수형
리액티브
프로그래밍(FRP)
함수형 리액티브 프로그래밍(FRP)을
둘러싼 혼란과 진실
It is sometimes called “functional reactive
programming” but this is a misnomer.
ReactiveX may be functional, and it may be
reactive, but “functional reactive
programming” is a different animal.
http://reactivex.io/intro.html
Functional
Reactive
AnimatioN
by Conal Elliott and Paul Hudak, 1997
인터랙티브 3D 그래픽 처리
표현과 모델링의 분리
시간에 따라 변하는 값을 표현(Behavior)
함수형 리액티브 프로그래밍(FRP)의 시작
http://images.slideplayer.com/26/8448601/slides/slide_4.jpg
wiggle = sin(pi * time)
wiggle = sin(pi * time)
Behavior
moveXY(x, y, image)
moveXY wiggle 0 image
charlotte = importBitmap "../Media/charlotte.bmp"
moveXY wiggle 0 charlotte
http://conal.net/fran/tutorial.htm
leftRightCharlotte = moveXY wiggle 0 charlotte
upDownPat = moveXY 0 waggle pat
charlottePatDance = leftRightCharlotte `over` upDownPat
https://prezi.com/rfgd0rzyiqp_/controlling-time-and-space/
"Original FRP" refers to
denotational and
continuous-time
functional programming
using behaviors
and events.
https://github.com/conal/talk-2015-essence-and-origins-of-frp
https://medium.com/@andrestaltz/why-i-cannot-say-frp-but-i-just-did-d5ffaa23973b#.xtc4pmnco
const result$ = Rx.Observable

.combineLatest(a$, b$)

.map(values => {
values.reduce((acc, cur) => acc + cur)
});
불연속 값(descret value) 처리!
스트림 결합시 사이드 이펙트 발생!
구성성(compositionality) 결여!
ones 1 2
hundreds 200
sum 101 202
시간
100
ones 1 2
hundreds 200
sum 101 202
시간
100
ones 1 2
hundreds 200
sum 101 202
시간
102
순간 불일치(glitch)
100
Rx = 반응성 - 시간
Rx는 동시성을 매개변수화하여
쌍대성을 이용하여 현실적인 대안을 제시
http://csl.stanford.edu/~christos/pldi2010.fit/meijer.duality.pdf
event
Iterable
(pull)
Observable
(push)
데이터 가져오기 T next() next(T)
에러 처리 throws Exception error(Exception)
완료 !hasNext() complete()
None BlockingBlocking
#4
웹 프론트엔드,
그리고 RxJS
웹 프론트엔드에서 RxJS는 어떤 의미가 있을까?
도메인 모델, OOP 설계
KVO(Key-Value Observing)
양방향 데이터 바인딩
풍부한 디렉티브
가상 DOM을 이용한 렌더링
순수 함수와 같은 컴포넌트
순수 함수 조합
단방향 데이터 플로우
신뢰할 수 있는 단일 출처
불변 상태
MVI(Model-View-Intent)
순환 스트림 설계
함수형 프로그래밍
+ Reactive
+ Functional
OOP FP
Angular2…?
OOP FP
2
But,
with RxJS or Redux
OOP FP
2
주변을
둘러 보시라
Elm에서 영감을 얻은 redux, cycle.js
다른 진영 또는 클래식한 기술에서 새로운 통찰 획득
Rx는 좋은 자극제
정리
비동기 해법으로 탄생
Observable + LINQ + Scheduler
RP and Functional, But Not FRP
복잡도 증가 -> 분리 -> 결합
핵심은 구성성(Compositionality)
새로운 패러다임이 주는 자극
감사합니다

Más contenido relacionado

La actualidad más candente

Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPSeungmo Koo
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Esun Kim
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugMasatoshi Tada
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기MinGeun Park
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 TipsTakaaki Suzuki
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm伸男 伊藤
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話ushiboy
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010devCAT Studio, NEXON
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들Chris Ohk
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Yoshifumi Kawai
 
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)Amazon Web Services Korea
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTipsKenjiro Kubota
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発慎一 古賀
 

La actualidad más candente (20)

Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
Akka.NET 으로 만드는 온라인 게임 서버 (NDC2016)
 
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsugJava ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
はじめてのPowerShell
はじめてのPowerShellはじめてのPowerShell
はじめてのPowerShell
 
gRPC入門
gRPC入門gRPC入門
gRPC入門
 
Jenkins 再入門
Jenkins 再入門Jenkins 再入門
Jenkins 再入門
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
T90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvmT90 きっと怖くないmvvm & mvpvm
T90 きっと怖くないmvvm & mvpvm
 
SPAのルーティングの話
SPAのルーティングの話SPAのルーティングの話
SPAのルーティングの話
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
spring-boot-fr.pdf
spring-boot-fr.pdfspring-boot-fr.pdf
spring-boot-fr.pdf
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
 
MVVM入門
MVVM入門MVVM入門
MVVM入門
 
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)
서버리스 IoT 백엔드 개발 및 구현 사례 : 윤석찬 (AWS 테크에반젤리스트)
 
中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips中・大規模でLaravelを導入するTips
中・大規模でLaravelを導入するTips
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 

Similar a 웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기

track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민 track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민 양 한빛
 
반응형프로그래밍입문 1회 20161003
반응형프로그래밍입문 1회 20161003반응형프로그래밍입문 1회 20161003
반응형프로그래밍입문 1회 20161003DongHwan Yu
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)Sang Don Kim
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, ScalabilityDongwook Lee
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스Sungik Kim
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...Chanjin Park
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
C# Game Server
C# Game ServerC# Game Server
C# Game Serverlactrious
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스noerror
 
Clojurescript로 하는 함수형 UI 프로그래밍
Clojurescript로 하는 함수형 UI 프로그래밍Clojurescript로 하는 함수형 UI 프로그래밍
Clojurescript로 하는 함수형 UI 프로그래밍Sang-Kyu Park
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는Taegon Kim
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019min woog kim
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발JavaCommunity.Org
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With GroovyTommy C. Kang
 
RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기Seokju Na
 

Similar a 웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기 (20)

track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민 track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
track2 04. MS는 Rx를 왜 만들었을까? feat. RxJS/ 네이버, 김훈민
 
반응형프로그래밍입문 1회 20161003
반응형프로그래밍입문 1회 20161003반응형프로그래밍입문 1회 20161003
반응형프로그래밍입문 1회 20161003
 
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
[Td 2015]너에게만 나는 반응해 반응형 응용프로그램(이규원)
 
D2 Havok
D2 HavokD2 Havok
D2 Havok
 
Scala, Scalability
Scala, ScalabilityScala, Scalability
Scala, Scalability
 
Scalability
ScalabilityScalability
Scalability
 
NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스NDC11_김성익_슈퍼클래스
NDC11_김성익_슈퍼클래스
 
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...KCSE 2015 Tutorial 빅데이터 분석 기술의  소프트웨어 공학 분야 활용 (...
KCSE 2015 Tutorial 빅데이터 분석 기술의 소프트웨어 공학 분야 활용 (...
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
C# Game Server
C# Game ServerC# Game Server
C# Game Server
 
NDC11_슈퍼클래스
NDC11_슈퍼클래스NDC11_슈퍼클래스
NDC11_슈퍼클래스
 
Clojurescript로 하는 함수형 UI 프로그래밍
Clojurescript로 하는 함수형 UI 프로그래밍Clojurescript로 하는 함수형 UI 프로그래밍
Clojurescript로 하는 함수형 UI 프로그래밍
 
함수적 사고 2장
함수적 사고 2장함수적 사고 2장
함수적 사고 2장
 
ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는ReactJS | 서버와 클라이어트에서 동시에 사용하는
ReactJS | 서버와 클라이어트에서 동시에 사용하는
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
김민욱, (달빛조각사) 엘릭서를 이용한 mmorpg 서버 개발, NDC2019
 
E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발E-Gov 기반 Mobile Web Friendly 개발
E-Gov 기반 Mobile Web Friendly 개발
 
Domain Specific Languages With Groovy
Domain Specific Languages With GroovyDomain Specific Languages With Groovy
Domain Specific Languages With Groovy
 
RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기RxJS로 비동기와 친해지기
RxJS로 비동기와 친해지기
 
Modern android
Modern androidModern android
Modern android
 

Más de Kim Hunmin

React로 TDD 쵸큼 맛보기
React로 TDD 쵸큼 맛보기React로 TDD 쵸큼 맛보기
React로 TDD 쵸큼 맛보기Kim Hunmin
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple OverviewKim Hunmin
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?Kim Hunmin
 
Lexical environment in ecma 262 5
Lexical environment in ecma 262 5Lexical environment in ecma 262 5
Lexical environment in ecma 262 5Kim Hunmin
 
Dom selecting & jQuery
Dom selecting & jQueryDom selecting & jQuery
Dom selecting & jQueryKim Hunmin
 

Más de Kim Hunmin (6)

React로 TDD 쵸큼 맛보기
React로 TDD 쵸큼 맛보기React로 TDD 쵸큼 맛보기
React로 TDD 쵸큼 맛보기
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
Es2015 Simple Overview
Es2015 Simple OverviewEs2015 Simple Overview
Es2015 Simple Overview
 
Why javaScript?
Why javaScript?Why javaScript?
Why javaScript?
 
Lexical environment in ecma 262 5
Lexical environment in ecma 262 5Lexical environment in ecma 262 5
Lexical environment in ecma 262 5
 
Dom selecting & jQuery
Dom selecting & jQueryDom selecting & jQuery
Dom selecting & jQuery
 

웹 프론트엔드 개발자의 얕고 넓은 Rx 이야기