node.js at okjsp

Post on 25-May-2015

2.800 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

2월 11일 OKJSP 정기세미나에서 발표한 발표자료입니다.

TRANSCRIPT

2012.����������� ������������������  2.����������� ������������������  11Outsider����������� ������������������  at����������� ������������������  OKJSP정기세미나

server-sideJavaScript

is

I����������� ������������������  expected����������� ������������������  itbecause

Netscape����������� ������������������  actuallywanted����������� ������������������  to����������� ������������������  do����������� ������������������  that.

Brendan����������� ������������������  Eich,����������� ������������������  CTO����������� ������������������  at����������� ������������������  Mozilla

Event-Loop

Application

Application

File����������� ������������������  System

Application

File����������� ������������������  System

Database

Application

File����������� ������������������  System

Database Network

Application

File����������� ������������������  System

Database Network

Application

File����������� ������������������  System

Database Network

Input/Output

L1

L2

RAM

DISK

Internet 80,000,000ns

13,700,000ns

83ns

4.7ns

1ns

http://duartes.org/gustavo/blog/post/what-your-computer-does-while-you-wait

I/O����������� ������������������  latency

����������� ������������������  var����������� ������������������  result����������� ������������������  =����������� ������������������  db.query('쿼리');

����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

����������� ������������������  var����������� ������������������  result����������� ������������������  =����������� ������������������  db.query('쿼리');

����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

db.query('쿼리',����������� ������������������  function(result)����������� ������������������  {

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

});

����������� ������������������  var����������� ������������������  result����������� ������������������  =����������� ������������������  db.query('쿼리');

����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

db.query('쿼리',����������� ������������������  function(result)����������� ������������������  {

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

});

Sync

Async

코드실행

코드실행

DB����������� ������������������  조회

코드실행

DB����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

파일����������� ������������������  조회

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

파일����������� ������������������  조회

콜백실행

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

파일����������� ������������������  조회

콜백실행 콜백실행

Sync

Async

코드실행

DB����������� ������������������  조회

코드실행

파일����������� ������������������  조회

코드실행

코드실행

DB����������� ������������������  조회

파일����������� ������������������  조회

콜백실행 콜백실행

var����������� ������������������  server����������� ������������������  =����������� ������������������  require('http');

server.createServer();

server.on('request',����������� ������������������  function(req,����������� ������������������  res)����������� ������������������  {

});

server.listen(3000,����������� ������������������  'localhost');

console.log('서버가����������� ������������������  시작되었습니다.');

var����������� ������������������  server����������� ������������������  =����������� ������������������  require('http');

server.createServer();

server.on('request',����������� ������������������  function(req,����������� ������������������  res)����������� ������������������  {

});

server.listen(3000,����������� ������������������  'localhost');

console.log('서버가����������� ������������������  시작되었습니다.');

코드����������� ������������������  실행

var����������� ������������������  server����������� ������������������  =����������� ������������������  require('http');

server.createServer();

server.on('request',����������� ������������������  function(req,����������� ������������������  res)����������� ������������������  {

});

server.listen(3000,����������� ������������������  'localhost');

console.log('서버가����������� ������������������  시작되었습니다.');

코드����������� ������������������  실행

이벤트리스너����������� ������������������  등록

var����������� ������������������  server����������� ������������������  =����������� ������������������  require('http');

server.createServer();

server.on('request',����������� ������������������  function(req,����������� ������������������  res)����������� ������������������  {

});

server.listen(3000,����������� ������������������  'localhost');

console.log('서버가����������� ������������������  시작되었습니다.');

코드����������� ������������������  실행

이벤트리스너����������� ������������������  등록

콜백����������� ������������������  실행

Everything����������� ������������������  is

Non-blocking����������� ������������������  I/O

����������� ������������������  var����������� ������������������  result����������� ������������������  =����������� ������������������  db.query('쿼리');

����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

db.query('쿼리',����������� ������������������  function(result)����������� ������������������  {

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

});

����������� ������������������  var����������� ������������������  result����������� ������������������  =����������� ������������������  db.query('쿼리');

����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

db.query('쿼리',����������� ������������������  function(result)����������� ������������������  {

����������� ������������������  ����������� ������������������  ����������� ������������������  ����������� ������������������  //����������� ������������������  result를����������� ������������������  사용한다.

});

Block

non-Block

JavaScript����������� ������������������  on����������� ������������������  V8

Single����������� ������������������  Thread

Single����������� ������������������  Stack

console.log('Hello����������� ������������������  World');

Hello����������� ������������������  World

setTimeout(function()����������� ������������������  {

����������� ������������������  ����������� ������������������  console.log('World');

},����������� ������������������  2000);

console.log('Hello');

Hello����������� ������������������  World

setTimeout(function()����������� ������������������  {

����������� ������������������  ����������� ������������������  console.log('World');

},����������� ������������������  2000);

console.log('Hello');

while(true)����������� ������������������  {}

Hello����������� ������������������  World

ev_loop()

node����������� ������������������  execution����������� ������������������  stack

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

socket_readable(1)node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

socket_readable(1)

http_parse(1)

node����������� ������������������  execution����������� ������������������  

stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

socket_readable(1)

http_parse(1)

load(“index.html”)

node����������� ������������������  execution����������� ������������������  

stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

socket_readable(1)

http_parse(1)

node����������� ������������������  execution����������� ������������������  

stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

socket_readable(1)node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()

socket_readable(2)node����������� ������������������  

execution����������� ������������������  stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()

socket_readable(2)

http_parse(2)

node����������� ������������������  execution����������� ������������������  

stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()

socket_readable(2)

http_parse(2)

http_respond(2)

node����������� ������������������  execution����������� ������������������  

stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()

socket_readable(2)

http_parse(2)

node����������� ������������������  execution����������� ������������������  

stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()

socket_readable(2)node����������� ������������������  

execution����������� ������������������  stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

메모리에����������� ������������������  대한����������� ������������������  ����������� ������������������  두번째����������� ������������������  요청

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

file_loaded()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

file_loaded()

http_respond(1)

node����������� ������������������  execution����������� ������������������  

stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()

file_loaded()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

ev_loop()node����������� ������������������  

execution����������� ������������������  stack

index.html����������� ������������������  페이지����������� ������������������  요청

CommonJS

require('모듈명')

//����������� ������������������  app.jsvar����������� ������������������  app����������� ������������������  =����������� ������������������  module.exports����������� ������������������  =����������� ������������������  {};

//����������� ������������������  another.jsvar����������� ������������������  another����������� ������������������  =����������� ������������������  require('./app')

Questions...?

Blog����������� ������������������  :����������� ������������������  http://blog.outsider.ne.krTwitter����������� ������������������  :����������� ������������������  @outsiderisemail����������� ������������������  :outsideris@gmail.com

top related