SlideShare a Scribd company logo
쉽고 빠르게 시작하는
서버 사이드 어플리케이션
Node.js
jaewan.huey.park@gmail.com
목차
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 Torvalds
Python: 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/O
24 / 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
JavaScript
C++ 프로그래머가 생각하는
JavaScript 특징
JavaScript
C++ 프로그래머 내가 생각하는
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: JavaScript
https://github.com/HueyPark/Node.js-101/tree/master/JavaScript
Demo: JavaScript
1. duck typing
2. function as a first-class object,
closure
39 / 62
Demo: Node.js 101
https://github.com/HueyPark/Node.js-101/tree/master/httpServer
DEMO: Node.js 101
1. default http server(app.js)
2. add server.js
3. add router.js
4. add requestHandlers.js
5. handler do everything, non-blocking
I/O
41 / 62
Demo: Express
https://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-generator
2. create project
3. start
4. add users.POST()
45 / 62
Demo: socket.io
https://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 Express
2. install socket.io
3. 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
http://githut.info
58 / 62
참고자료
참고자료
• 공식 홈페이지: https://nodejs.org/
• Node.js 알아보기(Microsoft tech days
mini 발표자료, 김명신):
http://www.microsoftvirtualacademy.c
om/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/no
de-js-is-faster-than-java/
61 / 62
질문과 답변

More Related Content

PDF
Node.js 현재와 미래
PPTX
Node.js의 도입과 활용
PDF
Python server-101
PDF
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
PDF
Javascript everywhere - Node.js | Devon 2012
PDF
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
PPTX
Leadweb Nodejs
PPTX
Node.js + Websocket 삽질기
Node.js 현재와 미래
Node.js의 도입과 활용
Python server-101
Ryan Dahl의 Node.js 소개 동영상 해설 by doortts
Javascript everywhere - Node.js | Devon 2012
스마트폰 앱 백-엔드 솔루션 개발을 위한 Node.js 실전 가이드
Leadweb Nodejs
Node.js + Websocket 삽질기

What's hot (20)

PPTX
Nodejs 발표자료
PDF
세션3 node.js의 의미와 자바의 대안
PDF
Node.js in Flitto
PPTX
Node.js
PDF
[발표] 멜팅팟 서버 사이드 레벨에서 자바 스크립트 엔진 Node.js의 가능...
PDF
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
PDF
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
PPTX
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
PDF
Node.js 기본
PPTX
아꿈사 발표 Node JS 프로그래밍 8장
PDF
Node.js 자바스크립트로 서버사이드 개발하기
PDF
[C5]deview 2012 nodejs
PPTX
Vert.x 세미나 이지원_배포용
PDF
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
PDF
Vert.x
PDF
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
PPTX
Beejei node.js & web service
PPTX
[123] electron 김성훈
PPTX
공성대전 C# 사용기
PDF
[111217 아꿈사연말모임] 웹소켓과온라인게임
Nodejs 발표자료
세션3 node.js의 의미와 자바의 대안
Node.js in Flitto
Node.js
[발표] 멜팅팟 서버 사이드 레벨에서 자바 스크립트 엔진 Node.js의 가능...
[Play.node] node.js 를 사용한 대규모 글로벌(+중국) 서비스
NODE.JS 글로벌 기업 적용 사례 그리고, real-time 어플리케이션 개발하기
소셜게임 서버 개발 관점에서 본 Node.js의 장단점과 대안
Node.js 기본
아꿈사 발표 Node JS 프로그래밍 8장
Node.js 자바스크립트로 서버사이드 개발하기
[C5]deview 2012 nodejs
Vert.x 세미나 이지원_배포용
시간당 수백만 요청을 처리하는 node.js 서버 운영기 - Playnode 2015
Vert.x
[H3 2012] 내컴에선 잘되던데? - vagrant로 서버와 동일한 개발환경 꾸미기
Beejei node.js & web service
[123] electron 김성훈
공성대전 C# 사용기
[111217 아꿈사연말모임] 웹소켓과온라인게임
Ad

Similar to Node.js 시작하기 (20)

PPTX
빠르게훓어보는 Node.js와 Vert.x
PDF
AngularJS In Production
PDF
Nodejs발표자료 - 팀 세미나용
PPTX
요즘웹개발
PDF
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
PPTX
댓글 플러그인 아포가토
PDF
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
PPTX
공간정보아카데미 - Day1 오픈소스개발 일반
PPTX
practical perf testing - d2startup
PPTX
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
PDF
JMI Techtalk : Backend.AI
PDF
Front end dev 2016 & beyond
PPTX
Big Data platform을 위한 Sencha Ext JS 사례.
PDF
Internship backend
PDF
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
PDF
[IoT] MAKE with Open H/W + Node.JS - 3rd
PPTX
Single-page Application
PDF
Private PaaS with Docker, spring cloud and mesos
PPTX
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
PPTX
Docker osc 0508
빠르게훓어보는 Node.js와 Vert.x
AngularJS In Production
Nodejs발표자료 - 팀 세미나용
요즘웹개발
[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기
댓글 플러그인 아포가토
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
공간정보아카데미 - Day1 오픈소스개발 일반
practical perf testing - d2startup
코드로 바로 해버리는 서버리스 오케스트레이션 - Azure Durable Functions
JMI Techtalk : Backend.AI
Front end dev 2016 & beyond
Big Data platform을 위한 Sencha Ext JS 사례.
Internship backend
Deview 2013 :: Backend PaaS, CloudFoundry 뽀개기
[IoT] MAKE with Open H/W + Node.JS - 3rd
Single-page Application
Private PaaS with Docker, spring cloud and mesos
[Azure bootcamp2017] Azure App Service로 서비스 탄탄하게 관리하기
Docker osc 0508
Ad

More from Huey Park (6)

PDF
Docker
PDF
Redis
PDF
Behavior Tree in Unreal engine 4
PPTX
C++ 타입 추론
PPTX
Jenkins
PDF
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기
Docker
Redis
Behavior Tree in Unreal engine 4
C++ 타입 추론
Jenkins
언리얼 엔진 4와 함께 프로그래머 없이 게임 만들기

Node.js 시작하기