node.js 시작하기
TRANSCRIPT
목차
1. Node.js?
2. 역사
3. 어떻게 동작하는가?
4. npm
5. JavaScript
5. DEMO: Node.js 101,
Express, socket.io
6. 정리
7. 참고자료
8. 질문과 답변
2 / 62
Node.js?
Node.js란?
Platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
- 공식 홈페이지 설명
• Platform• Chrome's JavaScript runtime• event-driven• non-blocking I/O 4 / 62
Node.js란?
• 서버 측에서 JavaScript를 활용한 플랫폼• Chrome V8 JavaScript 엔진 사용• event-driven• non-blocking I/O• node package manager• open-source• Linux, Windows, Mac OSX 지원• 아직 beta: v0.12.5
5 / 62
Demo: Hello World!!https://github.com/HueyPark/Node.js-101/tree/master/HelloWorld
역사
역사
2009: Joyent의 지원을 받는Ryan Dahl이 BDFL이 되어Linux에 배포됨
BDFL(Benevolent Dictator for Life):open-source software 개발 리더, 창시자인 경우가 많음예) GNU: Richard Matthew Stallman
Linux: Linus TorvaldsPython: Guido van Rossum
8 / 62
역사
2011: open-source community에 의해작성된 라이브러리를 배포하고 공유할수 있는 node package manager 도입
package 수: 160,166개저번 달 다운로드 수: 1,670,169,174번
- 2015.06.28. 기준
9 / 62
역사
2011: Microsoft 와 Joyent가 협력하여Windows에서 사용 가능한 버전의Node.js를 구현함
10 / 62
역사
2012: Ryan Dahl이 물러나고, 동료이자 npm
개발자인 Isaac Schlueter가 BDFL로
활동
2014: Timothy J. Fontaine 프로젝트의
새로운 리더로 활동
11 / 62
12 / 62
역사
2014: 노드JS 주요 개발자를 중심으로
Node Forward라는 기술위원회가
결성되고 독자기술인 io.js 발표
io.js는 BDFL 주도가 아닌 커뮤니티 주도 개발
회의과정을 공개, SNS로 내부 소식을 전파
https://www.youtube.com/channel/UC9Ug4jAzdP-T3ozwjpL9BYw
13 / 62
역사
2015: Node.js와 io.js 커뮤니티가
Node.js로 통합될 것이라 발표
현재 최종 버전: Node.js 0.12.5, io.js 2.3.1
통합 저장소: https://github.com/nodejs/node
14 / 62
어떻게 동작하는가?
event-driven
• 마우스, 메시지, 혹은 다른프로그램이나 스레드의이벤트에 의해서 프로그램의흐름이 결정되는 구조
• 일반적으로, 메인 루프가이벤트를 수신하고, 개별이벤트 처리기를호출해주는 방식
Event Queue
Event Loop
16 / 62
non-blocking I/O
• 작업이 완료되기 전에 다른 작업을 계속할
수 있는 I/O 처리방식
• 데이터베이스 작업 또는 통신을 시작한 후
I/O가 기다리지 않고 동작이 완료된 후에
작업을 진행
• 여전히 완료까지 대기하여야 하지만
동작에 의존성이 없는 다른 처리를 계속함17 / 62
non-blocking I/O
a b
blocking I/O
request
response
waiting
a b
non-blocking I/O
request
I/O complete
notification
18 / 62
multi threded server
19 / 62
Node.js server
20 / 62
왜?
많은 어플리케이션은 아래와 같은 코드를가지고 있음
var result = db.query('select * from T');//use result
쿼리가 실행될 때까지 어플리케이션은무엇을 하고 있을까요?
21 / 62
왜?
많은 어플리케이션은 아래와 같은 코드를가지고 있음
var result = db.query('select * from T');//use result
쿼리가 실행될 때까지 어플리케이션은무엇을 하고 있을까요? 대부분 그냥 대기함
22 / 62
왜?
• 뿐만 아니라 Context switching에는자원이 소모되고, 쓰레드는 메모리를필요로 함
대규모의 동시 접속을 수용한다면,모든 접속(connection)에
OS 쓰레드를 할당할 수 없음
23 / 62
그래서!
event-driven+
non-blocking I/O24 / 62
npm (node package manager)
npm (node package manager)
JavaScript 개발자들이 code를 쉽게공유하고 재사용하기 위한 package manger
https://npmjs.org/ (2015.06.28. 기준)
26 / 62
유용해 보이는 모듈들
• Express: 웹 프레임워크
• socket.io: 실시간 웹 엔진
• MongoDB, MySQL 등의 database driver
• grunt: Task Runner, 빌드 툴
• TypeScript: JavaScript superset
• twitter, Facebook 등의 연동 모듈
27 / 62
JavaScript
JavaScriptC++ 프로그래머가 생각하는
JavaScript 특징
JavaScriptC++ 프로그래머 내가 생각하는
JavaScript 특징
내가 생각하는 JavaScript 특징
• duck typing
• function as a first-class object
• closure
31 / 62
duck typing
"어떤 새가 오리처럼 걷고 수영하고
꽥꽥거리는 소리를 낸다면, 나는 그 새를
오리라고 할 것이다"
32 / 62
duck typing
var number = 10;
number = 'this is not number';
number = number + 7;
33 / 62
duck typing
34 / 62
function as a first-class object
first-class object: 1960년 Christopher Strachey에 의해 소개된 개념
• 변수나 자료구조로 저장될 수 있음• 서브루틴에 매개변수로 전달될 수 있음• 서브루틴의 결과로 반환될 수 있음
35 / 62
closure
• 컴퓨터 프로그래밍에서 독립된 변수를 참조하는 기능
• JavaScript에서는 함수가 환경변수를 참조함
36 / 62
closure
function add(x) {
return function(y) {
return x + y;
};
}
37 / 62
Demo: JavaScripthttps://github.com/HueyPark/Node.js-101/tree/master/JavaScript
Demo: JavaScript
1. duck typing2. function as a first-class object,
closure
39 / 62
Demo: Node.js 101https://github.com/HueyPark/Node.js-101/tree/master/httpServer
DEMO: Node.js 101
1. default http server(app.js)2. add server.js3. add router.js4. add requestHandlers.js5. handler do everything, non-blocking
I/O
41 / 62
Demo: Expresshttps://github.com/HueyPark/Node.js-101/tree/master/Express
Express
Fast, unopinionated, minimalist web framework for Node.js
Node.js를 위한 빠르고, 고집없고, 깔끔한web framework
43 / 62
특징
• 강력한 라우팅• 고성능• 테스트 범위가 넓음• HTTP 지원 (redirection, caching, ...)• 14개 이상의 View template engine• Content negotiation• 프로그램 실행이 빠름
44 / 62
DEMO: Express
1. install express-generator2. create project3. start4. add users.POST()
45 / 62
Demo: socket.iohttps://github.com/HueyPark/Node.js-101/tree/master/chatServer
socket.io
Featuring the fastest and most reliable real time engine
가장 빠르고 안전한 실시간 (클라이언트와양방향 통신) 엔진
47 / 62
특징
• Microsoft Office, Yammer, Zendesk,
Trello에서 사용
• 지속적인 업데이트 중
• 엄청나게 강력하고, 쉽게 사용할 수 있음
48 / 62
DEMO: socket.io
1. install Express2. install socket.io3. add on 'connection', 'disconnect'4. add on 'chat message'5. http://52.68.210.207:9200/
49 / 62
정리
Node.js의 단점
• 기본적으로 single thread로 동작하여
CPU 의존성이 높은 경우 적합하지 않음
• callback이 중첩될 경우 지옥이 펼쳐짐
• JavaScript의 한계51 / 62
몇 가지 대안들
• callback이 중첩될 경우 지옥이 펼쳐짐??• promise: ES6 표준에 포함된 새로운 문법,
비동기 JavaScript 코드 작성을 도와줌
http://www.ecma-international.org/ecma-262/6.0/#sec-constructor-properties-of-
the-global-object-promise
52 / 62
몇 가지 대안들
JavaScript의 한계??JavaScript Compiler!!
53 / 62
Node.js의 장점
event loop??non-blocking I/O??
54 / 62
Node.js의 장점
event loop??non-blocking I/O??
55 / 62
Node.js의 장점
JavaScript!!full stack 개발 가능
56 / 62
Node.js의 장점
node package manager
풍부한 생태계(16만 모듈!!)
57 / 62
참고자료
참고자료
• 공식 홈페이지: https://nodejs.org/
• Node.js 알아보기(Microsoft tech days mini 발표자료, 김명신):http://www.microsoftvirtualacademy.com/training-courses/saturedaynoon-with-javascriptfriend
60 / 62
참고자료
• The Node Beginner Book: http://www.nodebeginner.org/
• What Makes Node.js Faster Than Java?: https://strongloop.com/strongblog/node-js-is-faster-than-java/
61 / 62
질문과 답변