[Node.js] 를 사용한 간단한 웹 서버 여는 방법



Node.js 가 대세가 되고 여러 곳에서 사용함에 따라, 학습을 시작하게 되었다. 
먼저 간단하게 http 모듈과 express 모듈을 사용하여 웹 서버를 만드는 것을 해보았다. 
Do it Node.js 강좌와 책을 보고 학습하고 기본적인 내용정도만 정리하려고 한다. 
초심자가 학습할 수 있고 , 강의도 제공되기 때문에 좋은 책인 듯 하다. 

해당 책을 구매해서 사용하는 것을 추천한다. ( 초기 학습에는 강좌와 책이 함께 있는 게 가장 좋은 듯 )

- http 모듈을 이용한 웹 서버 만들기 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var http = require('http');
 
var server = http.createServer();
 
var host = 'localhost';
var port = 3000;
server.listen(port, host, 50000function(){
    console.log('웹서버 실행됨.');
});
 
server.on('connection'function(socket){
    console.log('클라이언트가 접속했습니다.');
});
 
server.on('request'function(req,res){
    console.log('클라이언트 요청이 들어왔습니다.');
    // console.dir(req);
    
    res.writeHead(200, {"Content-Type":"text/html;charset=utf-8"});
    res.write('<h1>웹 서버로 부터 받은 응답입니다. </h1>');
    res.end();
});
 
cs


>> 결과 




- http 모듈을 이용한 웹 서버 만들기 ( 사진 보여주기 >>  사진 경로 지정 필요 )  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var http = require('http');
var fs = require('fs');
 
var server = http.createServer();
 
var host = 'localhost';
var port = 3000;
server.listen(port, host, 50000function(){
    console.log('웹서버 실행됨.');
});
 
server.on('connection'function(socket){
    console.log('클라이언트가 접속했습니다.');
});
 
server.on('request'function(req,res){
    console.log('클라이언트 요청이 들어왔습니다.'); 
    
    var filename = './doggy.png';
    
    fs.readFile(filename, function(err, data){ 
        res.writeHead(200, {"Content-Type":"image/png"});
        res.write(data);
        res.end();
    });
});
 
cs


>> 결과 



- express 를 이용한 간단한 웹 서버 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var express = require('express');
var http = require('http');
 
var app = express();
 
// express 포트 설정 
app.set('port', process.env.PORT || 3000);
 
// 미들웨어 함수 등록 (클라이언트 요청이 들어 왔을 때, 호출 됨)
app.use(function(req, res, next){
    console.log('첫 번째 미들웨어 호출됨');
    
    res.writeHead(200, {"Content-Type" : "text/html;charset=utf8"});
    res.end('<h1>서버에서 응답한 결과입니다. </h1>');
});
 
// 서버 생성 
var server = http.createServer(app).listen(app.get('port') , function(){
    console.log('익스프레스로 웹 서버 실행 : ' + app.get('port'));
}); 
cs


>> 결과 



- express 를 이용한 간단한 웹 서버 2  ( 중복 미드웨어 사용 ) 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
var express = require('express');
var http = require('http');
 
var app = express();
 
// express 포트 설정
app.set('port', process.env.PORT || 3000);
 
// 미들웨어 함수 등록 ( 클라이언트 요청 들어오면 호출됨 )
app.use(function(req,res,next){
    console.log('첫 번째 미들웨어 호출됨'); 
    req.user = "gohn"
    // 그 다음 미들웨어가 요청을 받아서 처리한다. 
    next(); 
});
 
app.use(function(req, res, next){ 
    console.log('두번째 미들웨어 호출');
    
    res.writeHead(200, {"Content-Type" : "text/html;charset=utf-8"});
    res.end('<h1>서버에서 응답한 결과입니다. '+ req.user + '</h1>')
});
 
// 서버 생성
var server = http.createServer(app).listen(app.get('port'), function(){
   console.log('익스프레스로 웹 서버 실행 : ' + app.get('port')) ;
});
cs


