Upload
outsider-byun
View
2.800
Download
3
Embed Size (px)
DESCRIPTION
2월 11일 OKJSP 정기세미나에서 발표한 발표자료입니다.
Citation preview
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����������� ������������������ :[email protected]