• Save
nodejs
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

nodejs

on

  • 1,779 views

node.js basic

node.js basic

Statistics

Views

Total Views
1,779
Views on SlideShare
1,777
Embed Views
2

Actions

Likes
13
Downloads
1
Comments
0

2 Embeds 2

https://twitter.com 1
http://blog.naver.com 1

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

nodejs Presentation Transcript

  • 1. 1
  • 2.   /
  • 3.   Node.js
  • 4.    Server
  • 5.   Side
  • 6.   Javascript
  • 7.   
  • 8.   
  • 9. 2
  • 10.   /
  • 11.   Node.js
  • 12.    Node.js 목차 1. Javascript in a nutshell 2. CommonJs 3. node.js 란? - architecture - 특점/장단점 4. Practice & pitfalls - callback - diagonal sequence - globals & moduls 5. Core Modules 6. Debugging & Error Handling 7. npm 8. web app development with node.j s 9. Lessons Learned 10. Tip & Tricks
  • 13. 3
  • 14.   /
  • 15.   Node.js
  • 16.    본
  • 17.   강의는
  • 18.   node.js를
  • 19.   시작하는
  • 20.   사람들이
  • 21.    Node.js에
  • 22.   대해
  • 23.   올바르게
  • 24.   이해하고
  • 25.   
  • 26.    
  • 27.    흔히
  • 28.   저지르는
  • 29.   실수나
  • 30.   오해,
  • 31.   
  • 32.    그로
  • 33.   인해
  • 34.   발행하는
  • 35.   비용을
  • 36.   사전에
  • 37.   방지하여
  • 38.    개발을
  • 39.   쉽고
  • 40.   즐겁게
  • 41.   진행
  • 42.   할
  • 43.   수
  • 44.   있도록
  • 45.   돕는
  • 46.   것을
  • 47.   목표로
  • 48.   합니다.
  • 49.    강의목적
  • 50.    본
  • 51.   교재는
  • 52.   수업을
  • 53.   돕기
  • 54.   위해
  • 55.   만들어졌습니다.
  • 56.    대부분의
  • 57.   내용은
  • 58.   강의와
  • 59.   실습으로
  • 60.   전달합니다.
  • 61.   :
  • 62.   )
  • 63.   
  • 64. 4
  • 65.   /
  • 66.   Node.js
  • 67.    Day1
  • 68. 5
  • 69.   /
  • 70.   Node.js
  • 71.    Setting & Verification
  • 72. 6
  • 73.   /
  • 74.   Node.js
  • 75.    Node
  • 76.   installation
  • 77.    
  • 78.    http://nodejs.org
  • 79.   
  • 80. 7
  • 81.   /
  • 82.   Node.js
  • 83.    var
  • 84.   http
  • 85.   =
  • 86.   require('http');
  • 87.    
  • 88.    http.createServer(function
  • 89.   (request,
  • 90.   response)
  • 91.   {
  • 92.    
  • 93.   
  • 94.   response.writeHead(200,
  • 95.   {'Content-Type':
  • 96.   'text/plain'});
  • 97.    
  • 98.   
  • 99.   response.end('Hello
  • 100.   Worldn');
  • 101.    }).listen(8080);
  • 102.    
  • 103.    console.log('Server
  • 104.   running
  • 105.   at
  • 106.   http://127.0.0.1:8080');
  • 107.    node
  • 108.   example.js
  • 109.    server.js
  • 110.    실행
  • 111.   
  • 112. 8
  • 113.   /
  • 114.   Node.js
  • 115.    Step #0 Javascript 워밍업
  • 116.   
  • 117. 9
  • 118.   /
  • 119.   Node.js
  • 120.    Javascript Data type §  수
  • 121.   (Number)
  • 122.    §  문자열
  • 123.   (String)
  • 124.    §  부울
  • 125.   (Boolean)
  • 126.    §  객체
  • 127.   (Object)
  • 128.    §  함수
  • 129.   (Function)
  • 130.    §  배열
  • 131.   (Array)
  • 132.    §  날짜
  • 133.   (Date)
  • 134.    §  정규식
  • 135.   (RegExp)
  • 136.    §  널
  • 137.   (Null)
  • 138.    §  정의되지않음
  • 139.   (Undefined)
  • 140.   
  • 141. 10
  • 142.   /
  • 143.   Node.js
  • 144.    Check with console :
  • 145.   )
  • 146.   
  • 147. 11
  • 148.   /
  • 149.   Node.js
  • 150.    Step #1 CommonJS
  • 151. 12
  • 152.   /
  • 153.   Node.js
  • 154.    CommonJs
  • 155.   
  • 156. 13
  • 157.   /
  • 158.   Node.js
  • 159.    CommonJs
  • 160.   
  • 161. 14
  • 162.   /
  • 163.   Node.js
  • 164.    CommonJs
  • 165.    Kaven
  • 166.   Dangoor
  • 167.    "   What Server Side JavaScript needs - 2009.1 "   formerly, ServerJS "   a group with a goal of building up the JavaScript ecosystem for web servers, desktop and command line apps and in the browser Python
  • 168.   Turbo
  • 169.   Gears
  • 170.   framework
  • 171.   
  • 172. 15
  • 173.   /
  • 174.   Node.js
  • 175.    CommonJs
  • 176.    Kaven
  • 177.   Dangoor
  • 178.    "   JavaScript needs a cross-interpreter standard library "   standard interfaces "   standard way to include other modules "   package up code for deployment and distribution "   install packages "   package repository "   dependency management Python
  • 179.   Turbo
  • 180.   Gears
  • 181.   framework
  • 182.   
  • 183. 16
  • 184.   /
  • 185.   Node.js
  • 186.    CommonJs
  • 187.   
  • 188. 17
  • 189.   /
  • 190.   Node.js
  • 191.    CommonJs
  • 192.   
  • 193. 18
  • 194.   /
  • 195.   Node.js
  • 196.    CommonJs
  • 197.   
  • 198. 19
  • 199.   /
  • 200.   Node.js
  • 201.    CommonJS
  • 202.    •  spec
  • 203.   
  • 204. 20
  • 205.   /
  • 206.   Node.js
  • 207.    CommonJs
  • 208.   
  • 209. 21
  • 210.   /
  • 211.   Node.js
  • 212.    CommonJs
  • 213. 22
  • 214.   /
  • 215.   Node.js
  • 216.    Node.js
  • 217.    Ryah
  • 218.   Dahl
  • 219.   
  • 220. 23
  • 221.   /
  • 222.   Node.js
  • 223.    Node.js
  • 224.    "   2009.1 http://four.livejournal.com/943068.html
  • 225.   
  • 226. 24
  • 227.   /
  • 228.   Node.js
  • 229.    Node.js
  • 230.    "   2009.2
  • 231. 25
  • 232.   /
  • 233.   Node.js
  • 234.    Node.js
  • 235.    "   2009.5
  • 236. 26
  • 237.   /
  • 238.   Node.js
  • 239.    Node.js
  • 240.    "   2009.6
  • 241. 27
  • 242.   /
  • 243.   Node.js
  • 244.    Node.js
  • 245.    3년 뒤…
  • 246. 28
  • 247.   /
  • 248.   Node.js
  • 249.    Node.js
  • 250.   
  • 251. 29
  • 252.   /
  • 253.   Node.js
  • 254.    https://npmjs.org/
  • 255. 30
  • 256.   /
  • 257.   Node.js
  • 258.    node.js
  • 259.   학습에
  • 260.   대해
  • 261.    "   node.js "   concepts "   modules "   core module, file modules " npm " javascript "   v8
  • 262. 31
  • 263.   /
  • 264.   Node.js
  • 265.    Node.js
  • 266.    그래서,
  • 267.   Node.js는
  • 268.   무엇인가?
  • 269.    http://blog.doortts.com/214
  • 270.   
  • 271. 32
  • 272.   /
  • 273.   Node.js
  • 274.    Node.js
  • 275.   
  • 276. 33
  • 277.   /
  • 278.   Node.js
  • 279.    Node.js
  • 280.    "   특징 "   Single Threaded "   Event Loop "   Non blocking I/O
  • 281. 34
  • 282.   /
  • 283.   Node.js
  • 284.    Benchmark
  • 285.   
  • 286. 35
  • 287.   /
  • 288.   Node.js
  • 289.    Event
  • 290.   Loop
  • 291.   vs
  • 292.   Thread
  • 293.   
  • 294. 36
  • 295.   /
  • 296.   Node.js
  • 297.    Node.js
  • 298.    "   Simple Server var
  • 299.   http
  • 300.   =
  • 301.   require('http');
  • 302.    var
  • 303.   PORT
  • 304.   =
  • 305.   3000;
  • 306.    
  • 307.    var
  • 308.   server
  • 309.   =
  • 310.   http.createServer(function
  • 311.   (req,
  • 312.   res)
  • 313.   {
  • 314.    
  • 315.   
  • 316.   res.writeHead(200,
  • 317.   {'Content-Type':
  • 318.   'text/plain'});
  • 319.    
  • 320.   
  • 321.   res.end('Hello
  • 322.   Worldn');
  • 323.    })
  • 324.    
  • 325.    server.listen(PORT,
  • 326.   '127.0.0.1');
  • 327.    console.log('Server
  • 328.   running
  • 329.   at
  • 330.   http://127.0.0.1:'+PORT);
  • 331.   
  • 332. 37
  • 333.   /
  • 334.   Node.js
  • 335.    Node.js
  • 336.    => blocking => Non-blocking "   Programming Style
  • 337. 38
  • 338.   /
  • 339.   Node.js
  • 340.    Node.js
  • 341.    "   Design Goal "   어떤 함수도 I/O를 직접 수행해선 안 된다. "   디스크나 네트워크, 혹은 다른 프로세스로부터 정보를 받 으려면 반드시 callback이 있어야 한다. "   예) b = a(); <= non I/O a( function(b) { … });
  • 342. 39
  • 343.   /
  • 344.   Node.js
  • 345.    Node.js
  • 346.    "   Design Goal "   모든 것이 스트림! 버퍼링하도록 강제하지 않는다. "   POSIX(유닉스 운영체계에 기반을 두고 있는 일련의 표준 운영체계 인터페이스) 레이어에서 제공되는 기능을 제거하 지 않는다. 이를테면 half-closed TCP 연결지원 같은 기 능을 제거하지 않음 "   수 많은 HTTP Features, 즉 HTTP의 스펙으로 정한 기 능들을 지원한다
  • 347. 40
  • 348.   /
  • 349.   Node.js
  • 350.    Node.js
  • 351.    "   Design Goal "   API는 클라이언트 자바스크립트 개발자들과 올드 스쿨 유 닉스 해커들 모두에게 친숙해야 한다. "   플랫폼 독립적이다
  • 352. 41
  • 353.   /
  • 354.   Node.js
  • 355.    Node.js
  • 356.    "   Design Goal "   단순한 라이선스 "   MIT/BSD, openssl 만 apache alike 자체 라이선스 "   의존성이 적음 "   정적으로 링크함 "   즐길 수 있어야 한다.
  • 357. 42
  • 358.   /
  • 359.   Node.js
  • 360.    Node.js
  • 361.    "   Architecture 해설
  • 362.   문서
  • 363.   보기
  • 364.   -
  • 365.   http://blog.doortts.com/253
  • 366.   
  • 367. 43
  • 368.   /
  • 369.   Node.js
  • 370.    Libuv - Non-blocking TCP sockets - Non-blocking named pipes - UDP - Timers - Child process spawning - Asynchronous DNS via uv_getaddrinfo. - Asynchronous file system APIs uv_fs_* - High resolution time uv_hrtime - Current executable path look up uv_exepath - Thread pool scheduling uv_queue_work - ANSI escape code controlled TTY uv_tty_t - File system events Currently supports inotify, ReadDirectoryChangesW and ueue. Event ports in the near future. uv_fs_event_t - IPC and socket sharing between processes uv_write2
  • 371. 44
  • 372.   /
  • 373.   Node.js
  • 374.    Node.js
  • 375.   
  • 376. 45
  • 377.   /
  • 378.   Node.js
  • 379.    Step
  • 380.   #2
  • 381.   getting
  • 382.   start
  • 383. 46
  • 384.   /
  • 385.   Node.js
  • 386.    callback
  • 387.    "   callback <div id=‘message’></div> … --- setTimeout(function(){ $(‘#message’).html(‘hello~’); }, 3000 );
  • 388. 47
  • 389.   /
  • 390.   Node.js
  • 391.    callback
  • 392.    getDecoratedUser('doortts',
  • 393.   function(err,
  • 394.   user)
  • 395.   {
  • 396.    
  • 397.   
  • 398.   
  • 399.   
  • 400.   
  • 401.   
  • 402.   
  • 403.   
  • 404.   if
  • 405.   (err)
  • 406.   throw
  • 407.   err;
  • 408.    
  • 409.   
  • 410.   
  • 411.   
  • 412.   
  • 413.   
  • 414.   
  • 415.   
  • 416.   console.log(user.id);
  • 417.    
  • 418.   });
  • 419.    var
  • 420.   getDecoratedUser=
  • 421.   function(username,
  • 422.   callback){
  • 423.    
  • 424.   
  • 425.   
  • 426.   
  • 427.   
  • 428.   
  • 429.   var
  • 430.   user,
  • 431.   err;
  • 432.    
  • 433.   
  • 434.   
  • 435.   
  • 436.   
  • 437.   
  • 438.   if(username
  • 439.   ===
  • 440.   undefined
  • 441.   )
  • 442.   err
  • 443.   =
  • 444.   new
  • 445.   Error(‘…⋯’);
  • 446.    
  • 447.   
  • 448.   
  • 449.   
  • 450.   
  • 451.   
  • 452.   user
  • 453.   =
  • 454.   db.findByName(username);
  • 455.    
  • 456.   
  • 457.   
  • 458.   
  • 459.   
  • 460.   
  • 461.   callback(err,
  • 462.   user);
  • 463.    }
  • 464.   
  • 465. 48
  • 466.   /
  • 467.   Node.js
  • 468.    callback
  • 469.    "   callback fail getUser('doortts', function (err, user) { if (err) throw err; console.log(user.name); }); console.log('Done');
  • 470. 49
  • 471.   /
  • 472.   Node.js
  • 473.    callback
  • 474.    § 블럭킹
  • 475.   콜백(blocking
  • 476.   callback)
  • 477.    
  • 478.   
  • 479.   
  • 480.   호출한
  • 481.   다음
  • 482.   실행
  • 483.   결과를
  • 484.   대기
  • 485.    § 지연
  • 486.   콜백(deffered
  • 487.   callback)
  • 488.    
  • 489.   
  • 490.   
  • 491.   호출한
  • 492.   다음
  • 493.   실행
  • 494.   결과는
  • 495.   나중에
  • 496.   받는다.
  • 497.    
  • 498.    우리가
  • 499.   써야
  • 500.   하는건
  • 501.   
  • 502.    지연
  • 503.   콜백!!
  • 504.    (혹은
  • 505.   async
  • 506.   callback이라고도
  • 507.   불림)
  • 508.   
  • 509. 50
  • 510.   /
  • 511.   Node.js
  • 512.    callback
  • 513.    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); });
  • 514. 51
  • 515.   /
  • 516.   Node.js
  • 517.    callback
  • 518.    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); });
  • 519. 52
  • 520.   /
  • 521.   Node.js
  • 522.    callback
  • 523.    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); });
  • 524. 53
  • 525.   /
  • 526.   Node.js
  • 527.    Globals
  • 528.    "   global "   process "   console "   Buffer "   require() " require.resolve() " require.cache "   __filename "   __dirname "   exports "   module " setTimeout(cb, ms) " clearTimeout(t) " setInterval(cb, ms) " clearInterval(t)
  • 529. 54
  • 530.   /
  • 531.   Node.js
  • 532.    modules
  • 533.    "   module "   local variable, cached " module.exports === exports "   Core modules "   File modules "  .js, .json, .node "   require('bar.js') "   /home/ry/projects/node_modules/bar.js "   /home/ry/node_modules/bar.js "   /home/node_modules/bar.js "   /node_modules/bar.js
  • 534. 55
  • 535.   /
  • 536.   Node.js
  • 537.    Folders
  • 538.   as
  • 539.   Modules
  • 540.    "   ./some-library/package.json { "name" : "some-library", "main" : "./lib/some-library.js" } "  require('./some-library') ./some-library/lib/some-library.js ./some-library/index.js ./some-library/index.node
  • 541. 56
  • 542.   /
  • 543.   Node.js
  • 544.    Loading
  • 545.   from
  • 546.   the
  • 547.   global
  • 548.   folders
  • 549.    "   NODE_PATH "   local에서 못 찾았을 경우 "   1: $HOME/.node_modules "   2: $HOME/.node_libraries "   3: $PREFIX/lib/node
  • 550. 57
  • 551.   /
  • 552.   Node.js
  • 553.    NODE_ENV
  • 554.    "   환경설정 "   NODE_ENV=production node main.js " process.env.NODE_ENV
  • 555. 58
  • 556.   /
  • 557.   Node.js
  • 558.    실습
  • 559.    "   특정 폴더의 File 개수와 파일 size 합 구하기
  • 560. 59
  • 561.   /
  • 562.   Node.js
  • 563.    Step
  • 564.   #3
  • 565.   core
  • 566.   modules
  • 567. 60
  • 568.   /
  • 569.   Node.js
  • 570.    Stability
  • 571. 61
  • 572.   /
  • 573.   Node.js
  • 574.    Process
  • 575.    process.hrtime(); process.nextTick()
  • 576. 62
  • 577.   /
  • 578.   Node.js
  • 579.    Events/EventEmitter
  • 580.    "   require('events').EventEmitter " emitter.on(event, listener) " emitter.addListener(event, listener) "   Event: 'newListener'
  • 581. 63
  • 582.   /
  • 583.   Node.js
  • 584.    Events/EventEmitter
  • 585.    " emitter.once(event, listener) "   Add one time listener " emitter.removeListener(event, listener)
  • 586. 64
  • 587.   /
  • 588.   Node.js
  • 589.    Events/EventEmitter
  • 590.    " emitter.setMaxListeners(n) "   Default: 10개
  • 591. 65
  • 592.   /
  • 593.   Node.js
  • 594.    Custom EventEmitter
  • 595.   
  • 596. 66
  • 597.   /
  • 598.   Node.js
  • 599.    실습
  • 600.    "   특정 폴더의 File 개수와 파일 size 합 구하기 (using EventEmitter)
  • 601. 67
  • 602.   /
  • 603.   Node.js
  • 604.    debugging
  • 605.    §  node.js debug <js file> "   console.log "   debugger "   require('debug') "   node-inspector
  • 606. 68
  • 607.   /
  • 608.   Node.js
  • 609.    process
  • 610.    " process.nextTick(callback) "   Event: 'exit'
  • 611. 69
  • 612.   /
  • 613.   Node.js
  • 614.    process
  • 615.    "   Event: 'uncaughtException'
  • 616. 70
  • 617.   /
  • 618.   Node.js
  • 619.    cluster
  • 620.    " cluster.fork() " cluster.isMaster " cluster.isWorker 30ms startup and 10mb memory
  • 621. 71
  • 622.   /
  • 623.   Node.js
  • 624.    cluster
  • 625.   
  • 626. 72
  • 627.   /
  • 628.   Node.js
  • 629.    Error
  • 630.   Handling
  • 631.    " aync function rule "   callback(err, …, …) "   try ~ catch "   Uncaught Exception process.on('uncaughtException', function(err) { console.log(err); });
  • 632. 73
  • 633.   /
  • 634.   Node.js
  • 635.    debugging
  • 636.    "   node.js debug myscript.js
  • 637. 74
  • 638.   /
  • 639.   Node.js
  • 640.    debugging
  • 641.    "   node-inpector " npm install -g node-inspector "   node --debug your/node/program.js node --debug-brk your/short/node/script.js "   node-inspector "   http://127.0.0.1:8080/debug?port=5858
  • 642. 75
  • 643.   /
  • 644.   Node.js
  • 645.    export 스타일
  • 646.    " 함수별로 넘기기 " var exports = module.exports = connect.middleware; " exports.add = add; " exports.add = function(…){…} "   객체를 넘기기 function User(){ … return { add: add, getTotal: getTotal, login: login } } exports.User = new User();
  • 647. 76
  • 648.   /
  • 649.   Node.js
  • 650.    NPM
  • 651.   (Node
  • 652.   Package
  • 653.   Manager)
  • 654.    "   search.npmjs.org "   기본 명령어 " npm help <command> " npm install <pkg> " npm install express@latest " npm install express@1.5 " npm install express@">=1.5 <1.9" " npm search " npm uninstall "   -g
  • 655. 77
  • 656.   /
  • 657.   Node.js
  • 658.    Package
  • 659.    " package.json " https://github.com/isaacs/npm/blob/master/ package.json "   semver.org
  • 660. 78
  • 661.   /
  • 662.   Node.js
  • 663.    Assertion Testing
  • 664.    "   Assert " assert.fail(actual, expected, message, operator) "   assert(value, message), assert.ok(value, [message]) " assert.equal(actual, expected, [message]) " assert.notEqual(actual, expected, [message]) " assert.deepEqual(actual, expected, [message]) " assert.notDeepEqual(actual, expected, [message]) " assert.strictEqual(actual, expected, [message]) " assert.notStrictEqual(actual, expected, [message]) " assert.throws(block, [error], [message]) " assert.doesNotThrow(block, [error], [message]) " assert.ifError(value)
  • 665. 79
  • 666.   /
  • 667.   Node.js
  • 668.    실습
  • 669.    "   특정 폴더의 File 개수와 파일 size 합 구하기 (test 만들기)
  • 670. 80
  • 671.   /
  • 672.   Node.js
  • 673.    유용한 모듈들
  • 674.    "   underscore.js "   step " async "   mocha " winston " jake
  • 675. 81
  • 676.   /
  • 677.   Node.js
  • 678.    Step
  • 679.   #4 Lessons Learned & Tips
  • 680. 82
  • 681.   /
  • 682.   Node.js
  • 683.    어려운 점들
  • 684.    "   Language Spec "   ECMA Script 3, 5 "   Language defects "   (0.1 + 0.2) == 0.3 "   var n = [4, 8, 15, 16, 23, 42] " n.sort() "   Development tools
  • 685. 83
  • 686.   /
  • 687.   Node.js
  • 688.    Lessons
  • 689.   Learned
  • 690.    "   테스트를 잘 만들 것! "   Make test cases "   대각선을 늘리지 말 것! " 콜백을 잘 가려 쓸 것! "   Only use for I/O functions "   Timing Problems "   Blocking callback을 쓰는 건 바보짓! "   왜?
  • 691. 84
  • 692.   /
  • 693.   Node.js
  • 694.    Lessons
  • 695.   Learned
  • 696.    "   변수는 항상 함수 시작부분에서 선언할 것 " Javascript convention을 잘 지킬 것!
  • 697. 85
  • 698.   /
  • 699.   Node.js
  • 700.    서버사이드와 클라이언트 사이드를 함께 쓰려면...
  • 701.    " module.export 처리 if (typeof module !== 'undefined' && module.exports) { module.exports = hello; }
  • 702. 86
  • 703.   /
  • 704.   Node.js
  • 705.    tips
  • 706.    § 
  • 707.   한번만
  • 708.   로드된다.
  • 709.    § 
  • 710.   따라서
  • 711.   재기동을
  • 712.   해야
  • 713.   모듈이
  • 714.   새로
  • 715.   반영된다.
  • 716.    § 
  • 717.   캐시를
  • 718.   지우면
  • 719.   되지만
  • 720.   개발때
  • 721.   이외에는
  • 722.   사용금지
  • 723.    § 
  • 724.   event-loop
  • 725.   clock
  • 726.   time으로
  • 727.   한
  • 728.   타임
  • 729.   뒤로
  • 730.   작업을
  • 731.   미룬다.
  • 732.    § 
  • 733.   heavy한
  • 734.   일을
  • 735.   처리할
  • 736.   때
  • 737.   전체
  • 738.   작업이
  • 739.   멈추는
  • 740.   일이
  • 741.   없게
  • 742.   하려면
  • 743.   꼭
  • 744.   써야함
  • 745.    § 
  • 746.   setTimeout(
  • 747.   callback,
  • 748.   0
  • 749.   )보다
  • 750.   효율이
  • 751.   좋음!
  • 752.   
  • 753. 87
  • 754.   /
  • 755.   Node.js
  • 756.    tips
  • 757.    var
  • 758.   name
  • 759.   =
  • 760.   o
  • 761.   &&
  • 762.   o.getName();
  • 763.    var
  • 764.   name
  • 765.   =
  • 766.   otherName
  • 767.   ||
  • 768.   "default";
  • 769.    switch(a)
  • 770.   {
  • 771.    
  • 772.   
  • 773.   
  • 774.   
  • 775.   case
  • 776.   1:
  • 777.   //
  • 778.   fallthrough
  • 779.    
  • 780.   
  • 781.   
  • 782.   
  • 783.   case
  • 784.   2:
  • 785.    
  • 786.   
  • 787.   
  • 788.   
  • 789.   
  • 790.   
  • 791.   
  • 792.   
  • 793.   eatit();
  • 794.    
  • 795.   
  • 796.   
  • 797.   
  • 798.   
  • 799.   
  • 800.   
  • 801.   
  • 802.   break;
  • 803.    
  • 804.   
  • 805.   
  • 806.   
  • 807.   default:
  • 808.    
  • 809.   
  • 810.   
  • 811.   
  • 812.   
  • 813.   
  • 814.   
  • 815.   
  • 816.   donothing();
  • 817.    }
  • 818.   
  • 819. 88
  • 820.   /
  • 821.   Node.js
  • 822.    tips
  • 823.    for
  • 824.   (var
  • 825.   i
  • 826.   =
  • 827.   0;
  • 828.   i
  • 829.   <
  • 830.   a.length;
  • 831.   i++)
  • 832.   {
  • 833.    
  • 834.   
  • 835.   
  • 836.   
  • 837.   ...
  • 838.    }
  • 839.    console.log(i);
  • 840.    -
  • 841.   만약
  • 842.   debugger
  • 843.   명령어로
  • 844.   debug가
  • 845.   잘
  • 846.   안될때는
  • 847.   --debug-brk
  • 848.   옵션을
  • 849.   사용한다.
  • 850.    -
  • 851.   메모리
  • 852.   Leak의
  • 853.   위험이
  • 854.   크다.
  • 855.   이벤트
  • 856.   등록/해제를
  • 857.   잘
  • 858.   해주어야
  • 859.   한다.
  • 860.   
  • 861. 89
  • 862.   /
  • 863.   Node.js
  • 864.    tips
  • 865.    if
  • 866.   (typeof
  • 867.   module
  • 868.   !==
  • 869.   'undefined'
  • 870.   &&
  • 871.   module.exports)
  • 872.   {
  • 873.    
  • 874.   
  • 875.   module.exports
  • 876.   =
  • 877.   _;
  • 878.    }
  • 879.    
  • 880.   var
  • 881.   exports
  • 882.   =
  • 883.   module.exports
  • 884.   =
  • 885.   Emailer
  • 886.    -
  • 887.   크롬은
  • 888.   favicon을
  • 889.   찾기위해
  • 890.   따로
  • 891.   request를
  • 892.   보낸다.
  • 893.   
  • 894. 90
  • 895.   /
  • 896.   Node.js
  • 897.    tips
  • 898.    -local
  • 899.   variable,
  • 900.   cached
  • 901.    -
  • 902.   module.exports
  • 903.   ===
  • 904.   exports
  • 905.    -
  • 906.   Core
  • 907.   modules
  • 908.    -
  • 909.   File
  • 910.   modules
  • 911.    
  • 912.   
  • 913.   .js,
  • 914.   .json,
  • 915.   .node
  • 916.    
  • 917.    -
  • 918.   async를
  • 919.   쓸거면
  • 920.   node.js를
  • 921.   왜쓰니?
  • 922.   라고
  • 923.   말
  • 924.   할
  • 925.   수도
  • 926.   있지만,
  • 927.    생각보다
  • 928.   많은
  • 929.   경우
  • 930.   sync
  • 931.   메소드가
  • 932.   유리할때가
  • 933.   있다.
  • 934.    특히
  • 935.   timming
  • 936.   문제의
  • 937.   경우.
  • 938.    
  • 939.   
  • 940. 91
  • 941.   /
  • 942.   Node.js
  • 943.    tips
  • 944.   
  • 945. 92
  • 946.   /
  • 947.   Node.js
  • 948.    tips
  • 949.    node
  • 950.   -e
  • 951.   'console.log(require("fs").watch+"")'
  • 952.    var
  • 953.   getUser
  • 954.   =
  • 955.   function(
  • 956.   name,
  • 957.   callback)
  • 958.   {
  • 959.    
  • 960.   
  • 961.   
  • 962.   
  • 963.   …⋯
  • 964.    
  • 965.   
  • 966.   
  • 967.   
  • 968.   callback(err,
  • 969.   data
  • 970.   );
  • 971.    }
  • 972.   
  • 973. 93
  • 974.   /
  • 975.   Node.js
  • 976.    tips
  • 977.    -
  • 978.   getter/setter
  • 979.    
  • 980.   
  • 981.   
  • 982.   see
  • 983.   codes
  • 984.    
  • 985.    -
  • 986.   Object.preventExtentions(object)
  • 987.    -
  • 988.   Object.seal(object):
  • 989.   configurable
  • 990.   bits
  • 991.   off
  • 992.    -
  • 993.   Object.freeze(object):
  • 994.   writeable
  • 995.   bits
  • 996.   off,
  • 997.   결과적으로
  • 998.   immutable을
  • 999.   만들수
  • 1000.   있다.
  • 1001.    
  • 1002.   
  • 1003. 94
  • 1004.   /
  • 1005.   Node.js
  • 1006.    Day 2 <예고> - more deep inside of node.js - c/c++ native binding - useful modules - working practices