[c5]deview 2012 nodejs
DESCRIPTION
TRANSCRIPT
![Page 1: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/1.jpg)
![Page 2: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/2.jpg)
somewhere…
one years ago…
![Page 3: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/3.jpg)
PHP 개발 (in my opinion)
- Easy to learn and use
- First 5 pages for 5 hours
(exclude design works)
My personal dev era...
![Page 4: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/4.jpg)
Java기반 웹 개발로 전환...
My personal dev era...
![Page 5: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/5.jpg)
I need...
My personal dev era...
![Page 6: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/6.jpg)
여기에는 사실...
![Page 7: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/7.jpg)
Front-end 기술들은 제외하고!
![Page 8: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/8.jpg)
우리의 관심을 분산시키는
이런저런 기술들도 제외하고!
![Page 9: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/9.jpg)
???
???
??? ???
???
???
???
???
???
???
???
??? ???
???
그리고도 VVMM (...)
???
???
![Page 10: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/10.jpg)
We are here
IT Universe
![Page 11: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/11.jpg)
Java 기반 웹 개발 (in my opinion)
My personal dev era...
- NOT easy to learn and use
- First 5 pages for 50 hours !!
![Page 12: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/12.jpg)
No Pain,
No Gains !
Someone says…
![Page 13: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/13.jpg)
No!!! No More Pain!!
![Page 14: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/14.jpg)
잠깐! 그런데,
우리가 지금
뭘 하고 싶은 거죠?
![Page 15: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/15.jpg)
WEB Developing
![Page 16: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/16.jpg)
![Page 17: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/17.jpg)
one tool dummy!
![Page 18: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/18.jpg)
발표자소개
채수원 SUWON, CHAE
- NHN Open Publishing Team, nFORGE Dev.
- node.js community octoberskyjs leader
- blog.doortts.com
- twitter.com/doortts
![Page 19: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/19.jpg)
- 개발자 노트란 무엇인가?
- 개발자 노트의 아키텍처
- 왜 node.js를 선택했는가?
- 생산성과 효용은?
- 문제와 선택들!
- node.js를 이용한 웹 개발에 대한 Lessons Learned
- Tips
- Q&A
![Page 20: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/20.jpg)
helloworld 세미나에서 다룬 내용은 조금 생략합니다.
^^;
- node.js 창발의 순간
- node.js는 무엇인가?
- node.js을 시작하게 된 계기
- node.js 기본 문법
- 외국 사례
- 성능 (Benchmarks)
등등..
![Page 21: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/21.jpg)
왜냐하면
이것 말고도 이야기 해보고 싶은 내용이 많습니다!
![Page 22: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/22.jpg)
Node.js는 실질적으로 서버사이드 자바스크립트 실행환경과 라이브러리,
이렇게 두 가지로 이루어져 있습니다.
고성능 네트워크 라이브러리
저수준 Event-loop를 이용한 callback을 이용해
다양한 I/O 작업을 non-blocking 방식으로 처리 그래서, Node.js는 무엇인가? http://blog.doortts.com/214
![Page 23: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/23.jpg)
![Page 24: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/24.jpg)
Project N4(nFORGE 4)의 Sub Project
wiki와 매뉴얼 작성
open source
Simple, Distributive & Collective merge
node.js 로 개발
git과 호환되는 파일시스템
![Page 25: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/25.jpg)
https://github.com/nforge/devnote
![Page 26: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/26.jpg)
nFORGE 서브 프로젝트로 개발
오픈소스로 공개
삽질 비용을 먼저 치루고 그 결과를 공유/공개한다.
node.js 기술 확산에 기여한다.
우리나라에서도 웹 개발에 spring 말고 다른 걸 사용해 보자.
![Page 27: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/27.jpg)
내부 모듈 아키텍처를 잠깐 볼게요..
![Page 28: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/28.jpg)
ExpressJS app.coffee
App Server
Route module
Jade
Template Engine
Storage - Git compatible
Disk
Wiki System
User
Automation Test
Twitter Bootstrap
CSS foundation
Mocha
Zombie.js
Expresso
Assert
Jake
Project Builder
gitfs.js
Browser Emulation
Controller Test
Unit Test
Renderer
- Markdown - Preview - Syntax highlighter - diff
wiki.js
v2012.4.20
![Page 29: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/29.jpg)
ExpressJS app.coffee
App Server
Route module
Jade
Template Engine
Storage - Git compatible
Disk
Renderer
Wiki System
- Markdown - Preview - Syntax highlighter - diff
User
Automation Test
Twitter Bootstrap
CSS foundation
Mocha
Zombie.js
Expresso (TBD)
Assert
Jake
Project Builder
gitfs.js
wiki.js
Browser Emulation
Controller Test
Unit Test
Node-i18n
winston
step nodemailer
jshashes
i18n
Flow control
Logger
Mailing
Crypto
async
NPM
Dependency Management / installer
Socket.io
Real-Time Feedback
*Git tools
*Git official command line tools
v2012.6.25
![Page 30: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/30.jpg)
AppServer
Express, Restify, Meteor
Template Engine
Jade, EJS
CSS Foundation
Bootstrap, ZURA Foundation
Code Editor
CodeMirror, Plain TextArea
View MVC
backbone.js, ember.js
Test Framework
Mocha, Vows, Nodeunit
Browser Emulation Test
Zombie.js, Phantom.js + Casper.js
쓰고 싶었지만 지나치게 복잡해질 우려가 있어 자제함!
![Page 31: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/31.jpg)
AppServer
Express
Template Engine
Jade
CSS Foundation
Bootstrap
Code Editor
CodeMirror
Real-time feedback
socket.io
Sugar Language
coffeescript
i18n
node-i18n
Email Sender
nodemailer
Browser Emulation Test
Zombie.js
Test Framework
Mocha
Project Builder
jake
Logger
winston
![Page 32: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/32.jpg)
가만히 놔둬도 성장한다.
빠르게 만들 수 있다. 나머지 부분을 개발하면 되니까.
비슷한 모듈들이 있을때는 뭐가 좋은지 판단이 어렵다.
타인의 취향에 휘둘릴 수 있다.
정확히 원하는 기능은 없는 경우가 종종 있다.
라인을 잘 못 타면 오랫동안 피곤해 진다.
-> 발전을 기대하기 보다 현재 기능이 현재 우리에게 맞는가에 집중한다.
-> 최악을 가정
![Page 33: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/33.jpg)
![Page 34: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/34.jpg)
기본적으로는 아키텍처 구성도의 모듈들을
사용하셔서 개발하시면 충분합니다.
삽질은 저희가 이미…
![Page 35: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/35.jpg)
nodejs.org
- NHN 기술투자
- 다수 플랫폼을 지원하는 개발환경 필요
- 개발팀 멤버들이 Spring Framework을 잘 몰라서
PHP개발자, Java 클라이언트 개발자
- 멤버 중 한 명이 node.js 커뮤니티 리더라서…
![Page 36: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/36.jpg)
![Page 37: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/37.jpg)
자바스크립트! 자바스크립트! 자바스크립트!
레퍼런스가 없어서 고생을 할 가능성이 높음
개발하면서 스타일이 변해감. 혹은 어느쪽이 좋은지에 대한 판단이 어려움
function export function object prototype으로 함수를 지정함
see codes…
![Page 38: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/38.jpg)
- 웹 앱서버가 필요함
- node.js로 웹 개발하는 사람들이 가장 대중적으로 사용
expressjs.com
![Page 39: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/39.jpg)
![Page 40: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/40.jpg)
나름 오래 되었고 2.0 이상부터는 기본적으로 웹서버가 가져야 하는 기능들이
잘 들어 있음
문서화가 부족 (계속 발전중. 코드를 보고 이해해야 함)
개인의 취향이 반영되어 개발되는 경향이 있음
Tj Holowaychuk이라는 종합예술가가 대부분의 코드를 개발함
자기 마음대로 모듈을 없애버리거나 사용법을 바꾸거나 함
Windows Azure를 지원하는 MS WebMatrix의 기본 웹 앱서버로 탑재되어 있음
하지만 현실적으로 가장 많은 사례가 있기 때문에 대안이 많지 않음
Meteor에 기대를 해봄
Spring Framework Creator ‘Rod Johnson’ 합류
![Page 41: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/41.jpg)
- express와 함께 쓸 view template이 필요함
-선택지가 별로 없음. jade / ejs
jade-lang.com
![Page 42: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/42.jpg)
![Page 43: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/43.jpg)
Express와 궁합이 좋음
JSP보다는 나음
view 코드량이 줄어듬 (약간 zen coding 느낌도)
But..
살짝 독특한 문법을 배워야 함
마크업 개발자와 협업에 난항이 있음
![Page 44: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/44.jpg)
- 어차피 자바스크립트도 잘 모르니까…
- Best Practice들의 자연스러운 적용
- 간결한 코드
coffeescript.org
![Page 45: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/45.jpg)
![Page 46: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/46.jpg)
작성 코드량 감소 코드 복잡도 감소 가독성 증가
자바스크립트의 best practice들과 defects 를 배울 수 있음
한편으론…
자바스크립트도 잘 모르면서!
디버깅
javascript source maps이 빨리 완성되기를! ?
but … it's a browser technique!
http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
![Page 47: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/47.jpg)
- 기본 assert만으로는 부족
- async 및 callback에 대한 테스트가 필요
http://visionmedia.github.com/mocha/
![Page 48: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/48.jpg)
![Page 49: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/49.jpg)
다양한 Report와 스타일 지원
… 형태, 보고서 형태, html, json 등. see page..
… BDD, TDD,
Coffeescript지원
다른 라이브러리와 함께 쓸 수 있음
should.js, expect.js, chai
async test 지원
간단한 global leak을 잡아준다.
for(idx in files){ console.log(files[idx]) … }
No고민! 그냥쓰면 된다!
![Page 50: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/50.jpg)
- Build Script도 Javascript로!
- sh, make, cake, ant 등등을 대체
https://github.com/mde/jake
![Page 51: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/51.jpg)
![Page 52: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/52.jpg)
Ant와 비슷
쓸만함
단, 자바스크립트로 작성되기때문에 깔끔함은 조금 적음.
커피스크립트도 사용할 수 있음
Jake를 커맨드 라인에서 쓰려면 global로 미리 인스톨 해 놓아야 함
그렇지 않으면 우회방법으로
node node_modules/jake/bin/cli.js build
![Page 53: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/53.jpg)
- controller 대신 웹 브라우저 테스트를 하기로 정함
https://github.com/assaf/zombie
- 일종의 웹 브라우저 에뮬레이션
![Page 54: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/54.jpg)
![Page 55: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/55.jpg)
브라우저를 실제로 띄워서 테스트 하지 않아도 됨
테스트 스크립트 작성이 간단함
client side 자바스크립트 테스트도 가능함
But…
기동에 조금 시간이 걸려서 테스트 타임아웃을 조금 여유있게 잡아야 함
정교한 테스트는 작성에 시간이 많이 걸리거나 어려움
개발자의 정신세계가 조금…
![Page 56: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/56.jpg)
- i18n 처리
https://github.com/mashpie/i18n-node
![Page 57: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/57.jpg)
![Page 58: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/58.jpg)
최초 단어 등록시 message file에 추가할 필요 없이 메시지를 바로 사용하면
파일에 알아서 저장이 됨.
단어를 바꿔대면 기존 단어를 지워주지는 않기 때문에 언어 파일이 지저분 해 짐
한 번 단어를 읽어 들인 상태에서 번역을 변경하면, 서버를 재시작 해야 함
![Page 59: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/59.jpg)
- continuation style에서의 코드 가독성 증가
step: https://github.com/creationix/step
async: https://github.com/caolan/async
![Page 60: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/60.jpg)
![Page 61: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/61.jpg)
![Page 62: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/62.jpg)
step이 훨씬 깔끔하게 나오지만, 기능은 단순
async는 세계정복을 꿈꾸는 수준으로 기능이 많음.
<= 자칫하면 이해하기 더 어렵게 변할 가능성도 있음
둘 다 추천!
![Page 63: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/63.jpg)
![Page 64: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/64.jpg)
node.js
windows 4M
mac os 8M
linux 5M
Java
88M
144M
120M
![Page 65: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/65.jpg)
vi
sublime text 2
web storm / IntelliJ
eclipse
Aptana
![Page 66: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/66.jpg)
console.log
don’t use console.log(‘>>>’ + abc ) style
see the cases..
debugger
node debug app.js
node-inspector
https://github.com/dannycoates/node-inspector
![Page 67: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/67.jpg)
lessons & Learned + 고생의 결과들
![Page 68: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/68.jpg)
getDecoratedUser('doortts', function(err, user) {
if (err) throw err;
console.log(user.name);
});
var getDecoratedUser= function(username, callback){
var err;
if(username === undefined ) err = new Error(‘…’);
callback(err, ’[‘ + username + ‘]’);
}
![Page 69: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/69.jpg)
블럭킹 콜백(blocking callback)
호출한 다음 실행 결과를 대기
지연 콜백(deffered callback)
호출한 다음 실행 결과는 나중에 받는다.
우리가 써야 하는건
지연 콜백!!
(혹은 async callback이라고도 불림)
![Page 70: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/70.jpg)
diagonal sequence
var result, isUserExist;
getUser ('doortts', function (err, user) {
if (err) throw err;
isExist(user, function(err, isExist){
isUserExist = isExist;
}
if (isUserExist)
console.log(result.name + ":" + result.email);
});
![Page 71: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/71.jpg)
diagonal sequence
var result, isUserExist;
getUser ('doortts', function (err, user) {
if (err) throw err;
isExist(user, function(err, isExist){
isUserExist = isExist;
}
if (isUserExist)
console.log(result.name + ":" + result.email);
});
![Page 72: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/72.jpg)
diagonal sequence
var result, isUserExist;
getUser ('doortts', function (err, user) {
if (err) throw err;
isExist(user, function(err, isExist){
isUserExist = isExist;
}
if (isUserExist)
console.log(result.name + ":" + result.email);
});
![Page 73: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/73.jpg)
ECMA Script 3, 5
(0.1 + 0.2) == 0.3
sort…
see the codes
![Page 74: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/74.jpg)
서버사이드 개발자? 프론트앤드 개발자?
![Page 75: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/75.jpg)
큰 고민없이 사용해도 괜찮은 성능
다양한 모듈을 통한 손쉬운(?) 개발
많은 개발자들이 (미친듯이) 뛰어들고 있음
크락포드 아저씨마저..
미래에 대한 준비
안드로이드/아이폰의 교훈
![Page 76: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/76.jpg)
사실 단일 언어라고 하기엔 살짝 무리가 있지만 매우 매력적임
웹 개발 하려면 어차피 자바스크립트 배워야 함
극단적인 코드 재활용
Server-side / front-end 양쪽에서 사용가능한 코드 작성가능
생각보다는 어렵지만, 한편으로는 생각보다는 간결한 언어인 자바스크립트
![Page 77: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/77.jpg)
처음엔 완전 재밌음!
하지만…
![Page 78: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/78.jpg)
성능이 정말 좋은가?
Single Thread 라며?
Multicore CPU 활용은?
CPU 집중적인 일은 좀…
우리나라에서는 쫌…
socket.io 쓰려고 node.js 배워요!
커뮤니티에서 더 많은 이야기 나눠요~ ^^; facebook.com/octoberskyjs
![Page 79: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/79.jpg)
Thread Pool
![Page 80: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/80.jpg)
concepts
modules
core module, file modules
npm
ECMA 3, ECMA 5
예) JSON.parse(text [, reviver])
Profiling, ArrayBuffer
참고 이쁜 자식 매 하나 더 준다는 심정으로 쓰는 node.js 이야기 http://blog.doortts.com/262
![Page 81: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/81.jpg)
node.js mailling list
Scoop-it - http://www.scoop.it/t/nodejs-code
facebook.com/octoberskyj, nodejskr.org
Mozilla Developer Network – Javascript
https://developer.mozilla.org/en-US/docs/JavaScript
자바스크립트 코딩 기법과 핵심 패턴
자바스크립트 핵심 가이드
![Page 82: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/82.jpg)
![Page 83: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/83.jpg)
타입체크도 안되고 뒷 감당 안됩니다!
가독성도 여차하면 무너지는데 테스트 없으면 힘들때 많습니다.
사실 있어도 힘듭니다.
웹 개발이 스프링은 아니잖아요!
열심히 할게요!
![Page 84: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/84.jpg)
반대로 모르면 피곤한..
![Page 85: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/85.jpg)
한번만 로드된다.
따라서 재기동을 해야 모듈이 새로 반영된다.
캐시를 지우면 되지만 개발때 이외에는 사용금지
event-loop clock time으로 한 타임 뒤로 작업을 미룬다.
heavy한 일을 처리할 때 전체 작업이 멈추는 일이 없게 하려면 꼭 써야함
setTimeout( callback, 0 )보다 효율이 좋음!
![Page 86: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/86.jpg)
var name = o && o.getName();
var name = otherName || "default";
switch(a) {
case 1: // fallthrough
case 2:
eatit();
break;
default:
donothing();
}
![Page 87: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/87.jpg)
for (var i = 0; i < a.length; i++) {
...
}
console.log(i);
- 만약 debugger 명령어로 debug가 잘 안될때는 --debug-brk 옵션을 사용한다.
- 메모리 Leak의 위험이 크다. 이벤트 등록/해제를 잘 해주어야 한다.
![Page 88: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/88.jpg)
if (typeof module !== 'undefined' && module.exports) {
module.exports = _;
}
var exports = module.exports = Emailer
- 크롬은 favicon을 찾기위해 따로 request를 보낸다.
![Page 89: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/89.jpg)
-local variable, cached
- module.exports === exports
- Core modules
- File modules
.js, .json, .node
- async를 쓸거면 node.js를 왜쓰니? 라고 말 할 수도 있지만,
생각보다 많은 경우 sync 메소드가 유리할때가 있다.
특히 timming 문제의 경우.
![Page 90: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/90.jpg)
![Page 91: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/91.jpg)
- getter/setter
see codes
- Object.preventExtentions(object)
- Object.seal(object): configurable bits off
- Object.freeze(object): writeable bits off, 결과적으로 immutable을 만들수 있다.
![Page 92: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/92.jpg)
node -e 'console.log(require("fs").watch+"")'
이 외 더 많은 내용은 시간관계상… 이라는 말로
얼버무릴 예정입…
helloworld 블로그, 책 등을 통해 더 이야기 드릴게요
var getUser = function( name, callback) {
…
callback(err, data );
}
![Page 93: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/93.jpg)
![Page 94: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/94.jpg)
광고 – 발표자가 되어주세요!
nodejs korea conference
11월 20일 (화) node committer 및 core contributor 참석 예정
facebook.com/octoberskyjs 에서 소식을 귀 기울여 주세요! ^,^)/
![Page 95: [C5]deview 2012 nodejs](https://reader031.vdocuments.net/reader031/viewer/2022020122/54b4bd694a795965718b45c4/html5/thumbnails/95.jpg)