Slide 1

Slide 1 text

Node.js 현재와 미래 Outsider@www20kr 2014.10.17 https://www.flickr.com/photos/15216811@N06/6023029145

Slide 2

Slide 2 text

node.js ! Ryan Dahl ! JSConf.eu 2009 http://www.youtube.com/watch?v=EeYvFl7li9E Node.js의 미래를 예측하거나 하진 않습니다. Node.js를 개발하고 앞으로 공부하기 위해 도움이 될만한 현재 상태와 앞으로 관심가져야 할 방향에 대한 얘기입니다

Slide 3

Slide 3 text

node.js ! Ryan Dahl ! JSConf.eu 2009 http://www.youtube.com/watch?v=EeYvFl7li9E

Slide 4

Slide 4 text

node.js ! Ryan Dahl ! JSConf.eu 2009 http://www.youtube.com/watch?v=EeYvFl7li9E node.js가 나온지 5년 지났습니다

Slide 5

Slide 5 text

v0.10.x v0.11.x stable unstable

Slide 6

Slide 6 text

v0.10.x v0.11.x stable unstable 다음 버전은 0.12.x이고 그 다음에 1.0 이 나올 예정입니다

Slide 7

Slide 7 text

v0.10.x v0.11.x stable unstable 5년 동안 1.0이 안나왔으니 버전은 상당히 보수적으로 영하고 있습니다.

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

작년 여름에 Issac이 1.0에 대한 계획을 발표했습니다

Slide 10

Slide 10 text

조만간 0.12를 발표하고 이어서 1.0을 발표할 것이라는 계획이었습니다

Slide 11

Slide 11 text

1년이 지난 이 시점까지도 0.12가 나오지 않았습니다.

Slide 12

Slide 12 text

node.js 개발이 늦어지는 이유가 무엇일까요.

Slide 13

Slide 13 text

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

Slide 14

Slide 14 text

Ryan Dahl Isaac Z. Schlueter TJ Fontaine node.js에는 2번의 리더 교체가 있었습니다. Issac이 올 초에 물러나고 TJ Fontaine가 새 리더가 되었습니다.

Slide 15

Slide 15 text

Ryan Dahl Isaac Z. Schlueter TJ Fontaine node.js의 개발이 늦어지는 이유는 리더와 코어 개발팀이 교체되었고 그 뒤에 코어 개발자의 커밋이 줄어들었습니다

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

TJ Fontain은 올해 Node.js on the road 라는 이름으로 발표를 하며 각 도시에서 커뮤니티를 만나고 있습니다

Slide 18

Slide 18 text

코어팀이 바뀌면서 커뮤니티의 의견을 듣고 이를 Node.js개발에 반영하려는 의도로 보입니다

Slide 19

Slide 19 text

Production Ready

Slide 20

Slide 20 text

Production Ready 가장 많이 받는 질문은 프로덕션에 쓸만한가 이지만 정확한 답은 없습니다

Slide 21

Slide 21 text

Production Ready 프로젝트 규모나 성격에 따라 다르고 1.0이 아닌 상황에서 윗사람을 설득하기 어려운 부분은 있습니다

Slide 22

Slide 22 text

http://nodejs.org/industry/

Slide 23

Slide 23 text

http://nodejs.org/industry/ 해외에서는 많은 회사에서 node.js를 Production에서 사용하고 있습니다

Slide 24

Slide 24 text

node.js의 미래는?

Slide 25

Slide 25 text

Go Language?

Slide 26

Slide 26 text

Go Language? TJ처럼 Go 언어로 가자는 이야기는 아닙니다

Slide 27

Slide 27 text

Network Program

Slide 28

Slide 28 text

Network Program node.js는 네트워크 프로그램을 위해 만들었습니다

Slide 29

Slide 29 text

Network Program Tools

Slide 30

Slide 30 text

Network Program Tools node.js를 이용해서 사람들은 도구를 만들기 시작했고 JavaScript이므로 특히 프론트앤드 관련도구가 많이 생겼습니다

Slide 31

Slide 31 text

Network Program Tools

Slide 32

Slide 32 text

Network Program Tools Desktop Application

Slide 33

Slide 33 text

Network Program Tools Desktop Application 많은 시도가 있었지만 지금은 데스크탑 어플리케이션도 만들고 있습니다

Slide 34

Slide 34 text

Network Program Tools Desktop Application node-webkit

Slide 35

Slide 35 text

Network Program Tools Desktop Application Robot node-webkit

Slide 36

Slide 36 text

Network Program Tools Desktop Application Robot node-webkit 최근에는 로봇제어가 큰 이슈로 관련 컨퍼런스도 많이 열리고 있습니다

Slide 37

Slide 37 text

Node.js v0.12.x

Slide 38

Slide 38 text

Node.js v0.12.x 가장 가까운 미래는 0.12의 변경사항입니다.

Slide 39

Slide 39 text

