SlideShare a Scribd company logo
1 of 92
Download to read offline
웹 프론트엔드 개발자의
얕고 넓은 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)
새로운 패러다임이 주는 자극
감사합니다

More Related Content

What's hot

[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기Sang Heon Lee
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015devCAT Studio, NEXON
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...Amazon Web Services Korea
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조Hyunjik Bae
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019devCAT Studio, NEXON
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기MinGeun Park
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기현철 조
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심흥배 최
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012devCAT Studio, NEXON
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)Heungsub Lee
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직Hoyoung Choi
 
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
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremSeungmo Koo
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3Heungsub Lee
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)Bongseok Cho
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략YEONG-CHEON YOU
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonSeungmo Koo
 

What's hot (20)

[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기[NDC2016] TERA 서버의 Modern C++ 활용기
[NDC2016] TERA 서버의 Modern C++ 활용기
 
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
이승재, 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현, NDC2015
 
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
게임 분산 서버 구조
게임 분산 서버 구조게임 분산 서버 구조
게임 분산 서버 구조
 
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
이무림, Enum의 Boxing을 어찌할꼬? 편리하고 성능좋게 Enum 사용하기, NDC2019
 
[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기[데브루키160409 박민근] UniRx 시작하기
[데브루키160409 박민근] UniRx 시작하기
 
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
 
Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
 
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
조정훈, 게임 프로그래머를 위한 클래스 설계, NDC2012
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직중앙 서버 없는 게임 로직
중앙 서버 없는 게임 로직
 
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
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
〈야생의 땅: 듀랑고〉 서버 아키텍처 Vol. 3
 
멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)멀티스레드 렌더링 (Multithreaded rendering)
멀티스레드 렌더링 (Multithreaded rendering)
 
실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략실시간 게임 서버 최적화 전략
실시간 게임 서버 최적화 전략
 
Windows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance ComparisonWindows IOCP vs Linux EPOLL Performance Comparison
Windows IOCP vs Linux EPOLL Performance Comparison
 

Similar to 웹 프론트엔드 개발자의 얕고 넓은 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 to 웹 프론트엔드 개발자의 얕고 넓은 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
 

More from 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
 

More from 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 이야기