nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

25
nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Upload: cinari4

Post on 27-Nov-2014

288 views

Category:

Education


0 download

DESCRIPTION

Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어 connect http-proxy

TRANSCRIPT

Page 1: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

nodejs

트래픽 라우팅, 파일 서비스, 미들웨어

Page 2: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

간단한 파일 서버

Page 3: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

간단한 정적 파일 서버 만들기

1. HTTP서버를 생성 -> 대기

2. 요청 URL을 파싱하여 파일 위치 결정

3. 파일이 존재하는지 확인

4. 파일이 존재->파일열기

5. 파일이 없으면, 적절하게 응답

6. 응답

7. 다음요청을 대기

Page 4: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

http.createServer(function (req, res) {

pathname = base + req.url;

console.log(pathname);

path.exists(pathname, function(exists) {

if (!exists) {

} else {

});

}).listen(8124);

console.log('Server running at 8124/');

Page 5: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

if (!exists) {

res.writeHead(404);

res.write('Bad request 404\n');

res.end();

}

Page 6: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

else { res.setHeader('Content-Type', 'text/html'); // 200 status - found, no errors res.statusCode = 200; // create and pipe readable stream var file = fs.createReadStream(pathname); file.on("open", function() { file.pipe(res); }); file.on("error", function(err) { console.log(err); }); }

Page 7: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

• __dirname : 현재 디렉토리

• 윈도우에서는 base를 ‘./’

• 멀티미디어는 node-mime모듈

Page 8: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

미들웨어

Page 9: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

미들웨어?

양 쪽을 연결하여 데이터를 주고 받을 수 있도록

중간에서 매개 역할을 하는 소프트웨어

JSGI / Connect

Page 10: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Connect

- 대표적인 nodejs 미들웨어

- Express와 연동가능

- 설치 : npm install connect

- Express 4.0에서는 더 이상 지원 X http://expressjs.com/4x/api.html#middleware

Page 11: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Simple connect

http.createServer(connect()

.use(connect.favicon())

.use(connect.logger())

.use(function(req,res){

res.end(‘hello world’);

})

).listen(8124);

Page 12: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

대표적 connect번들

• connect.static

• Connect.logger

• Connect.parseCookie

• Connect.parseSession

Page 13: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

connect.static

.use(connect.static(__dirname), {redirect:true})

- 브라우저 캐싱, 잘못된 형식의 URL보호 등

Page 14: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Connect.logger

.use(connect.logger(

{format : ‘dev’,

stream : writeStream})

- 요청들에 대한 로그를 스트림에 기록

- 용도에 맞는 로그 모드 제공(default, short, tiny, dev)

Page 15: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Connect.parseCookie

.use(connect.cookieParser())

.use(connect.kookieSession())

- 다음장에 예제

Page 16: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

사용자 정의 함수를 이용한

var app = connect()

.use(connect.logger('dev'))

.use(connect.cookieParser('mumble'))

.use(connect.cookieSession({key : 'tracking'}))

.use(clearSession)

.use(trackUser);

Page 17: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

사용자 정의 함수를 이용한

function clearSession(req, res, next) { if ('/clear' == req.url) { req.session = null; res.statusCode = 302; res.setHeader('Location', '/'); res.end(); } else { next(); } } next()는 미들웨어가 현재 요청을 처리 하지 않는경우, 오류가 있는경우

Page 18: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

라우터

Page 19: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

라우터

- 한 소스로부터 무언가를 받아서 다른 것으로 전달

- 대표적으로는 crossroads

- http://yourplace.org/article/urllllll http://yourplace.org/node/174

Page 20: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Crossroads대표적 모듈

- addRoute 라우팅 패턴설정

- Parse 문자열 파싱 후, 적절한 경로로 보냄

- matched.add 라우팅 핸들러를 대응하는 경로에 매핑

Page 21: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Crossroads대표적 모듈

http.createServer(function(req,res) {

crossroads.parse(req.url);

res.end('and that\'s all\n');

}).listen(8124);

Page 22: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

Crossroads대표적 모듈

crosroads.addRoute('/category/{type}/:pub:/:id:', function(type,pub,id){

if (!id && !pub){

} else if (!id) {

} else {

}

});

http://... /category/history

http://... /category/history/journal

http://... /category/history/journal/123

Page 23: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

프록시

Page 24: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

프록시

- 여러 개의 다른 위치에서 요청된 내역을 하나의 서버로 라우팅 하는 방법

- 로드밸런싱, 캐시, 보안, 원래의 요청자를 감추는 목적 때문에 사용

Page 25: Nodejs 트래픽 라우팅, 파일 서비스, 미들웨어

http-proxy

httpProxy.createServer(8124, ‘localhost’).listen(8000)

//8000번 포트에서 대기하다가 8124로 전달

- 정방향, 역방향 프록시 제공

- 웹소켓, HTTPS지원