node.js 현재와 미래
DESCRIPTION
한국 웹20주년 국제 콘퍼런스( http://www20.kr/ )에서 발표한 발표자료TRANSCRIPT
![Page 2: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/2.jpg)
node.js!
Ryan Dahl!
JSConf.eu 2009
http://www.youtube.com/watch?v=EeYvFl7li9E
Node.js의 미래를 예측하거나 하진 않습니다.Node.js를 개발하고 앞으로 공부하기 위해
도움이 될만한 현재 상태와 앞으로 관심가져야 할 방향에 대한 얘기입니다
![Page 3: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/3.jpg)
node.js!
Ryan Dahl!
JSConf.eu 2009
http://www.youtube.com/watch?v=EeYvFl7li9E
![Page 4: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/4.jpg)
node.js!
Ryan Dahl!
JSConf.eu 2009
http://www.youtube.com/watch?v=EeYvFl7li9E
node.js가 나온지 5년 지났습니다
![Page 5: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/5.jpg)
v0.10.x v0.11.x
stable unstable
![Page 6: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/6.jpg)
v0.10.x v0.11.x
stable unstable
다음 버전은 0.12.x이고그 다음에 1.0 이 나올 예정입니다
![Page 7: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/7.jpg)
v0.10.x v0.11.x
stable unstable
5년 동안 1.0이 안나왔으니버전은 상당히 보수적으로
영하고 있습니다.
![Page 8: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/8.jpg)
![Page 9: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/9.jpg)
작년 여름에 Issac이 1.0에 대한 계획을발표했습니다
![Page 10: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/10.jpg)
조만간 0.12를 발표하고 이어서 1.0을발표할 것이라는 계획이었습니다
![Page 11: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/11.jpg)
1년이 지난 이 시점까지도 0.12가 나오지 않았습니다.
![Page 12: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/12.jpg)
node.js 개발이 늦어지는 이유가 무엇일까요.
![Page 13: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/13.jpg)
Ryan Dahl Isaac Z. Schlueter TJ Fontaine
![Page 14: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/14.jpg)
Ryan Dahl Isaac Z. Schlueter TJ Fontaine
node.js에는 2번의 리더 교체가 있었습니다.Issac이 올 초에 물러나고 TJ Fontaine가
새 리더가 되었습니다.
![Page 15: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/15.jpg)
Ryan Dahl Isaac Z. Schlueter TJ Fontaine
node.js의 개발이 늦어지는 이유는 리더와 코어 개발팀이 교체되었고
그 뒤에 코어 개발자의 커밋이 줄어들었습니다
![Page 16: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/16.jpg)
![Page 17: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/17.jpg)
TJ Fontain은 올해 Node.js on the road 라는
이름으로 발표를 하며 각 도시에서 커뮤니티를 만나고 있습니다
![Page 18: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/18.jpg)
코어팀이 바뀌면서커뮤니티의 의견을 듣고 이를 Node.js개발에
반영하려는 의도로 보입니다
![Page 19: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/19.jpg)
Production
Ready?
![Page 20: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/20.jpg)
Production
Ready?가장 많이 받는 질문은프로덕션에 쓸만한가 이지만
정확한 답은 없습니다
![Page 21: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/21.jpg)
Production
Ready?프로젝트 규모나 성격에 따라 다르고1.0이 아닌 상황에서 윗사람을 설득하기
어려운 부분은 있습니다
![Page 22: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/22.jpg)
http://nodejs.org/industry/
![Page 23: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/23.jpg)
http://nodejs.org/industry/
해외에서는 많은 회사에서node.js를 Production에서
사용하고 있습니다
![Page 24: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/24.jpg)
node.js의 미래는?
![Page 25: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/25.jpg)
Go Language?
![Page 26: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/26.jpg)
Go Language?
TJ처럼 Go 언어로 가자는 이야기는 아닙니다
![Page 27: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/27.jpg)
NetworkProgram
![Page 28: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/28.jpg)
NetworkProgram
node.js는 네트워크 프로그램을 위해만들었습니다
![Page 29: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/29.jpg)
NetworkProgram
Tools
![Page 30: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/30.jpg)
NetworkProgram
Tools
node.js를 이용해서 사람들은도구를 만들기 시작했고
JavaScript이므로 특히 프론트앤드 관련도구가많이 생겼습니다
![Page 31: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/31.jpg)
NetworkProgram
Tools
![Page 32: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/32.jpg)
NetworkProgram
Tools
DesktopApplication
![Page 33: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/33.jpg)
NetworkProgram
Tools
DesktopApplication
많은 시도가 있었지만 지금은데스크탑 어플리케이션도 만들고 있습니다
![Page 34: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/34.jpg)
NetworkProgram
Tools
DesktopApplication
node-webkit
![Page 35: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/35.jpg)
NetworkProgram
Tools
DesktopApplication
Robot
node-webkit
![Page 36: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/36.jpg)
NetworkProgram
Tools
DesktopApplication
Robot
node-webkit
최근에는 로봇제어가 큰 이슈로관련 컨퍼런스도 많이 열리고 있습니다
![Page 37: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/37.jpg)
Node.js v0.12.x
![Page 38: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/38.jpg)
Node.js v0.12.x가장 가까운 미래는
0.12의 변경사항입니다.
![Page 39: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/39.jpg)
- 클러스터링에 라운드로빈 로드밸런싱 도입
- 한 프로세스 안에서 여러 인스턴스 실행
- Node Inspector로 클러스터 앱의 디버깅
- 성능 최적화(TLS, Crypto, …)
![Page 40: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/40.jpg)
- 클러스터링에 라운드로빈 로드밸런싱 도입
- 한 프로세스 안에서 여러 인스턴스 실행
- Node Inspector로 클러스터 앱의 디버깅
- 성능 최적화(TLS, Crypto, …)
성능 개성 및 기능 강화가 주 내용으로커다란 기능의 추가는 없습니다
v1.0에서도 API는 확정후에 개선을 위주로 개발할 것이라고 발표했습니다.
![Page 41: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/41.jpg)
ES6Harmony
![Page 42: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/42.jpg)
ES6Harmony
Node.js 개발에 차후 크게 신경써야 할 부분 중 하나가 ES6 라고 생각합니다
브라우저는 크로스 브라우징 문제로 최신 기능을쓰기 어렵지만 Node.js에서는 바로 사용할 수 있다
![Page 43: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/43.jpg)
$ node --harmony
![Page 44: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/44.jpg)
$ node --harmony
ES6기능을 사용하려면 옵션을 주어야 한다
![Page 45: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/45.jpg)
if (true){ let name = ‘www20’; console.log(name); // www20}!
console.log(name);// ReferenceError: name is not defined
Block Scope
![Page 46: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/46.jpg)
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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/47.jpg)
var map1 = new Map();!
var obj = {name: ‘www20kr’);map1.set(obj, 'Congrat');!
map1.get(obj);// ‘Congrat’
Collection
![Page 48: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/48.jpg)
var set1 = new Set();!
set1.add(1);set1.add(2);set1.add(2);!
set.size; // 2set1.has(2); // true
Collection
![Page 49: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/49.jpg)
var t = (x) => x * x;!
t(4) // 16t(8) // 64
Arrow Functions(Lambdas)
![Page 50: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/50.jpg)
db.find(id, function(err, data) {return data;});!
!
// es6db.find(id, (err, data) => data);
Arrow Functions(Lambdas)
![Page 51: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/51.jpg)
Callback Hell
![Page 52: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/52.jpg)
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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/53.jpg)
Promiseq, bluebird
![Page 54: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/54.jpg)
Promiseq, bluebird
Promise도 ES6에 포함되어 있습니다현재 callback hell을 해결하는 접근으로
많이 사용하고 있습니다
![Page 55: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/55.jpg)
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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/56.jpg)
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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/57.jpg)
Generator
![Page 58: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/58.jpg)
Generator현재는 시작단계이지만 최종적으로는
제너레이터로 갈꺼라고 생각하고 있습니다물론 정착되기까지는 꽤 시간이 걸릴겁니다
![Page 59: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/59.jpg)
function*
![Page 60: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/60.jpg)
function* inc() { for (var i = 0; i < 5; i++) { yield i; }}
![Page 61: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/61.jpg)
> var index = inc();
![Page 62: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/62.jpg)
> var index = increase();> index.next();{ value: 0, done: false }
![Page 63: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/63.jpg)
> var index = increase();> index.next();{ value: 0, done: false }> index.next();{ value: 1, done: false }
![Page 64: Node.js 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/64.jpg)
> 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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/65.jpg)
> 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 현재와 미래](https://reader034.vdocuments.site/reader034/viewer/2022042521/5592ac331a28abed548b478c/html5/thumbnails/66.jpg)
> 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 }