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

Node.js 현재와 미래

Embed Size (px)

DESCRIPTION

한국 웹20주년 국제 콘퍼런스( http://www20.kr/ )에서 발표한 발표자료

Citation preview

Page 1: Node.js 현재와 미래

Node.js현재와 미래

[email protected]

https://www.flickr.com/photos/15216811@N06/6023029145

Page 2: Node.js 현재와 미래

node.js!

Ryan Dahl!

JSConf.eu 2009

http://www.youtube.com/watch?v=EeYvFl7li9E

Node.js의 미래를 예측하거나 하진 않습니다.Node.js를 개발하고 앞으로 공부하기 위해

도움이 될만한 현재 상태와 앞으로 관심가져야 할 방향에 대한 얘기입니다

Page 3: Node.js 현재와 미래

node.js!

Ryan Dahl!

JSConf.eu 2009

http://www.youtube.com/watch?v=EeYvFl7li9E

Page 4: Node.js 현재와 미래

node.js!

Ryan Dahl!

JSConf.eu 2009

http://www.youtube.com/watch?v=EeYvFl7li9E

node.js가 나온지 5년 지났습니다

Page 5: Node.js 현재와 미래

v0.10.x v0.11.x

stable unstable

Page 6: Node.js 현재와 미래

v0.10.x v0.11.x

stable unstable

다음 버전은 0.12.x이고그 다음에 1.0 이 나올 예정입니다

Page 7: Node.js 현재와 미래

v0.10.x v0.11.x

stable unstable

5년 동안 1.0이 안나왔으니버전은 상당히 보수적으로

영하고 있습니다.

Page 8: Node.js 현재와 미래
Page 9: Node.js 현재와 미래

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

Page 10: Node.js 현재와 미래

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

Page 11: Node.js 현재와 미래

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

Page 12: Node.js 현재와 미래

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

Page 13: Node.js 현재와 미래

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

Page 14: Node.js 현재와 미래

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

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

새 리더가 되었습니다.

Page 15: Node.js 현재와 미래

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

node.js의 개발이 늦어지는 이유는 리더와 코어 개발팀이 교체되었고

그 뒤에 코어 개발자의 커밋이 줄어들었습니다

Page 16: Node.js 현재와 미래
Page 17: Node.js 현재와 미래

TJ Fontain은 올해 Node.js on the road 라는

이름으로 발표를 하며 각 도시에서 커뮤니티를 만나고 있습니다

Page 18: Node.js 현재와 미래

코어팀이 바뀌면서커뮤니티의 의견을 듣고 이를 Node.js개발에

반영하려는 의도로 보입니다

Page 19: Node.js 현재와 미래

Production

Ready?

Page 20: Node.js 현재와 미래

Production

Ready?가장 많이 받는 질문은프로덕션에 쓸만한가 이지만

정확한 답은 없습니다

Page 21: Node.js 현재와 미래

Production

Ready?프로젝트 규모나 성격에 따라 다르고1.0이 아닌 상황에서 윗사람을 설득하기

어려운 부분은 있습니다

Page 22: Node.js 현재와 미래

http://nodejs.org/industry/

Page 23: Node.js 현재와 미래

http://nodejs.org/industry/

해외에서는 많은 회사에서node.js를 Production에서

사용하고 있습니다

Page 24: Node.js 현재와 미래

node.js의 미래는?

Page 25: Node.js 현재와 미래

Go Language?

Page 26: Node.js 현재와 미래

Go Language?

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

Page 27: Node.js 현재와 미래

NetworkProgram

Page 28: Node.js 현재와 미래

NetworkProgram

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

Page 29: Node.js 현재와 미래

NetworkProgram

Tools

Page 30: Node.js 현재와 미래

NetworkProgram

Tools

node.js를 이용해서 사람들은도구를 만들기 시작했고

JavaScript이므로 특히 프론트앤드 관련도구가많이 생겼습니다

Page 31: Node.js 현재와 미래

NetworkProgram

Tools

Page 32: Node.js 현재와 미래

NetworkProgram

Tools

DesktopApplication

Page 33: Node.js 현재와 미래

NetworkProgram

Tools

DesktopApplication

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

Page 34: Node.js 현재와 미래

NetworkProgram

Tools

DesktopApplication

node-webkit

Page 35: Node.js 현재와 미래

NetworkProgram

Tools

DesktopApplication

Robot

node-webkit

Page 36: Node.js 현재와 미래

NetworkProgram

Tools

DesktopApplication

Robot

node-webkit

최근에는 로봇제어가 큰 이슈로관련 컨퍼런스도 많이 열리고 있습니다

Page 37: Node.js 현재와 미래

Node.js v0.12.x

Page 38: Node.js 현재와 미래

Node.js v0.12.x가장 가까운 미래는

0.12의 변경사항입니다.

Page 39: Node.js 현재와 미래

- 클러스터링에 라운드로빈 로드밸런싱 도입

- 한 프로세스 안에서 여러 인스턴스 실행

- Node Inspector로 클러스터 앱의 디버깅

- 성능 최적화(TLS, Crypto, …)

Page 40: Node.js 현재와 미래

- 클러스터링에 라운드로빈 로드밸런싱 도입

- 한 프로세스 안에서 여러 인스턴스 실행

- Node Inspector로 클러스터 앱의 디버깅

- 성능 최적화(TLS, Crypto, …)

성능 개성 및 기능 강화가 주 내용으로커다란 기능의 추가는 없습니다

v1.0에서도 API는 확정후에 개선을 위주로 개발할 것이라고 발표했습니다.

Page 41: Node.js 현재와 미래

ES6Harmony

Page 42: Node.js 현재와 미래

ES6Harmony

Node.js 개발에 차후 크게 신경써야 할 부분 중 하나가 ES6 라고 생각합니다

브라우저는 크로스 브라우징 문제로 최신 기능을쓰기 어렵지만 Node.js에서는 바로 사용할 수 있다

Page 43: Node.js 현재와 미래

$ node --harmony

Page 44: Node.js 현재와 미래

$ node --harmony

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

Page 45: Node.js 현재와 미래

if (true){ let name = ‘www20’; console.log(name); // www20}!

console.log(name);// ReferenceError: name is not defined

Block Scope

Page 46: Node.js 현재와 미래

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

Page 47: Node.js 현재와 미래

var map1 = new Map();!

var obj = {name: ‘www20kr’);map1.set(obj, 'Congrat');!

map1.get(obj);// ‘Congrat’

Collection

Page 48: Node.js 현재와 미래

var set1 = new Set();!

set1.add(1);set1.add(2);set1.add(2);!

set.size; // 2set1.has(2); // true

Collection

Page 49: Node.js 현재와 미래

var t = (x) => x * x;!

t(4) // 16t(8) // 64

Arrow Functions(Lambdas)

Page 50: Node.js 현재와 미래

db.find(id, function(err, data) {return data;});!

!

// es6db.find(id, (err, data) => data);

Arrow Functions(Lambdas)

Page 51: Node.js 현재와 미래

Callback Hell

Page 52: Node.js 현재와 미래

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

Page 53: Node.js 현재와 미래

Promiseq, bluebird

Page 54: Node.js 현재와 미래

Promiseq, bluebird

Promise도 ES6에 포함되어 있습니다현재 callback hell을 해결하는 접근으로

많이 사용하고 있습니다

Page 55: Node.js 현재와 미래

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) { … });

Page 56: Node.js 현재와 미래

var fs = require(‘fs’);var Q = require(‘q’);!

var readFile = Q.denodeify(fs.readFile);!

readFile(‘/path/to/file’) .then(function(data) { … }) .catch(function(err) { … });

Page 57: Node.js 현재와 미래

Generator

Page 58: Node.js 현재와 미래

Generator현재는 시작단계이지만 최종적으로는

제너레이터로 갈꺼라고 생각하고 있습니다물론 정착되기까지는 꽤 시간이 걸릴겁니다

Page 59: Node.js 현재와 미래

function*

Page 60: Node.js 현재와 미래

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

Page 61: Node.js 현재와 미래

> var index = inc();

Page 62: Node.js 현재와 미래

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

Page 63: Node.js 현재와 미래

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

Page 64: Node.js 현재와 미래

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

Page 65: Node.js 현재와 미래

> 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 }

Page 66: Node.js 현재와 미래

> 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 }

Page 67: Node.js 현재와 미래

Thank you.

[email protected]: @outsideris