node.js 시작하기

62
쉽고 빠르게 시작하는 서버 사이드 어플리케이션 Node.js [email protected]

Upload: huey-park

Post on 09-Aug-2015

1.702 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Node.js 시작하기

쉽고 빠르게 시작하는서버 사이드 어플리케이션

Node.js

[email protected]

Page 2: Node.js 시작하기

목차

1. Node.js?

2. 역사

3. 어떻게 동작하는가?

4. npm

5. JavaScript

5. DEMO: Node.js 101,

Express, socket.io

6. 정리

7. 참고자료

8. 질문과 답변

2 / 62

Page 3: Node.js 시작하기

Node.js?

Page 4: 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

Page 5: Node.js 시작하기

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

Page 6: Node.js 시작하기

Demo: Hello World!!https://github.com/HueyPark/Node.js-101/tree/master/HelloWorld

Page 7: Node.js 시작하기

역사

Page 8: Node.js 시작하기

역사

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

Page 9: Node.js 시작하기

역사

2011: open-source community에 의해작성된 라이브러리를 배포하고 공유할수 있는 node package manager 도입

package 수: 160,166개저번 달 다운로드 수: 1,670,169,174번

- 2015.06.28. 기준

9 / 62

Page 10: Node.js 시작하기

역사

2011: Microsoft 와 Joyent가 협력하여Windows에서 사용 가능한 버전의Node.js를 구현함

10 / 62

Page 11: Node.js 시작하기

역사

2012: Ryan Dahl이 물러나고, 동료이자 npm

개발자인 Isaac Schlueter가 BDFL로

활동

2014: Timothy J. Fontaine 프로젝트의

새로운 리더로 활동

11 / 62

Page 12: Node.js 시작하기

12 / 62

Page 13: Node.js 시작하기

역사

2014: 노드JS 주요 개발자를 중심으로

Node Forward라는 기술위원회가

결성되고 독자기술인 io.js 발표

io.js는 BDFL 주도가 아닌 커뮤니티 주도 개발

회의과정을 공개, SNS로 내부 소식을 전파

https://www.youtube.com/channel/UC9Ug4jAzdP-T3ozwjpL9BYw

13 / 62

Page 14: Node.js 시작하기

역사

2015: Node.js와 io.js 커뮤니티가

Node.js로 통합될 것이라 발표

현재 최종 버전: Node.js 0.12.5, io.js 2.3.1

통합 저장소: https://github.com/nodejs/node

14 / 62

Page 15: Node.js 시작하기

어떻게 동작하는가?

Page 16: Node.js 시작하기

event-driven

• 마우스, 메시지, 혹은 다른프로그램이나 스레드의이벤트에 의해서 프로그램의흐름이 결정되는 구조

• 일반적으로, 메인 루프가이벤트를 수신하고, 개별이벤트 처리기를호출해주는 방식

Event Queue

Event Loop

16 / 62

Page 17: Node.js 시작하기

non-blocking I/O

• 작업이 완료되기 전에 다른 작업을 계속할

수 있는 I/O 처리방식

• 데이터베이스 작업 또는 통신을 시작한 후

I/O가 기다리지 않고 동작이 완료된 후에

작업을 진행

• 여전히 완료까지 대기하여야 하지만

동작에 의존성이 없는 다른 처리를 계속함17 / 62

Page 18: Node.js 시작하기

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

Page 19: Node.js 시작하기

multi threded server

19 / 62

Page 20: Node.js 시작하기

Node.js server

20 / 62

Page 21: Node.js 시작하기

왜?

많은 어플리케이션은 아래와 같은 코드를가지고 있음

var result = db.query('select * from T');//use result

쿼리가 실행될 때까지 어플리케이션은무엇을 하고 있을까요?

21 / 62

Page 22: Node.js 시작하기

왜?

많은 어플리케이션은 아래와 같은 코드를가지고 있음

var result = db.query('select * from T');//use result

쿼리가 실행될 때까지 어플리케이션은무엇을 하고 있을까요? 대부분 그냥 대기함

22 / 62

Page 23: Node.js 시작하기

왜?

• 뿐만 아니라 Context switching에는자원이 소모되고, 쓰레드는 메모리를필요로 함

대규모의 동시 접속을 수용한다면,모든 접속(connection)에

OS 쓰레드를 할당할 수 없음

23 / 62

Page 24: Node.js 시작하기

그래서!

event-driven+

non-blocking I/O24 / 62

Page 25: Node.js 시작하기

npm (node package manager)

Page 26: Node.js 시작하기

npm (node package manager)

JavaScript 개발자들이 code를 쉽게공유하고 재사용하기 위한 package manger

https://npmjs.org/ (2015.06.28. 기준)

26 / 62

Page 27: Node.js 시작하기

유용해 보이는 모듈들

• Express: 웹 프레임워크

• socket.io: 실시간 웹 엔진

• MongoDB, MySQL 등의 database driver

• grunt: Task Runner, 빌드 툴

• TypeScript: JavaScript superset

• twitter, Facebook 등의 연동 모듈

27 / 62

Page 28: Node.js 시작하기