- 클러스터링에 라운드로빈 로드밸런싱 도입 - 한 프로세스 안에서 여러 인스턴스 실행 - Node Inspector로 클러스터 앱의 디버깅 - 성능 최적화(TLS, Crypto, …)

Slide 40

Slide 40 text

- 클러스터링에 라운드로빈 로드밸런싱 도입 - 한 프로세스 안에서 여러 인스턴스 실행 - Node Inspector로 클러스터 앱의 디버깅 - 성능 최적화(TLS, Crypto, …) 성능 개성 및 기능 강화가 주 내용으로 커다란 기능의 추가는 없습니다 v1.0에서도 API는 확정후에 개선을 위주로 개발할 것이라고 발표했습니다.

Slide 41

Slide 41 text

ES6 Harmony

Slide 42

Slide 42 text

ES6 Harmony Node.js 개발에 차후 크게 신경써야 할 부분 중 하나가 ES6 라고 생각합니다 브라우저는 크로스 브라우징 문제로 최신 기능을 쓰기 어렵지만 Node.js에서는 바로 사용할 수 있다

Slide 43

Slide 43 text

$ node --harmony

Slide 44

Slide 44 text

$ node --harmony ES6기능을 사용하려면 옵션을 주어야 한다

Slide 45

Slide 45 text

if (true){ let name = ‘www20’; console.log(name); // www20 } ! console.log(name); // ReferenceError: name is not defined Block Scope

Slide 46

Slide 46 text

var map1 = new Map(); ! map1.set('name', 'www20kr'); map1.set('date', new Date(‘2014-10-17')); ! map1.get('name'); // ‘www20kr’ map1.get('date'); // Fri Oct 17 2014 09:00:00 GMT+0900 (KST) Collection

Slide 47

Slide 47 text

var map1 = new Map(); ! var obj = {name: ‘www20kr’); map1.set(obj, 'Congrat'); ! map1.get(obj); // ‘Congrat’ Collection

Slide 48

Slide 48 text

var set1 = new Set(); ! set1.add(1); set1.add(2); set1.add(2); ! set.size; // 2 set1.has(2); // true Collection

Slide 49

Slide 49 text

var t = (x) => x * x; ! t(4) // 16 t(8) // 64 Arrow Functions(Lambdas)

Slide 50

Slide 50 text

db.find(id, function(err, data) { return data; }); ! ! // es6 db.find(id, (err, data) => data); Arrow Functions(Lambdas)

Slide 51

Slide 51 text

Callback Hell

Slide 52

Slide 52 text

var doSomething = function(callback) { somethingAsync(function(err, data) { somethingAsync(function(err, data) { somethingAsync(function(err, data) { somethingAsync(function(err, data) { callback(err, data); }); }); }); }); };

Slide 53

Slide 53 text

Promise q, bluebird

Slide 54

Slide 54 text

Promise q, bluebird Promise도 ES6에 포함되어 있습니다 현재 callback hell을 해결하는 접근으로 많이 사용하고 있습니다

Slide 55

Slide 55 text

var fs = require(‘fs’); var Q = require(‘q’); ! var readFile = function(file) { var deferred = Q.defer(); fs.readFile(file, function(err, data) { if (err) { return deferred.reject(err); deferred.resolve(data); }); return deferred.promise; }; ! readFile(‘/path/to/file’) .then(function(data) { … }) .catch(function(err) { … });

Slide 56

Slide 56 text

var fs = require(‘fs’); var Q = require(‘q’); ! var readFile = Q.denodeify(fs.readFile); ! readFile(‘/path/to/file’) .then(function(data) { … }) .catch(function(err) { … });

Slide 57

Slide 57 text

Generator

Slide 58

Slide 58 text

Generator 현재는 시작단계이지만 최종적으로는 제너레이터로 갈꺼라고 생각하고 있습니다 물론 정착되기까지는 꽤 시간이 걸릴겁니다

Slide 59

Slide 59 text

function*

Slide 60

Slide 60 text

function* inc() { for (var i = 0; i < 5; i++) { yield i; } }

Slide 61

Slide 61 text

> var index = inc();

Slide 62

Slide 62 text

> var index = increase(); > index.next(); { value: 0, done: false }

Slide 63

Slide 63 text

> var index = increase(); > index.next(); { value: 0, done: false } > index.next(); { value: 1, done: false }

Slide 64

Slide 64 text

> var index = increase(); > index.next(); { value: 0, done: false } > index.next(); { value: 1, done: false } > index.next(); { value: 2, done: false }

Slide 65

Slide 65 text

> var index = increase(); > index.next(); { value: 0, done: false } > index.next(); { value: 1, done: false } > index.next(); { value: 2, done: false } > index.next(); { value: 3, done: false }

Slide 66

Slide 66 text

> var index = increase(); > index.next(); { value: 0, done: false } > index.next(); { value: 1, done: false } > index.next(); { value: 2, done: false } > index.next(); { value: 3, done: false } > index.next(); { value: 4, done: false } > index.next(); { value: undefined, done: true }

Slide 67

Slide 67 text

Thank you. [email protected] Twitter: @outsideris