2. built on Chrome's JavaScript runtime
easily fast, scalable
event-driven, non-blocking I/O model lightweight
and efficient perfect for data-intensive real-time
distributed devices.
http://nodejs.org/
Node.js®는 빠르고 확장 가능한 네크워크 응용 프로그램을 쉽게 빌드 하기 위해 크롬 자바스크립트 런타임을 기반
으로 구축된 플랫폼이다. 노드는 다양한 장치에서 데이터 중심의 실시간 응용 프로그램을 수행하려는 경우 이벤트
기반, 넌 글로킹 I/O 모델을 사용하기 때문에 가볍고, 효과적이며, 완벽하다.
3. built on Chrome's JavaScript runtime
easily fast scalable
event-driven non-blocking I/O model lightweight
efficient perfect data-intensive real-time
distributed devices.
Node.js®는 빠르고 확장 가능한 네크워크 응용 프로그램을 쉽게 빌드 하기 위해 크롬 자바스크립트 런타임을 기반
으로 구축된 플랫폼이다. 노드는 다양한 장치에서 데이터 중심의 실시간 응용 프로그램을 수행하려는 경우 이벤트
기반, 넌 글로킹 I/O 모델을 사용하기 때문에 가볍고, 효과적이며, 완벽하다.
4. Node.js®는 브라우져 바깥에서 자바스크립트 응용 프로그램을 수행할 수 있도록 해주는 런타임 환경과 라이브러리
이다.
Node.js®는 크롬 자바스크립트 런타임을 기반으로 구축된 플랫폼이다. 노드는 다양한 장치에서 이벤트 기반, 넌 글
로킹 I/O 모델을 사용한다.
7. • JavaScript Runtime 엔진 중 하나(e.g. SpiderMonkey, Chakra, Rhino, …)
• Google의 JavaScript 엔진
• Google Chrome에서 사용되고 있으며, C++로 개발
• 컴파일(JIT)된 코드는 필요에 따라 최적화를 위한 재컴파일이 이루어짐
• Generational Garbage collector
• ECMAScript, 5th edition 구현
• Danish Magic
Lars Bak
http://code.google.com/p/v8/
9. 2006년 이후 꾸준히 Outside Browser에서 사용되긴 하였으나…
• Performance : 2008-2010, 업계의 꾸준한 노력(Chakra, V8, Nitro, …)
• 의존성 문제를 해결하는 공통의 저장소 : Jam, npm, Bower, …
• Tooling : Visual Studio, Sublime, WebStorm, …
• Modulation(모듈 정의/사용) : CommonJS / AMD(Asynchronous Module Definition)
구분 CommonJS AMD
Browser curl.js, SproutCore, PINF curl.js, RequreJS, PINF,
bdLoad, Yabble
Server Side Node.js, Narwhal,
Persevere
RequireJS, PINF
10. • 마우스, 센서, 메시지, 혹은 다른 프로그램이나 스레드의 이벤트에 의해
서 프로그램의 흐름이 결정되는 구조
• GUI 기반 응용 프로그램이나 이벤트 처리 중심의 응용 프로그램 개발
시에 널리 사용되는 패러다임
• 일반적으로, 메일 루프가 이벤트를 수신하고,
개별 이벤트 처리기를 호출 해 주는 방식
Event Queue
Event Loop
Thread Pool
Thread
Thread
Thread
Async I/O
11. Blocking I/O
Req. I/O
Resp. I/O
I/OOperation
Waiting
Req. I/O
Noti. I/O completion
I/OOperation
Non Blocking I/O
a b a b
event
12. V8
Node API Event Queue
Event Loop
Thread Pool
Thread
Thread
Thread
Async I/O
libuvnpm
13. • 서버 측 응용 프로그램 개발에도 JavaScript 기술을 그대로 사용
• 단일의 개발 환경과 언어
• 2009년 라이언 달(Ryan Dahl)이 개발하여 오픈 소스화
• 여전히 베타, v0.10.33
• Joyent가 스폰서
• MEAN(MongoDB, Express.js, Angular.js, Node.js)
: Free and open-source solution stack
for building dynamic web sites
Ryan Dahl
15. • 데뷰 5년만에, GitHub에서 3번째로 가장 많은 프로젝트가 진행중
• 한 달에 2,000,000 다운로드
• V0.10x는 20,000,000 다운로드
• Over 107,538 modules on npm.
• Over 475 meetups worldwide talking about Node.
https://www.npmjs.org/