http 모듈
HTTP와 관련된 내용은 다른 포스팅에서 자세히 적는게 나을듯 하다.
이 포스팅에서는 노드 서버 객체를 생성해서 서버를 띄우고
간단하게 url 값을 이용해서 띄우는 간단한 실습했던 내용을 적게될 것 같다.
웹 서버가 하는 일은 요청을 받고 그에 대한 응답을 전달하는 것.
var http = require('http');
var server = http.createServer(function(request, response) {
});
server.on('request', function(code) { // 클라이언트에서 요청 발생
console.log('Request ON');
});
server.on('connection', function(code) { // 클라이언트에서 접속 실행
console.log('Connection ON');
});
server.on('close', function(code) { // 서버 종료
console.log('Close ON');
});
server.listen(12345, function() {
console.log('웹서버 실행 중.. 주소 : 127.0.0.1:12345')
});
server 객체는 createServer() 메소드를 통해 생성하게 된다.
listen() 메소드는 listen(포트번호)로 형태의 메소드로
서버를 실행시킨다.
위의 예제 작성 후
브라우저 주소창에 127.0.0.1:12345 로 실행 시 실제 서버가 실행하는 것을 확인할 수 있다.
위의 예제에서 on 메소드는 이전 장에서 보았던
이벤트 핸들링을 하는 메소드와 동일하니
request, connection, close 이벤트를 처리하는 것이라는 점은 쉽게 알 수 있다.
resonse 객체
서버가 실행만 된다고 해서 웹페이지가 띄워지는 것이 아니다.
response 객체는 서버에 요청 시 어떤 값을 노출할지에 대한 내용을 담고 있는 객체다.
서버 요청 시 response에 대한 값을 지정하지 않으면
127.0.0.1:12345로 접속을 했어도 별 다른 동작이 일어나지 않을 것이다.
다음은 클라이언트 요청 시
응답 값을 지정해주어 화면에 Hello MY World!!!가 출력되도록 만드는 예제다.
var http = require('http');
var server = http.createServer(function(request, response) {
response.writeHead(200, {'Content-Type': 'text/html'});
response.end('<h1>Hello MY World!!!</h1>')
});
server.listen(12345, function() {
console.log('웹서버 실행 중.. 주소 : 127.0.0.1:12345')
});
writeHead()는 응답 헤더를 작성하여
응답 코드 값과 기타 정보를 응답 헤더에 적는다.
end()는 응답 본문 값을 담는다.
응답 코드는 요청 값에 대한 응답 상황을 의미하며,
간단하게 정의하자면 다음과 같다.
1XX |
처리 중 |
2XX |
성공 |
3XX |
리다이렉트 |
4XX |
클라이언트 오류 |
5XX |
서버 오류 |
response의 헤더에는 쿠키 값을 지정할 수 있다.
다음은 헤더에 쿠키 값을 지정하는 예시다.
var fs = require('fs');
var http = require('http');
var expireDate = new Date();
expireDate.setDate(expireDate.getDate() + 7);
http.createServer(function (request, response) {
response.writeHead(200, {
'Content-Type': 'text/html',
'Set-Cookie': ['lunch=bob', 'dinner=Chicken!;Expires =' + expireDate.toUTCString()]
});
response.end(request.headers.cookie);
})
}).listen(12345, function() {
console.log('웹 서버 실행 중..');
})
(expires 값은 쿠키 값의 유효 기간을 설정하는 부분)
쿠키 정보를 브라우저 개발자 모드에서도 확인할 수 있다.
F12 > Application > Cookies
request 객체
request 객체를 통해서 사용자의 요청이 일어날 때의 정보를 확인할 수 있다.
var http = require('http');
var fs = require('fs');
var url = require('url');
http.createServer(function(request, response) {
var pathname = url.parse(request.url).pathname;
var query = url.parse(request.url, true).query;
var cookie = request.headers.cookie;
if ( pathname == '/') {
var body = "";
if (query) {
body += 'query : ' + JSON.stringify(query);
}
if (cookie) {
body += "cookie : " + JSON.stringify(cookie);
}
response.writeHead(200, {'Content-Type':'text/html',
'Set-Cookie': ['fruit=banana', 'location=seoul']})
response.end(body);
} else if (pathname == '/otherPage') {
fs.readFile('./HTMLPage.html', function(error, data) {
response.writeHead(200, {'Content-Type' : 'text/html'});
response.end(data);
});
} else {
response.writeHead(302, {'Location': 'http://www.naver.com'});
response.end()
}
}).listen(12345, function() {
console.log('서버 접속 완료.');
});
위의 예시는 127.0.0.1:12345로 접근하게 되면
url의 parameter 값이 있으면 노출시키다.
또한 url path 값이 otherPage인 경우에는
다른 html 파일이 출력되도록 되어 있으며
서버에 지정되지 않은 path로 접근 시 www.naver.com으로 이동하도록 되어 있다.
위의 예시로 확인할 수 있듯이 사용자의 요청값 (request 객체)를 이용해서
요청 정보를 확인할 수 있다.