Post on 13-Jan-2015
description
황급히����������� ������������������ 배워보는����������� ������������������ Node.js
2012.09.25 asbubam@gmail.com
What is Node.js
Created by Ryan Dahl starting in 2009.02 (personal project)
JavaScript Runtime on V8 JavaScript engine (Google Chrome Web browser) based
Server Side JavaScript
implements some CommonJS (JavaScript: not just for browsers any more!) standard spec like Couch DB, RingoJS
Single Thread(Not Multi Thread), Single Stack, Event Loop
Everything is Nonblocking I/O, But 개발자가 작성한 코드(싱글쓰레드)는 동기
History
2009.02.09 Ryan posted “Event driven TCP library & HTTP Server on chrome web browser’s V8 engine” idea. inspiration from (CouchDB, Ebb, Flow, FUSE, libebb, libeio, libev, libircclient, Merb, Mongrel, NGINX, nginx-ey-balancer, Ragel, Ruby on Rails, SqueezeBox, timber lang, XUpload)
2009.02.15 created GitHub repository
2009.11.07 v0.1.16 in JSConf.eu
2012.09.20 v0.8.9 14,919 NPM packages
Advantages* 동시 접속 수에 따른 초당 요청 처리 수가 멀티쓰레딩에 비해 월등함.
100명의 동접자, 1메가 바이트 응답
node 822 req/sec
nginx 708 req/sec
thin 85 req/sec
mongrel 4 req/sec
* 2012년 9월 현재 14,919 개의 Package가 존재, 개발이 용이
* JavaScript
Disadvantages
CPU 개수, Memory 용량을 높여도 성능이 크게 향상되지 않는다. (노드 인스턴스를 여러 개 실행함으로써 해결 가능)
짧은 역사로 인해 다양한 상황에서의 검증이 이뤄지지 않음
callback style 구현의 어려움
blocking / nonblocking* blocking (동기)
puts(“이름을 입력하세요”);var name = gets();puts(“당신의 이름은 “ + name + “입니다.”);
puts(“next work.”);
* nonblocking (비동기)puts(“이름을 입력하세요”);gets(function(name) { puts(“당신의 이름은 “ + name + “입니다.”);});
puts(“next work.”);
Coding convention* 들여쓰기 들여쓰기는 공백 2칸으로 한다.* 세미콜론 세미콜론은 항상 사용한다.* 작은따옴표 문자열 등은 큰 따옴표 대신 작은따옴표를 사용한다.* 중괄호 다음과 같이 작성한다.
if (true) { //내용
}* 변수 소문자로 시작하는 카멜케이스(camel case) 사용* 클래스 대문자로 시작하는 카멜케이스 사용* 상수 모두 대문자 * 동등비교 == 대신 ===를 사용한다.* 콜백함수 콜백함수에서 첫 파라미터는 에러 파라미터로 사용한다. callback(err, param1, param2)
ex) simple web server
var http = require('http');
http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n');}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');
ex) tcp server
var net = require('net');
var server = net.createServer(function (socket) { socket.write('Echo server\r\n'); socket.pipe(socket);});
server.listen(1337, '127.0.0.1');
ex) File Systemvar fs = require('fs');
fs.readFile(‘./test.txt’, encoding=‘utf-8’, function(err, data) { if (err) { throw err; } console.log(data);});
console.log(‘파일의 내용 : ’);
//infinite loopwhile(true) {}
//safe setTimeout(function() { console.log("5 secs timeout");}, 5000);
Node.js스러운����������� ������������������ 코드����������� ������������������ 작성법
The Node Beginner Bookhttp://www.nodebeginner.org/index-kr.html
npm (node package manager)
* global install npm install 패키지명 -g
* local install npm install 패키지명
* uninstall npm uninstall 패키지명
* update npm update
* search npm search 검색어
Packages to Try
express - web framework
socket.io - realtime networking
persist - ORM framework
async - async helpers
db-migrate - database migrations
VOWS - BDD framework
dnode - RPC
java - bridge to Java API
Service using node.js
LinkedIn (http://www.linkedin.com)
Trello (http://trello.com) express + socket.io
Yammer (http://www.yammer.com) private social network
Cloud9 IDE (http://c9.io) Node.js + Socket.io
네이버 개발자 노트 (http://github.com/nforge/devnote) 마크다운 기반위키프로젝트 프로젝트 빌드/테스트 ServerSide/Front-end 모두 자바스크립트로만 작성
End