Node.js 현재와 미래

Preview:

DESCRIPTION

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

Citation preview

Node.js현재와 미래

Outsider@www20kr2014.10.17

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

node.js!

Ryan Dahl!

JSConf.eu 2009

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

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

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

node.js!

Ryan Dahl!

JSConf.eu 2009

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

node.js!

Ryan Dahl!

JSConf.eu 2009

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

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

v0.10.x v0.11.x

stable unstable

v0.10.x v0.11.x

stable unstable

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

v0.10.x v0.11.x

stable unstable

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

영하고 있습니다.

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

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

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

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

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

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

새 리더가 되었습니다.

Ryan Dahl Isaac Z. Schlueter TJ Fontaine

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

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

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

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

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

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

Production

Ready?

Production

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

정확한 답은 없습니다

Production

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

어려운 부분은 있습니다

http://nodejs.org/industry/

http://nodejs.org/industry/

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

사용하고 있습니다

node.js의 미래는?

Go Language?

Go Language?

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

NetworkProgram

NetworkProgram

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

NetworkProgram

Tools

NetworkProgram

Tools

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

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

NetworkProgram

Tools

NetworkProgram

Tools

DesktopApplication

NetworkProgram

Tools

DesktopApplication

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

NetworkProgram

Tools

DesktopApplication

node-webkit

NetworkProgram

Tools

DesktopApplication

Robot

node-webkit

NetworkProgram

Tools

DesktopApplication

Robot

node-webkit

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

Node.js v0.12.x

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

0.12의 변경사항입니다.

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

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

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

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

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

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

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

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

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

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

ES6Harmony

ES6Harmony

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

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

$ node --harmony

$ node --harmony

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

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

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

Block Scope

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

var map1 = new Map();!

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

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

Collection

var set1 = new Set();!

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

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

Collection

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

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

Arrow Functions(Lambdas)

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

!

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

Arrow Functions(Lambdas)

Callback Hell

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

Promiseq, bluebird

Promiseq, bluebird

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

많이 사용하고 있습니다

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

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

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

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

Generator

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

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

function*

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

> var index = inc();

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

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

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

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

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

Thank you.

outsideris@gmail.comTwitter: @outsideris

Recommended