4. 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
5. 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
8. 역사
2009: Joyent의 지원을 받는
Ryan Dahl이 BDFL이 되어
Linux에 배포됨
BDFL(Benevolent Dictator for Life):
open-source software 개발 리더, 창시자인 경우가 많음
예) GNU: Richard Matthew Stallman
Linux: Linus Torvalds
Python: Guido van Rossum
8 / 62
9. 역사
2011: open-source community에 의해
작성된 라이브러리를 배포하고 공유할
수 있는 node package manager 도입
package 수: 160,166개
저번 달 다운로드 수: 1,670,169,174번
- 2015.06.28. 기준
9 / 62
13. 역사
2014: 노드JS 주요 개발자를 중심으로
Node Forward라는 기술위원회가
결성되고 독자기술인 io.js 발표
io.js는 BDFL 주도가 아닌 커뮤니티 주도 개발
회의과정을 공개, SNS로 내부 소식을 전파
https://www.youtube.com/channel/UC9Ug4jAzdP-T3ozwjpL9BYw
13 / 62
14. 역사
2015: Node.js와 io.js 커뮤니티가
Node.js로 통합될 것이라 발표
현재 최종 버전: Node.js 0.12.5, io.js 2.3.1
통합 저장소: https://github.com/nodejs/node
14 / 62
16. event-driven
• 마우스, 메시지, 혹은 다른
프로그램이나 스레드의
이벤트에 의해서 프로그램의
흐름이 결정되는 구조
• 일반적으로, 메인 루프가
이벤트를 수신하고,
개별이벤트 처리기를
호출해주는 방식
Event Queue
Event
Loop
16 / 62
17. non-blocking I/O
• 작업이 완료되기 전에 다른 작업을 계속할
수 있는 I/O 처리방식
• 데이터베이스 작업 또는 통신을 시작한 후
I/O가 기다리지 않고 동작이 완료된 후에
작업을 진행
• 여전히 완료까지 대기하여야 하지만
동작에 의존성이 없는 다른 처리를 계속함
17 / 62
18. 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
26. npm (node package manager)
JavaScript 개발자들이 code를 쉽게
공유하고 재사용하기 위한 package manger
https://npmjs.org/ (2015.06.28. 기준)
26 / 62
27. 유용해 보이는 모듈들
• Express: 웹 프레임워크
• socket.io: 실시간 웹 엔진
• MongoDB, MySQL 등의 database driver
• grunt: Task Runner, 빌드 툴
• TypeScript: JavaScript superset
• twitter, Facebook 등의 연동 모듈
27 / 62
35. function as a first-class object
first-class object: 1960년 Christopher
Strachey에 의해 소개된 개념
• 변수나 자료구조로 저장될 수 있음
• 서브루틴에 매개변수로 전달될 수 있음
• 서브루틴의 결과로 반환될 수 있음
35 / 62
51. Node.js의 단점
• 기본적으로 single thread로 동작하여
CPU 의존성이 높은 경우 적합하지 않음
• callback이 중첩될 경우 지옥이 펼쳐짐
• JavaScript의 한계
51 / 62
52. 몇 가지 대안들
• callback이 중첩될 경우 지옥이 펼쳐짐??
• promise: ES6 표준에 포함된 새로운 문법,
비동기 JavaScript 코드 작성을 도와줌
http://www.ecma-international.org/ecma-
262/6.0/#sec-constructor-properties-of-
the-global-object-promise
52 / 62
60. 참고자료
• 공식 홈페이지: https://nodejs.org/
• Node.js 알아보기(Microsoft tech days
mini 발표자료, 김명신):
http://www.microsoftvirtualacademy.c
om/training-courses/saturedaynoon-
with-javascriptfriend
60 / 62
61. 참고자료
• The Node Beginner Book:
http://www.nodebeginner.org/
• What Makes Node.js Faster Than Java?:
https://strongloop.com/strongblog/no
de-js-is-faster-than-java/
61 / 62