>> 결과 




- expresss를 사용한 Json 객체 보내기 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
var express = require('express');
var http = require('http');
 
var app = express();
 
// express 포트 설정
app.set('port', process.env.PORT || 3000);
 
// 미들웨어 함수 등록 ( 클라이언트 요청 들어오면 호출됨 )
app.use(function(req,res,next){
    console.log('첫 번째 미들웨어 호출됨'); 
    req.user = "gohn"
    
    // 그 다음 미들웨어가 요청을 받아서 처리한다. 
    next(); 
});
 
app.use(function(req, res, next){ 
    console.log('두번째 미들웨어 호출');
    
    res.writeHead(200, {"Content-Type" : "text/html;charset=utf-8"});
//    res.end('<h1>서버에서 응답한 결과입니다. '+ req.user + '</h1>');
    
    // 객체를 넘겨본다. 
    var person = {name:'반지의제왕', age:'1000'} ;
//    res.send(person);
    var personStr = JSON.stringify(person);
    res.end(personStr);
});
 
// 서버 생성
var server = http.createServer(app).listen(app.get('port'), function(){
   console.log('익스프레스로 웹 서버 실행 : ' + app.get('port')) ;
});
cs


>> 결과




- redirect 하는 방법 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var express = require('express');
var http = require('http');
 
var app = express();
 
// express 포트 설정 
app.set('port', process.env.PORT || 3000);
 
// 미들웨어 함수 등록 (클라이언트 요청이 들어 왔을 때, 호출 됨)
app.use(function(req, res, next){
    console.log('첫 번째 미들웨어 호출됨');
    
    res.redirect('http://melonicedlatte.com');
});
 
// 서버 생성 
var server = http.createServer(app).listen(app.get('port') , function(){
    console.log('익스프레스로 웹 서버 실행 : ' + app.get('port'));
}); 
cs



- 요청한 파라미터 확인 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var express = require('express');
var http = require('http');
 
var app = express();
 
// express 포트 설정 
app.set('port', process.env.PORT || 3000);
 
// 미들웨어 함수 등록 (클라이언트 요청이 들어 왔을 때, 호출 됨)
app.use(function(req, res, next){
    console.log('첫 번째 미들웨어 호출됨');
    
    var userAgent = req.header('User-Agent');
    var paramName = req.query.name;
    
    res.send('<h3>서버에서 응답. User-Agent => ' + userAgent + '</h3>' + 
            '<h3> paramName  => ' + paramName + '</h3>' );
});
 
// 서버 생성 
var server = http.createServer(app).listen(app.get('port') , function(){
    console.log('익스프레스로 웹 서버 실행 : ' + app.get('port'));
}); 
cs


>> 결과 




- 특정 폴더를 자유롭게 접근 할 수 있게 하는 static 모듈 



같은 폴더에 public 에 이미지를 넣어둔다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
var express = require('express');
var http = require('http');
var static = require('serve-static');
var path = require('path');
 
var app = express();
 
// express 포트 설정 
app.set('port', process.env.PORT || 3000);
 
// public 폴더 안에 있는 파일을 사용할 수 있는 static 
app.use(static(path.join(__dirname, "public")));
 
// 미들웨어 함수 등록 (클라이언트 요청이 들어 왔을 때, 호출 됨)
app.use(function(req, res, next){
    console.log('첫 번째 미들웨어 호출됨');
    
    var userAgent = req.header('User-Agent');
    var paramName = req.query.name;
    
    res.send('<h3>서버에서 응답. User-Agent => ' + userAgent + '</h3>' + 
            '<h3> paramName  => ' + paramName + '</h3>' );
});
 
// 서버 생성 
var server = http.createServer(app).listen(app.get('port') , function(){
    console.log('익스프레스로 웹 서버 실행 : ' + app.get('port'));
}); 
cs


>> 결과