• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
[C5]deview 2012 nodejs
 

[C5]deview 2012 nodejs

on

  • 16,205 views

 

Statistics

Views

Total Views
16,205
Views on SlideShare
3,491
Embed Views
12,714

Actions

Likes
25
Downloads
187
Comments
0

19 Embeds 12,714

http://deview.kr 8967
http://mobicon.tistory.com 3550
http://kiyongs.blogspot.kr 78
http://kiyongs.blogspot.com 35
http://saintyun.com 32
http://swpksi.posco.net 17
http://www.google.co.kr 7
http://webcache.googleusercontent.com 6
http://play.daumcorp.com 5
https://www.google.co.kr 3
https://twitter.com 2
https://www.facebook.com 2
http://mail.nhncorp.com 2
http://local.deview.kr 2
http://translate.googleusercontent.com 2
https://www.google.com 1
http://m.slrclub.com 1
http://kiyongs.blogspot.de 1
http://cafe.naver.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    [C5]deview 2012 nodejs [C5]deview 2012 nodejs Presentation Transcript

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