{"id":889,"date":"2012-06-07T15:46:19","date_gmt":"2012-06-07T15:46:19","guid":{"rendered":"http:\/\/brain.dailyon.net\/?p=889"},"modified":"2012-06-07T15:46:19","modified_gmt":"2012-06-07T15:46:19","slug":"node-js-review","status":"publish","type":"post","link":"https:\/\/blog.goorigo.com\/?p=889","title":{"rendered":"Node JS Review"},"content":{"rendered":"<p>\ucd9c\ucc98 \ud83d\ude15<a href=\"http:\/\/jjeong.tistory.com\/624\">http:\/\/jjeong.tistory.com\/624<\/a><\/p>\n<p>Node.js \uc5d0 \ub300\ud574 \uc27d\uac8c \uc811\uadfc \ud560 \uc218 \uc788\ub3c4\ub85d \uc815\ub9ac\ub41c \ube14\ub85c\uadf8 \ubb38\uc11c\uac00 \uc788\uc5b4 \uacf5\uc720 \ud569\ub2c8\ub2e4.<\/p>\n<p>[\uc6d0\ubcf8\ubb38\uc11c]<\/p>\n<div>\n<p><a href=\"http:\/\/blog.outsider.ne.kr\/480\">http:\/\/blog.outsider.ne.kr\/480<br \/>\n<\/a><a href=\"http:\/\/blog.outsider.ne.kr\/481\">http:\/\/blog.outsider.ne.kr\/481<\/a><\/p>\n<\/div>\n<div>\n<p>\uadf8\ub3d9\uc548 \ubd10\uc57c\uc9c0 \ubd10\uc57c\uc9c0 \ud558\ub358 Node.js\ub97c \uc774\uc81c\uc57c \ubcf4\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uac04\ub2e8\ud788 \ub9d0\ud558\uba74?Node.js\ub294 \uc11c\ubc84\uc0ac\uc774\ub4dc\uc5d0\uc11c \ub3d9\uc791\uc774 \uac00\ub2a5\ud55c Javascript\uc774\uc9c0\ub9cc \ubcf4\ud1b5 \uc11c\ubc84\uc0ac\uc774\ub4dc \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\ub77c\uace0 \ud558\uba74 \uc0dd\uac01\ud560\ub9cc\ud55c\uac74 runat=&#8221;server&#8221;\uac19\uc740 \uc218\uc900\uc758 \uc11c\ubc84\uc0ac\uc774\ub4dc \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\uc640\ub294 \ucc28\uc6d0\uc790\uccb4\uac00 \ub2e4\ub985\ub2c8\ub2e4.\ub610\ud55c Jaxer\ub098 Narwhar\uac19\uc740 \uc11c\ubc84\uc2a4\ud06c\ub9bd\ud2b8 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud658\uacbd\ub3c4 \uc874\uc7ac\ud558\uc9c0\ub9cc Node.js\ub294 \uc57d\uac04 \ub2e4\ub985\ub2c8\ub2e4. \uc6d0\ub798\ub294 nettues+\uc758?<a href=\"http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/learning-serverside-javascript-with-node-js\/\" target=\"_blank\">Learning Server-Side JavaScript with Node.js<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/learning-serverside-javascript-with-node-js\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\ub97c \ub530\ub77c\ud558\uba74\uc11c \ud3ec\uc2a4\ud305\uc744 \ud558\ub824\uace0 \ud558\uc600\uc9c0\ub9cc Node.js\ub97c \ub9cc\ub4e0?<a href=\"http:\/\/tinyclouds.org\/\" target=\"_blank\">Ryan Dahl<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/tinyclouds.org\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uac00?<a href=\"http:\/\/jsconf.us\/2009\/\" target=\"_blank\">JSConf 2009<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/jsconf.us\/2009\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc5d0\uc11c \ubc1c\ud45c\ud55c \ub3d9\uc601\uc0c1\uc744 \ubcf4\ub294 \uac83\uc774 \ud6e8\uc52c \uc774\ud574\ud558\uae30\uac00 \uc88b\uc544\uc11c Ryan Dahl\uc758 \ubc1c\ud45c\uc601\uc0c1\uc744 \ub9c1\ud06c\ud569\ub2c8\ub2e4.<\/p>\n<div>\nRyan Dahl: Node.js<\/div>\n<p>\ub3d9\uc601\uc0c1\uc5d0 \ub098\uc624\ub294 \ubc1c\ud45c\uc790\ub8cc\ub294 \uae00\uc790\uac00 \uc798 \ubcf4\uc774\uc9c0 \uc54a\uc544\uc11c Scribd\uc5d0 \uc62c\ub77c\uc640 \uc788\ub294 \ubc1c\ub8cc\uc790\ub8cc\uc785\ub2c8\ub2e4. (JSConf\uc815\ub3c4 \ud589\uc0ac\uc5d0 node.js\uac19\uc740 \ud504\ub85c\uc81d\ud2b8\ub97c \ub4e4\uace0 \ub098\uc624\ub294 \uc0ac\ub78c\uc774 \ud5e4\uc838\uc11c \uae00\uc790\ub3c4 \uc798 \ubcf4\uc774\uc9c0 \uc54a\ub294 \ub098\uc774\ud0a4\ud2f0\uc154\uce20\ub97c \uac78\uce58\uace0 \ub098\uc640\uc11c \ud55c\ub2e4\ub294 \uac83\uc774 \uc7ac\ubc0c\uae30\ub3c4 \ud558\ub124\uc694.)<\/p>\n<p><a title=\"View Node.js JSConf 2009 on Scribd\" href=\"http:\/\/www.scribd.com\/doc\/23801896\/Node-js-JSConf-2009\">Node.js JSConf 2009<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/www.scribd.com\/doc\/23801896\/Node-js-JSConf-2009\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a><\/p>\n<p>Node.js\ub294 \uc11c\ubc84\uc0ac\uc774\ub4dc \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\uc774\uba70 Google\uc758 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \uc5d4\uc9c4\uc778 V8\uc774 \ube4c\ud2b8\uc778\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. Event \uae30\ubc18\uc774\uba70 non-blocking I\/O\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\uc758 \ud45c\uc900\ub77c\uc774\ube0c\ub7ec\ub9ac \ud504\ub85c\uc81d\ud2b8\uc778?<a href=\"http:\/\/commonjs.org\/\" target=\"_blank\">CommonJS<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/commonjs.org\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc758\ubaa8\ub4c8\uc2dc\uc2a4\ud15c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/p>\n<p>Apache\uac19\uc740 \uc6f9\uc11c\ubc84\ub4e4\uc740 \ubaa8\ub4e0 \uc694\uccad\ub9c8\ub2e4 \uc2dc\uc2a4\ud15c \uc4f0\ub808\ub4dc\ub97c \uc0dd\uc131\ud558\ub294 \uc4f0\ub808\ub4dc \uae30\ubc18\uc774\uace0 \ub300\ubd80\ubd84\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc798 \ub3d9\uc791\ud558\uc9c0\ub9cc Friendfeed\ub098 Google Wave\uac19\uc740 \ub9ac\uc5bc\ud0c0\uc784 \uc560\ud50c\ub9ac\ucf00\uc774\uc158\ucc98\ub7fc \ub9ce\uc740 long-lived\ucee4\ub125\uc158\uc744 \uc0ac\uc6a9\ud558\ub294 \uc560\ud074\ub9ac\ucf00\uc774\uc158\uc5d0\ub294 \uc801\ud569\ud558\uc9c0 \uc54a\uace0 \ud655\uc7a5(scale)\ud558\uae30\uac00 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.?\uc704 \ud504\ub9ac\uc820\ud14c\uc774\uc158\uc5d0\uc11c Apache\uc640 NGINX\ub97c \ube44\uad50\ud55c \uadf8\ub798\ud504\ub97c \ubcf4\uba74 \uc4f0\ub808\ub4dc\uae30\ubc18\uc778 Apache\ub294 \uc694\uccad\uc774 \ub298\uc5b4\ub0a0\uc218\ub85d \uba54\ubaa8\ub9ac\uac00 \uc99d\uac00\ud558\uc9c0\ub9cc NGINX\ub294 \uc9c1\uc120\uc744 \uc720\uc9c0\ud558\ub294 \uac83\uc744 \ubcfc \uc218\uac00 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub294 NGINX\ub294 Event Loop\ub97c \uc0ac\uc6a9\ud558\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7f0 \uc4f0\ub808\ub4dc\uae30\ubc18\uc758 \ubb38\uc81c\ub97c?Event Loop\ub97c \uc774\uc6a9\ud558\uba74 \ud574\uacb0\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.(\uc5ec\uae30\uc11c Event Loop\ub77c\ub294 \uac83\uc740 \ub3d9\uc791\uc744 \uc694\uccad\ud55c\ub4a4\uc5d0 \ucf5c\ubc31\uc744 \uc9c0\uc815\ud558\uc5ec \ub3d9\uc791\uc774 \uc644\ub8cc\ub418\uba74 \ucf5c\ubc31\uc774 \uc2e4\ud589\ub418\ub294 \ubc29\uc2dd\uc744 \ubc1c\ud569\ub2c8\ub2e4.) \uadf8\ub7fc \uc65c \ubaa8\ub450\uac00 Event Loop\ub97c \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294\uac00\ud558\ub294 \uc758\ubb38\uc774 \uc0dd\uae41\ub2c8\ub2e4.<\/p>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile3.uf.tistory.com\/original\/196C8A3D4F62ECE813169E\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile3.uf.tistory.com\/image\/196C8A3D4F62ECE813169E\" alt=\"\" width=\"420\" height=\"111\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>Ryan Dahl\uc740 \ubb38\ud654\uc801\uc778(Cultural) \uc774\uc720\uc640 \uad6c\uc870\uc801(infrastructural)\uc778 \uc774\uc720 2\uac00\uc9c0\uac00 \uc788\ub2e4\uace0 \uc0dd\uac01\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ubb38\ud654\uc801\uc778 \uc774\uc720\ub294 \uc6b0\ub9ac\uac00 \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \ubc30\uc6b8\ub54c \uc778\ud48b\uc744 \uc694\uccad\ud558\uba74 \uc694\uccad\ud55c \uc778\ud48b\uc744 \ubc1b\uc744\ub54c\uae4c\uc9c0 \uc544\ubb34\uac83\ub3c4 \ud558\uc9c0 \ub9d0\ub77c\uace0 \ubc30\uc6e0\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/480#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<\/td>\n<td>\n<div>\n<div><code>puts(<\/code><code>\"Enter your name: \"<\/code><code>);<\/code><\/div>\n<div><code>var<\/code> <code>name = gets();<\/code><\/div>\n<div><code>puts(<\/code><code>\"Name: \"<\/code> <code>+ name);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\uc704 \ucf54\ub4dc\ub294 \uc778\ud48b\uc744 \ubc1b\uc544\uc11c \ucd9c\ub825\ud558\ub294 \uc775\uc219\ud55c \ucf54\ub4dc\uc785\ub2c8\ub2e4. \uc778\ud48b\uc774 \ub4e4\uc5b4\uc62c\ub54c\uae4c\uc9c0 \uc544\ubb34\uac83\ub3c4 \ud589\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/480#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<\/td>\n<td>\n<div>\n<div><code>puts(<\/code><code>\"Enter your name: \"<\/code><code>);<\/code><\/div>\n<div><code>gets(<\/code><code>function<\/code><code>(name) {<\/code><\/div>\n<div><code>??? <\/code><\/div>\n<div><code>puts(<\/code><code>\"Name: \"<\/code> <code>+ name);<\/code><\/div>\n<div><code>});<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\uc774\ubca4\ud2b8 \ub8e8\ud504\ubc29\uc2dd\uc778 \uc704\uc640\uac19\uc740 \ucf54\ub4dc\ub294 \ubcf5\uc7a1\ud558\ub2e4\ub294 \uc774\uc720\ub85c \uac70\ubd80\ub418\uc5b4 \uc654\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uad6c\uc870\uc801\uc778 \uc774\uc720\ub294 \uc2f1\uae00\uc4f0\ub808\ub4dc\uc774\ubca4\ud2b8 \ub8e8\ud504\ub294 \ub17c\ube14\ub7ed\ud0b9 I\/O\ub97c \uc694\uad6c\ud558\uc9c0\ub9cc \ub300\ubd80\ubd84\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc740 \uadf8\ub807\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4.?POSIX I\/O\ub098 DB\ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc740 \ube44\ub3d9\uae30\uc694\uccad\uc744 \uc9c0\uc6d0\ud558\uc9c0 \uc54a\uc558\uc2b5\ub2c8\ub2e4. \ud558\uc9c0\ub9cc \ud604\uc7ac\ub294 EventMachine, Twisted\ub4f1 \uc88b\uc740 \uc774\ubca4\ud2b8\ub8e8\ud504 \ud50c\ub7ab\ud3fc\uc774 \uc874\uc7ac\ud558\uace0 \uc788\uc9c0\ub9cc \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc5b4\ub5bb\uac8c \ub2e4\ub978 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uacfc \uc774\uac83\ub4e4\uc740 \uc870\ud569\ud560\uc218 \uc788\uc744\uc9c0 \ud63c\ub780\uc2a4\ub7ec\uc6cc \ud558\uace0 \uc788\uc73c\uba70 \uc11c\ubc84\uc0ac\uc774\ub4dc \uac1c\ubc1c\uc790\ub4e4\uc740 \uc774\ubca4\ud2b8 \ub8e8\ud504\uc640 \ub10c\ube14\ub77d\ud0b9 I\/O\uc5d0 \ub300\ud55c \uc9c0\uc2dd\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc Javascript\ub294 Event Loop\ub97c \uc0ac\uc6a9\ud558\ub3c4\ub85d \ub514\uc790\uc778\ub418\uc5b4 \ube44\ub3d9\uae30 \ud391\uc158\uacfc \ud074\ub85c\uc838\ub97c \uc9c0\uc6d0\ud558\uace0 \ud55c\ubc88\uc5d0 \ud558\ub098\uc758 \ucf5c\ubc31\ub9cc \uc2e4\ud589\ud558\uba70 DOM \uc774\ubca4\ud2b8 \ucf5c\ubc31\uc744 \ud1b5\ud55c I\/O\ub97c \uc9c0\uc6d0\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ub354\uad70\ub2e4\ub098 \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8\uc758 \ubb38\ud654\ub294 \uc774\ubbf8 \uc774\ubca4\ud2b8\uae30\ubc18\uc758 \ud504\ub85c\uadf8\ub798\ubc0d\uc5d0 \uc775\uc219\ud574\uc838 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">Design Goal<\/span><\/p>\n<ul>\n<li>Function\uc740 \uc9c1\uc811 \ud50c\ub7ab\ud3fc I\/O\uc5d0 \uc811\uc18d\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/li>\n<li>Disk, network, \ud504\ub85c\uc138\uc2a4\ub97c \ud1b5\ud574 \ub370\uc774\ud130\ub97c \ubc1b\uae30 \uc704\ud574\uc11c\ub294?\ubc18\ub4dc\uc2dc \ucf5c\ubc31(callback)\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.?? \ucf5c\ubc31\uc744 \uc0ac\uc6a9\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. (\ud568\uc218\uba85sync()\ub77c\ub294 \ud568\uc218\ub4e4\uc774 \uc81c\uacf5\ub418\uace0 \uc788\ub2e4\ub294 AJ\ub2d8\uc758 \uc81c\ubcf4\uc5d0 \ub530\ub77c \uc218\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc704 PT\uc758 28\ud398\uc774\uc9c0\uc5d0 must be\ub77c\ub294 \ud45c\ud604\uc73c\ub85c \ubcf4\uc544 \ubcf4\ud1b5\uc758 \uacbd\uc6b0 callback\uc744 \uad8c\uc7a5\ud558\ub294 \uac83\uc73c\ub85c \ucd94\uce21(?)\ub429\ub2c8\ub2e4.)<\/li>\n<li>TCP, DNS, HTTP\uac19\uc740 \ud504\ub85c\ud1a0\ucf5c\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4.<\/li>\n<li>HTTP feature\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4.(Chunk\ub41c requst\/response, Keep-alive, Comet\uc744 \uc704\ud55c \ub9ac\ud018\uc2a4\ud2b8 \ud640\ub529<\/li>\n<li>\ud074\ub77c\uc774\uc5b8\ud2b8 \uc0ac\uc774\ub4dc \uc790\ubc14\uc2a4\ud06c\ub9bd\ud2b8 \ud504\ub85c\uadf8\ub798\ubc0d\uacfc \uacfc\uac70 \ud559\uc0dd\ub54c \ubc30\uc6b4 Unix \uc2a4\ud0c0\uc77c\uc5d0 \uce5c\uc219\ud558\uac8c \ub514\uc790\uc778\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p><span style=\"font-size: large\">Internal Design<\/span><\/p>\n<ul>\n<li>Google\uc758?V8?\uc0ac\uc6a9<\/li>\n<li>Marc Lehmann\uc774 \ub9cc\ub4e0 \uc774\ubca4\ud2b8\ub8e8\ud504 \ub77c\uc774\ube0c\ub7ec\ub9ac?libev?\uc0ac\uc6a9<\/li>\n<li>Marc Lehmann\uc774 \ub9cc\ub4e0 \uc4f0\ub808\ub4dc\ud480 \ub77c\uc774\ube0c\ub7ec\ub9ac?libeio?\uc0ac\uc6a9<\/li>\n<li>Ryan Dahl\uc774 \ub9cc\ub4e0 HTTP\ud30c\uc11c?http-parser?\uc0ac\uc6a9<\/li>\n<li>Ryan Dahl\uc774 \ub9cc\ub4e0 libev\uc5d0 \uae30\ubc18\ud55c \uc2a4\ud06c\ub9bc \uc18c\ucf13 \ub77c\uc774\ube0c\ub7ec\ub9ac?evcom?\uc0ac\uc6a9<\/li>\n<li>Michael Tokarev\uac00 \ub9cc\ub4e0 \ub10c\ube14\ub7ed\ud0b9 DNS resolver?udns?\uc0ac\uc6a9<\/li>\n<\/ul>\n<p>\ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740?<a href=\"http:\/\/ajaxian.kr\/2010\/05\/15\/core-perspective-to-nodejs\/\" target=\"_blank\">AJ\ub2d8\uc758 core perspective to node.js<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/ajaxian.kr\/2010\/05\/15\/core-perspective-to-nodejs\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\ub97c \ucc38\uace0\ud558\uc2dc\uba74 \ub3c4\uc6c0\uc774 \ub420 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud3ec\uc2a4\ud305\uc740?<a href=\"http:\/\/blog.outsider.ne.kr\/481\" target=\"_blank\">node.js\ub294 \ubb34\uc5c7\uc778\uac00? #2 : Hello World \uc2e4\ud589\ud558\uae30<\/a>\ub85c \uc774\uc5b4\uc9d1\ub2c8\ub2e4.&nbsp;<\/p>\n<\/div>\n<div>\n<p>\uc774 \ud3ec\uc2a4\ud305\uc740<a href=\"http:\/\/blog.outsider.ne.kr\/480\" target=\"_blank\">?node.js\ub294 \ubb34\uc5c7\uc778\uac00? #1<\/a>\uc5d0 \uc774\uc5b4\uc9c4 \ud3ec\uc2a4\ud305\uc785\ub2c8\ub2e4.<\/p>\n<p>Hello World\uc5d0 \ub300\ud55c \uc608\uc81c\ub294 \uc5ec\ub7ec\uac00\uc9c0\uac00 \uc788\uc9c0\ub9cc \uc544\ubb34\ub798\ub3c4 node.js\ub97c \ub9cc\ub4e0 Ryan Dahl\uac00 \ubcf4\uc5ec\uc900 \uc608\uc81c\uac00 node.js\ub97c \uac00\uc7a5 \uc798 \ud45c\ud604\ud574 \uc8fc\ub294\uac83 \uac19\uc544\uc11c Ryan Dahl\uac00 JSConf\uc5d0 \uc0ac\uc6a9\ud55c Hello World \uc608\uc81c\ub97c \uadf8\ub300\ub85c \uc0ac\uc6a9\ud558\uc600\uc2b5\ub2c8\ub2e4. nettuse+\uc758?<a href=\"http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/learning-serverside-javascript-with-node-js\/\" target=\"_blank\">Learning Server-Side JavaScript with Node.js<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/net.tutsplus.com\/tutorials\/javascript-ajax\/learning-serverside-javascript-with-node-js\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc5d0 \ub098\uc628 \uc18c\uc2a4\ub3c4 \ucc38\uace0\ud558\uc2dc\uba74 \ub3c4\uc6c0\uc774 \ub420 \ub4ef \ud569\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">Node.js \uc124\uce58\ud558\uae30<\/span><br \/>\nNode.js\ub294 Mac OS X, Linux, FreeBSD\uac19\uc740 Unix\uae30\ubc18\uc758 \uc2dc\uc2a4\ud15c\uc5d0\uc11c\ub9cc \uad6c\ub3d9\ub429\ub2c8\ub2e4.?(\ucd5c\uadfc Windows\ucabd\uc5d0\uc11c\ub3c4 \ud560 \uc218\uc787\ub2e4\ub290 \ud3ec\uc2a4\ud305\uc744 \ubcf8\uc801\uc774 \uc788\ub294\uac83 \uac19\uc740\ub370 \uc9c0\uae08\uc740 \ucc3e\uc744? \uc218 \uc5c6\ub124\uc694.)?Node.js v0.6.x\ubd80\ud130\ub294 Windows\uc5d0\uc11c\ub3c4 \ub3d9\uc791\ud569\ub2c8\ub2e4.<\/p>\n<p>node.js\ub97c \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc2b5\ub2c8\ub2e4.?node.js \uacf5\uc2dd\uc0ac\uc774\ud2b8\uc5d0\uc11c?<a href=\"http:\/\/nodejs.org\/#download\" target=\"_blank\">\ucd5c\uc2e0 \ub9b4\ub9ac\uc988\ubc84\uc804\uc744 \ub2e4\uc6b4\ub85c\ub4dc<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/nodejs.org\/#download\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\ub97c \ubc1b\uc744 \uc218 \uc788\uc73c\uba70 \ud604\uc7ac \ubc84\uc804\uc740 0.1.97\uc785\ub2c8\ub2e4. \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uc740 \ud30c\uc77c\uc744 \uc6d0\ud558\ub294 \uc704\uce58\uc5d0 \uc555\ucd95\uc744 \ud480\uba74 \ub429\ub2c8\ub2e4. Node.js\ub294?<a href=\"http:\/\/github.com\/ry\/node\" target=\"_blank\">GITHUB<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/github.com\/ry\/node\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc5d0\uc11c \uc800\uc7a5\uc18c\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\uae30 \ub54c\ubb38\uc5d0 GIT\uc744 \uc774\uc6a9\ud574\uc11c?git clone http:\/\/github.com\/ry\/node.git?\uba85\ub839\uc5b4\uc744 \uc0ac\uc6a9\ud558\uba74 \ud604\uc7ac \uac1c\ubc1c\uc911\uc778 \ucd5c\uc2e0\uc18c\uc2a4\ub97c \ubc1b\uc544\uc11c \ud14c\uc2a4\ud2b8 \ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>node.js\uac00 \uc18c\uc2a4\uac00 \uc788\ub294 \ud3f4\ub354\ub85c \uc774\ub3d9\ud558\uc5ec \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4.<\/p>\n<div><span style=\"font-size: small\">.\/configure<br \/>\nmake<br \/>\nsudo make install<\/span><\/div>\n<p>\uc124\uce58\ud560\ub54c \uac01 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uccb4\ud06c\ud558\ub294\ub370 \ub2e8\uc21c\ud788 \ud604\uc7ac \uc2dc\uc2a4\ud15c\uc5d0 \uc9c0\uc6d0\uc5ec\ubd80\ub97c \uccb4\ud06c\ud558\ub294 \uac83\uc774\ubbc0\ub85c not found\ub77c\uace0 \ub098\uc640\ub3c4 \ubb38\uc81c\uac00 \uc788\ub294 \uac83\uc774 \uc544\ub2c8\ubbc0\ub85c \uc2e0\uacbd\uc4f0\uc9c0 \uc54a\uc544\ub3c4 \ub429\ub2c8\ub2e4. (.\/configure\ub97c \ud558\uc9c0 \uc54a\uc73c\uba74 Project not configured \uc624\ub958\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.)<\/p>\n<p>Node.js\ub97c \uc2e4\ud589\ud558\uae30 \uc704\ud574\uc11c\ub294 Node.js\uc758 node\uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\uae30 \ub54c\ubb38\uc5d0 \ud658\uacbd\ubcc0\uc218 path\uc5d0 node.js\uac00 \uc124\uce58\ub41c \uacbd\ub85c(\/Users\/Outsider\/node \uac19\uc740)\ub97c \ucd94\uac00\ud558\uba74 \uc544\ubb34\ub370\uc11c\ub098 node\uba85\ub839\uc5b4\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.(\uc6b0\ubd84\ud22c\uc5d0\uc11c\ub294?sudo gedit \/etc\/environment\ub85c OSX\ub294?sudo vi \/etc\/paths\ub97c \uc0ac\uc6a9\ud574\uc11c PATH\ub97c \uc218\uc815\ud574 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc218\uc815\ub41c PATH\ub294 \uc7ac\ub85c\uadf8\uc778 \ud6c4\uc5d0 \uc801\uc6a9\uc774 \ub418\uba70 env\ub098 echo $PATH\ub97c \uc0ac\uc6a9\ud574\uc11c \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.)?V8\uc740 \ub0b4\uc7a5\ub418\uc5b4 \uc788\uace0 \ubcc4\ub3c4\uc758 \uc758\uc874\uc131\uc774 \uc804\ud600 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uc124\uce58\ud558\uace0 \ubc14\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">Hello World \uc2e4\ud589\ud558\uae30<\/span><br \/>\n\uc544\ub798\uc758 \uc608\uc81c\ub4e4\uc740 Node.js 0.1.96\ubc84\uc804\uc744 \uc0ac\uc6a9\ud558\uc600\uc2b5\ub2c8\ub2e4. Ryan Dahl\uac00 \uc2dc\uc5f0\ud588\ub358 \ucf54\ub4dc\uc640\ub294 API\uac00 \ubcc0\uacbd\ub41c \ub0b4\uc6a9\uc774 \ub9ce\uae30 \ub54c\ubb38\uc5d0 \uc544\ub798\uc758 \uc608\uc81c\ub4e4\uc740 0.1.96\ubc84\uc804\uc5d0\uc11c \ub3d9\uc791\ud558\ub3c4\ub85d \uc218\uc815\ud558\uc600\uc2b5\ub2c8\ub2e4.<\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<\/td>\n<td>\n<div>\n<div><code>\/\/ helloworld1.js<\/code><\/div>\n<div><code>var<\/code> <code>sys = require(<\/code><code>\"sys\"<\/code><code>)<\/code><\/div>\n<div><code>setTimeout(<\/code><code>function<\/code><code>() {<\/code><\/div>\n<div><code>??? <\/code><code>sys.puts(<\/code><code>\"world\"<\/code><code>);<\/code><\/div>\n<div><code>}, 2000);<\/code><\/div>\n<div><code>sys.puts(<\/code><code>\"hello\"<\/code><code>);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>Hello World \uc608\uc81c\uc785\ub2c8\ub2e4.<\/p>\n<div>node helloworld1.js<\/div>\n<p>\uc704\uc758 \uba85\ub839\uc5b4\ub97c \uc2e4\ud589\ud558\uba74 node.js\uac00 \uc2e4\ud589\ub429\ub2c8\ub2e4.?Node.js\ub294 \ub354\uc774\uc0c1 \ud560\uc77c\uc774 \uc5c6\uc73c\uba74 \uc790\ub3d9\uc73c\ub85c \uc885\ub8cc\ub429\ub2c8\ub2e4.<\/p>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile26.uf.tistory.com\/original\/1343BA434F62ED0D37338A\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile26.uf.tistory.com\/image\/1343BA434F62ED0D37338A\" alt=\"\" width=\"405\" height=\"57\" \/><\/a><\/div>\n<p>&nbsp;\n<\/p><\/div>\n<p><span style=\"font-size: large\">Hello World \uc2e4\ud589\ud558\uae302<\/span><\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<div>7<\/div>\n<div>8<\/div>\n<div>9<\/div>\n<div>10<\/div>\n<\/td>\n<td>\n<div>\n<div><code>puts = require(<\/code><code>\"sys\"<\/code><code>).puts;<\/code><\/div>\n<div><\/div>\n<div><code>setInterval(<\/code><code>function<\/code><code>() {<\/code><\/div>\n<div><code>??? <\/code><code>puts(<\/code><code>\"hello\"<\/code><code>);<\/code><\/div>\n<div><code>}, 500);<\/code><\/div>\n<div><\/div>\n<div><code>process.addListener(<\/code><code>\"SIGINT\"<\/code><code>, <\/code><code>function<\/code><code>() {<\/code><\/div>\n<div><code>??? <\/code><code>puts(<\/code><code>\"good-bye\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>process.exit(0);<\/code><\/div>\n<div><code>});<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile29.uf.tistory.com\/original\/166C7F464F62ED271B8DEE\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile29.uf.tistory.com\/image\/166C7F464F62ED271B8DEE\" alt=\"\" width=\"410\" height=\"155\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\ub450\ubc88\uc9f8 \uc608\uc81c\uc785\ub2c8\ub2e4. setIntervla\uc744 \uc774\uc6a9\ud574\uc11c hello\ub77c\ub294 \uba54\uc2dc\uc9c0\ub97c 0.5\ucd08\ub9c8\ub2e4 \uacc4\uc18d \ubc18\ubcf5\uc801\uc73c\ub85c \ucd9c\ub825\ud574 \uc8fc\uace0 \uc885\ub8cc\uba85\ub839\uc778 Ctrl + C\ub97c \uc785\ub825\ud558\uba74 good-bye\ub77c\ub294 \uba54\uc2dc\uc9c0\ub97c \ucd9c\ub825\ud55c \ud6c4\uc5d0 \uc885\ub8cc\ud574\uc90d\ub2c8\ub2e4.?process\ub294 V8 \uadf8 \uc790\uccb4\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4. process\uc5d0 SIGINT\ub77c\ub294 \uc774\ubca4\ud2b8\ub9ac\uc2a4\ub108\ub97c \ucd94\uac00\ud558\uc5ec \ud574\ub2f9\uc2dc\uadf8\ub110\uc774 \uc654\uc744\ub54c \uc774\ubca4\ud2b8\uac00 \ubc1c\uc0dd\ud558\uac8c \ub429\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">TCP \uc11c\ubc84 \uc608\uc81c<\/span><\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<div>7<\/div>\n<div>8<\/div>\n<div>9<\/div>\n<\/td>\n<td>\n<div>\n<div><code>var<\/code> <code>tcp = require(<\/code><code>\"net\"<\/code><code>);<\/code><\/div>\n<div><\/div>\n<div><code>var<\/code> <code>s = tcp.createServer();<\/code><\/div>\n<div><code>s.addListener(<\/code><code>\"connection\"<\/code><code>, <\/code><code>function<\/code><code>(c) {<\/code><\/div>\n<div><code>??? <\/code><code>c.write(<\/code><code>\"hello!\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>c.end();<\/code><\/div>\n<div><code>});<\/code><\/div>\n<div><\/div>\n<div><code>s.listen(8000);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>TCP \uc11c\ubc84 \uc608\uc81c\uc785\ub2c8\ub2e4. 1\ubc88\ub77c\uc778\uc758 tcp\ub294 \ud604\uc7ac \ubc84\uc804\uc5d0\uc11c net\uc73c\ub85c \ubcc0\uacbd\ub418\uc5c8\uc73c\uba70 5\ubc88\ub77c\uc778\uc758 send()\ub294 write()\ub85c, 6\ubc88\ub77c\uc778\uc758 close()\ub294 end()\ub85c \ubcc0\uacbd\ub418\uc5c8\uae30 \ub54c\ubb38\uc5d0 \ud604\uc7ac \ubc84\uc804\uc5d0 \ub9de\uac8c \uc218\uc815\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile26.uf.tistory.com\/original\/1713C34F4F62ED3D174D72\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile26.uf.tistory.com\/image\/1713C34F4F62ED3D174D72\" alt=\"\" width=\"429\" height=\"209\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\uc704 \ud654\uba74\uc5d0\uc11c \ub4b7\ucabd\uc758 \ud130\ubbf8\ub110\uc5d0\uc11c TCP\uc11c\ubc84\ub97c \uc2e4\ud589\uc2dc\ucf1c\ub450\uace0 \ud130\ubbf8\ub110\uc744 \uc0c8\ub85c \ub744\uc6cc\uc11c localhost\uc5d0 TCP\uc11c\ubc84\uc5d0 \uc811\uc18d\ud55c \uac83\uc785\ub2c8\ub2e4. \uc791\uc131\ud574 \ub193\uc740\ub300\ub85c hello!\ub97c \ucd9c\ub825\ud55c \ub4a4\uc5d0 \uc811\uc18d\uc744 \uc885\ub8cc\ud569\ub2c8\ub2e4. 9\ubc88 \ub77c\uc778\uc5d0\uc11c TCP\uc11c\ubc84\ub294 8000\ud3ec\ud2b8\ub97c \uc774\uc6a9\ud558\ub3c4\ub85d \uc124\uc815\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4.?net\uac1d\uccb4\ub294 \uc811\uc18d\uc774 \ub4e4\uc5b4\uc62c\ub54c\ub9c8\ub2e4 connection\uc774\ubca4\ud2b8\ub97c \ubc1c\uc0dd\uc2dc\ud0a4\uba70 HTTP \uc5c5\ub85c\ub4dc\uac00 \ub420\ub54c \uac01 \ud328\ud0b7\ub9c8\ub2e4 body \uc774\ubca4\ud2b8\uac00 \ud638\ucd9c\ub429\ub2c8\ub2e4.<\/p>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile23.uf.tistory.com\/original\/18433C4B4F62ED56205E3F\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile23.uf.tistory.com\/image\/18433C4B4F62ED56205E3F\" alt=\"\" width=\"566\" height=\"57\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\uc544\uc9c1 \uc644\uc804\ud788 API\uac00 Fix\ub418\uc9c0 \uc54a\uc558\uae30 \ub54c\ubb38\uc5d0 \ubc84\uc804\uc5d0 \ub530\ub77c\uc11c \ubcc0\uacbd\ub418\ub294 \ub0b4\uc6a9\ub4e4\uc774 \uc788\ub294 \uc0c1\ud669\uc785\ub2c8\ub2e4.?\uc77c\uc77c\uc774 \ub2e4 \ud14c\uc2a4\ud2b8 \ud574 \ubcf8\uac83\uc740 \uc544\ub2c8\uc9c0\ub9cc \ubc84\uc804\uc5d0 \ub530\ub77c \ubcc0\uacbd\ub418\ub294 \ub0b4\uc6a9\uc774 \uc874\uc7ac\ud558\uace0 \uc788\uace0 \ubc14\ub85c\ubc14\ub85c \ubb38\uc11c\uc5d0 \ubc18\uc601\ub418\ub294 \uac83\uc740 \uc544\ub2c8\uae30 \ub54c\ubb38\uc5d0 \uc0c1\ud669\uc5d0 \ub530\ub77c\uc11c\ub294 \uc18c\uc2a4\ub97c \uc9c1\uc811 \uc5f4\uc5b4\ubcf4\uc544\uc57c \ud558\ub294 \uc0c1\ud669\uc785\ub2c8\ub2e4\ub9cc \uc704\uc758 \ud654\uba74\ucc98\ub7fc \ud604\uc7ac\ubc84\uc804\uc758 require(&#8220;sys&#8221;)\ub300\uc2e0 \uad6c\ubc84\uc804\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub358 require(&#8220;tcp&#8221;)\ub97c \uc0ac\uc6a9\ud560 \uacbd\uc6b0 &#8216;tcp&#8217;\uac00 &#8216;net&#8217;\uc73c\ub85c \ubcc0\uacbd\ub418\uc5c8\ub2e4\uace0 \uce5c\uc808\ud558\uac8c \uc54c\ub824\uc90d\ub2c8\ub2e4.<\/p>\n<p>connection\ub9ac\uc2a4\ub108\ub294 createServer\uc758 \uccab\ubc88\uc9f8 \uc544\uaddc\uba3c\ud2b8\ub85c \uc0ac\uc6a9\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc704\uc758 \ucf54\ub4dc\ub294 \uc544\ub798\ucc98\ub7fc \ubcc0\uacbd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<\/td>\n<td>\n<div>\n<div><code>var<\/code> <code>tcp = require(<\/code><code>\"net\"<\/code><code>);<\/code><\/div>\n<div><\/div>\n<div><code>?<\/code><code>tcp.createServer(<\/code><code>function<\/code><code>(c) {<\/code><\/div>\n<div><code>???? <\/code><code>c.write(<\/code><code>\"hello!n\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>c.end();<\/code><\/div>\n<div><code>?<\/code><code>}).listen(8000);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p><span style=\"font-size: large\">Simple HTTP \uc11c\ubc84 \uc608\uc81c<\/span><\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<div>7<\/div>\n<div>8<\/div>\n<\/td>\n<td>\n<div>\n<div><code>var<\/code> <code>http = require(<\/code><code>\"http\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><\/div>\n<div><code>http.createServer(<\/code><code>function<\/code><code>(req, res) {<\/code><\/div>\n<div><code>??? <\/code><code>res.writeHead(200, {<\/code><code>\"Content-Type\"<\/code><code>: <\/code><code>\"text\/plain\"<\/code><code>});<\/code><\/div>\n<div><code>??? <\/code><code>res.write(<\/code><code>\"Hellorn\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>res.write(<\/code><code>\"Worldrn\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>res.end();<\/code><\/div>\n<div><code>}).listen(8080);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile25.uf.tistory.com\/original\/16040C4D4F62ED7008206F\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile25.uf.tistory.com\/image\/16040C4D4F62ED7008206F\" alt=\"\" width=\"406\" height=\"153\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c \uc811\uc18d\ud558\uba74 \uc11c\ubc84\uc5d0\uc11c \uc791\uc131\ud55c\ub300\ub85c Hello world\uac00 \uc815\uc0c1\uc801\uc73c\ub85c \ucd9c\ub825\ub429\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">\uc2a4\ud2b8\ub9ac\ubc0d \uc11c\ubc84 \uc608\uc81c<\/span><\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<div>7<\/div>\n<div>8<\/div>\n<div>9<\/div>\n<div>10<\/div>\n<div>11<\/div>\n<div>12<\/div>\n<\/td>\n<td>\n<div>\n<div><code>var<\/code> <code>http = require(<\/code><code>\"http\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><\/div>\n<div><code>http.createServer(<\/code><code>function<\/code><code>(req, res) {<\/code><\/div>\n<div><code>??? <\/code><code>res.writeHead(200, {<\/code><code>\"Content-Type\"<\/code><code>: <\/code><code>\"text\/plain\"<\/code><code>});<\/code><\/div>\n<div><code>??? <\/code><code>res.write(<\/code><code>\"Hel\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><code>res.write(<\/code><code>\"lorn\"<\/code><code>);<\/code><\/div>\n<div><code>??? <\/code><\/div>\n<div><code>??? <\/code><code>setTimeout(<\/code><code>function<\/code><code>() {<\/code><\/div>\n<div><code>??? ? ? <\/code><code>res.write(<\/code><code>\"Worldrn\"<\/code><code>);<\/code><\/div>\n<div><code>??? ? ? <\/code><code>res.end();<\/code><\/div>\n<div><code>??? <\/code><code>}, 2000);<\/code><\/div>\n<div><code>}).listen(8000);<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile7.uf.tistory.com\/original\/19216E4E4F62ED8732C592\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile7.uf.tistory.com\/image\/19216E4E4F62ED8732C592\" alt=\"\" width=\"445\" height=\"113\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\uc6f9\ube0c\ub77c\uc6b0\uc800\uc5d0\uc11c\ub294 \uc2a4\ud2b8\ub9bc\uc744 \ube44\ub3d9\uae30\ub85c \ubc1b\uc544\uc9c0\uc9c0 \uc54a\uc544\uc11c?<a href=\"http:\/\/curl.haxx.se\/\" target=\"_blank\">curl<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/curl.haxx.se\/\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc744 \uc0ac\uc6a9\ud574\uc11c \ud14c\uc2a4\ud2b8\ud558\uc600\uc2b5\ub2c8\ub2e4. \uc811\uc18d\ud558\uba74 Hello\uac00 \ubc14\ub85c \ucc0d\ud78c\ub4a4 setTimeout\uc73c\ub85c \uc124\uc815\ud55c\ub300\ub85c 2\ucd08\ub4a4\uc5d0 World\uac00 \ucd9c\ub825\ub418\uace0 \uc811\uc18d\uc774 \uc885\ub8cc\ub429\ub2c8\ub2e4.<\/p>\n<p><span style=\"font-size: large\">node.js\uc758 \uc2dc\uc2a4\ud15c \uc811\uadfc \uc608\uc81c<\/span><\/p>\n<div>\n<div>\n<div><a href=\"http:\/\/blog.outsider.ne.kr\/481#\">?<\/a><\/div>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>\n<div>1<\/div>\n<div>2<\/div>\n<div>3<\/div>\n<div>4<\/div>\n<div>5<\/div>\n<div>6<\/div>\n<div>7<\/div>\n<div>8<\/div>\n<\/td>\n<td>\n<div>\n<div><code>var<\/code> <code>sys = require(<\/code><code>\"sys\"<\/code><code>),<\/code><\/div>\n<div><code>??? <\/code><code>spawn = require(<\/code><code>\"child_process\"<\/code><code>).spawn;<\/code><\/div>\n<div><\/div>\n<div><code>var<\/code> <code>ls = spawn(<\/code><code>\"ls\"<\/code><code>, [<\/code><code>\"-ls\"<\/code><code>, <\/code><code>\"\/\"<\/code><code>]);<\/code><\/div>\n<div><\/div>\n<div><code>ls.stdout.addListener(<\/code><code>\"data\"<\/code><code>, <\/code><code>function<\/code><code>(data) {<\/code><\/div>\n<div><code>??? <\/code><code>sys.print(data);<\/code><\/div>\n<div><code>});<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<div>\n<p>&nbsp;<\/p>\n<div><a href=\"http:\/\/cfile23.uf.tistory.com\/original\/2012E84F4F62ED9E1A5612\" rel=\"lightbox\" target=\"_blank\"><img loading=\"lazy\" src=\"http:\/\/cfile23.uf.tistory.com\/image\/2012E84F4F62ED9E1A5612\" alt=\"\" width=\"600\" height=\"328\" \/><\/a><\/div>\n<p>&nbsp;<\/p>\n<\/div>\n<p>\uc704 \uc608\uc81c\ub294 \uc2dc\uc2a4\ud15c\uc5d0 \uc811\uadfc\ud558\ub294 \uc608\uc81c\uc785\ub2c8\ub2e4. ls -ls \/\uc744 \uc2e4\ud589\ud558\uc5ec \uadf8 \uacb0\uacfc\ub97c \ucd9c\ub825\ud558\uc5ec\uc90d\ub2c8\ub2e4. Node.js\ub294 \uc55e\uc5d0\uc11c\ub3c4 \uc5b8\uae09\ud588\ub4e0\uc774 \ubc84\ud37c\ub9c1\uc744 \uac15\uc81c\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. data\ub97c child process\uc758 STDIO\ub97c \ud1b5\ud574\uc11c \uc2a4\ud2b8\ub9bc\ud558\ub3c4\ub85d \uc800\ub808\ubca8\uc758 \uae30\ub2a5(facility)\uc744 \uc0ac\uc6a9\ud569\ub2c8\ub2e4. (Simple IPC \uc608\uc81c\ub294 chile process\uc758 \ubc29\ubc95\uc774 \uc644\uc804\ud788 \ubc14\ub010\uac83 \uac19\uc740\ub370 \uc5b4\ub5bb\uac8c \ub611\uac19\uc740 \uc608\uc81c\ub97c \ub9cc\ub4e4\uc5b4\uc57c \ud560\uc9c0 \uc804\ud600 \ubaa8\ub974\uaca0\ub354\uad70\uc694. \u3160\u3160)<\/p>\n<p><span style=\"font-size: large\">Epilogue<\/span><br \/>\n\uac04\ub2e8\ud788 \ud5ec\ub85c\uc6d4\ub4dc\ub9cc \ub530\ub77c\ud574\ubcf4\uace0\ub294 Node.js\ub97c \uac10\ud788 \ud310\ub2e8\ud560 \uc218\ub294 \uc5c6\uaca0\uc9c0\ub9cc Node.js\uac00 \ubcf4\uc5ec\uc8fc\ub294 \ubbf8\ub798\ub294 \ub180\ub78d\uc2b5\ub2c8\ub2e4.?\uc774\ubca4\ud2b8\ub4dc\ub9ac\ube10\uc744 \uc774\uc6a9\ud574\uc11c \uc11c\ubc84\uc758 \ud37c\ud3ec\uba3c\uc2a4\ub97c \uc5c4\uccad\ub098\uac8c \ub04c\uc5b4\ub4e4\uc77c \uc218 \uc788\uc73c\uba74 \ud604\uc7ac \ud504\ub860\ud2b8\uc564\ub4dc \uac1c\ubc1c\uc790\uac00 \uac00\uc9c0\uace0 \uc788\ub294 Javascript \uc2a4\ud0ac\uc744 \uadf8\ub300\ub85c \uc0ac\uc6a9\ud574\uc11c \uc790\uc2e0\uc774 \uc6d0\ud558\ub294 \uc6f9\uc11c\ubc84\ub97c \uc9c1\uc811 \ub9cc\ub4e4\uc5b4 \ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc5d4\ud130\ud504\ub77c\uc774\uc988\uae09\uc758 \uc11c\ubc84\uae4c\uc9c0 \ub9cc\ub4e4\uc5b4 \ub0bc \uc218 \uc788\uc744\uc9c0\ub294 \uc544\uc9c1 \ud310\ub2e8\ud558\uae30 \uc5b4\ub835\uc9c0\ub9cc \uc815\ud574\uc9c4 \uc77c\uc815\uae30\ub2a5\uc758 \uc11c\ubc84\ub294 \uc544\uc8fc \uac04\ub2e8\ud558\uac8c \ucda9\ubd84\ud55c \ud37c\ud3ec\uba3c\uc2a4\ub97c \uac00\uc9c0\uace0 \ub9cc\ub4e4\uc5b4 \ub0bc \uc218 \uc788\uc744 \ub4ef \ud569\ub2c8\ub2e4.?\ud604\uc7ac \ubc84\uc804\uc774 0.2\ub3c4 \uac00\uc9c0 \uc54a\uc740 \uc0c1\ud669\uc5d0\uc11c<a href=\"http:\/\/wiki.github.com\/ry\/node\/modules\" target=\"_blank\">\uc218\ub9ce\uc740 \ubaa8\ub4c8\ub4e4<\/a>?<a title=\"\uc774 \ub9c1\ud06c\ub97c \uc0c8\ucc3d\uc73c\ub85c \uc5fd\ub2c8\ub2e4.\" href=\"http:\/\/wiki.github.com\/ry\/node\/modules\" target=\"_blank\"><img src=\"http:\/\/blog.outsider.ne.kr\/plugins\/zExternalLink\/external.png\" alt=\"\" align=\"middle\" \/><\/a>\uc774 \uac1c\ubc1c\ub418\uace0 \uc788\ub294 \uac83\uc73c\ub85c \ubcf4\uc544\ub3c4 \uadf8 \ubbf8\ub798\uac00 \uc0c1\ub2f9\ud788 \uae30\ub300\uac00 \ub429\ub2c8\ub2e4. \uc544\ub9c8 \uc62c\ud574 node.js\ub97c \ub9ce\uc774 \ub9cc\uc9c0\uac8c \ub420\uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\ucd9c\ucc98 \ud83d\ude15http:\/\/jjeong.tistory.com\/624 Node.js \uc5d0 \ub300\ud574 \uc27d\uac8c \uc811\uadfc \ud560 \uc218 \uc788\ub3c4\ub85d \uc815\ub9ac\ub41c \ube14\ub85c\uadf8 \ubb38\uc11c\uac00 \uc788\uc5b4 \uacf5\uc720 \ud569\ub2c8\ub2e4. [\uc6d0\ubcf8\ubb38\uc11c] http:\/\/blog.outsider.ne.kr\/480 http:\/\/blog.outsider.ne.kr\/481 \uadf8\ub3d9\uc548 \ubd10\uc57c\uc9c0 \ubd10\uc57c\uc9c0 \ud558\ub358 Node.js\ub97c \uc774\uc81c\uc57c \ubcf4\uae30 \uc2dc\uc791\ud588\uc2b5\ub2c8\ub2e4. \uac04\ub2e8\ud788 \ub9d0\ud558\uba74?Node.js\ub294 \uc11c\ubc84\uc0ac\uc774\ub4dc\uc5d0\uc11c&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/889"}],"collection":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=889"}],"version-history":[{"count":0,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/889\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=889"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=889"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=889"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}