JavaScript

Page 29: Node.js 시작하기

JavaScriptC++ 프로그래머가 생각하는

JavaScript 특징

Page 30: Node.js 시작하기

JavaScriptC++ 프로그래머 내가 생각하는

JavaScript 특징

Page 31: Node.js 시작하기

내가 생각하는 JavaScript 특징

• duck typing

• function as a first-class object

• closure

31 / 62

Page 32: Node.js 시작하기

duck typing

"어떤 새가 오리처럼 걷고 수영하고

꽥꽥거리는 소리를 낸다면, 나는 그 새를

오리라고 할 것이다"

32 / 62

Page 33: Node.js 시작하기

duck typing

var number = 10;

number = 'this is not number';

number = number + 7;

33 / 62

Page 34: Node.js 시작하기

duck typing

34 / 62

Page 35: Node.js 시작하기

function as a first-class object

first-class object: 1960년 Christopher Strachey에 의해 소개된 개념

• 변수나 자료구조로 저장될 수 있음• 서브루틴에 매개변수로 전달될 수 있음• 서브루틴의 결과로 반환될 수 있음

35 / 62

Page 36: Node.js 시작하기

closure

• 컴퓨터 프로그래밍에서 독립된 변수를 참조하는 기능

• JavaScript에서는 함수가 환경변수를 참조함

36 / 62

Page 37: Node.js 시작하기

closure

function add(x) {

return function(y) {

return x + y;

};

}

37 / 62

Page 38: Node.js 시작하기

Demo: JavaScripthttps://github.com/HueyPark/Node.js-101/tree/master/JavaScript

Page 39: Node.js 시작하기

Demo: JavaScript

1. duck typing2. function as a first-class object,

closure

39 / 62

Page 40: Node.js 시작하기

Demo: Node.js 101https://github.com/HueyPark/Node.js-101/tree/master/httpServer

Page 41: Node.js 시작하기

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

Page 42: Node.js 시작하기

Demo: Expresshttps://github.com/HueyPark/Node.js-101/tree/master/Express

Page 43: Node.js 시작하기

Express

Fast, unopinionated, minimalist web framework for Node.js

Node.js를 위한 빠르고, 고집없고, 깔끔한web framework

43 / 62

Page 44: Node.js 시작하기

특징

• 강력한 라우팅• 고성능• 테스트 범위가 넓음• HTTP 지원 (redirection, caching, ...)• 14개 이상의 View template engine• Content negotiation• 프로그램 실행이 빠름

44 / 62

Page 45: Node.js 시작하기

DEMO: Express

1. install express-generator2. create project3. start4. add users.POST()

45 / 62

Page 46: Node.js 시작하기

Demo: socket.iohttps://github.com/HueyPark/Node.js-101/tree/master/chatServer

Page 47: Node.js 시작하기

socket.io

Featuring the fastest and most reliable real time engine

가장 빠르고 안전한 실시간 (클라이언트와양방향 통신) 엔진

47 / 62

Page 48: Node.js 시작하기

특징

• Microsoft Office, Yammer, Zendesk,

Trello에서 사용

• 지속적인 업데이트 중

• 엄청나게 강력하고, 쉽게 사용할 수 있음

48 / 62

Page 49: Node.js 시작하기

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

Page 50: Node.js 시작하기

정리

Page 51: Node.js 시작하기

Node.js의 단점

• 기본적으로 single thread로 동작하여

CPU 의존성이 높은 경우 적합하지 않음

• callback이 중첩될 경우 지옥이 펼쳐짐

• JavaScript의 한계51 / 62

Page 52: Node.js 시작하기

몇 가지 대안들

• callback이 중첩될 경우 지옥이 펼쳐짐??• promise: ES6 표준에 포함된 새로운 문법,

비동기 JavaScript 코드 작성을 도와줌

http://www.ecma-international.org/ecma-262/6.0/#sec-constructor-properties-of-

the-global-object-promise

52 / 62

Page 53: Node.js 시작하기

몇 가지 대안들

JavaScript의 한계??JavaScript Compiler!!

53 / 62

Page 54: Node.js 시작하기

Node.js의 장점

event loop??non-blocking I/O??

54 / 62

Page 55: Node.js 시작하기

Node.js의 장점

event loop??non-blocking I/O??

55 / 62

Page 56: Node.js 시작하기

Node.js의 장점

JavaScript!!full stack 개발 가능

56 / 62

Page 57: Node.js 시작하기

Node.js의 장점

node package manager

풍부한 생태계(16만 모듈!!)

57 / 62

Page 58: Node.js 시작하기

http://githut.info

58 / 62

Page 59: Node.js 시작하기

참고자료

Page 60: Node.js 시작하기

참고자료

• 공식 홈페이지: https://nodejs.org/

• Node.js 알아보기(Microsoft tech days mini 발표자료, 김명신):http://www.microsoftvirtualacademy.com/training-courses/saturedaynoon-with-javascriptfriend

60 / 62

Page 61: Node.js 시작하기

참고자료

• 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

Page 62: Node.js 시작하기

질문과 답변