on
Node.js 스터디 : 웹 서버
Node.js 스터디 : 웹 서버
1.
http 모듈을 사용하여 서버 객체를 만들 수 있다.
var http = require('http'); // 웹 서버 객체를 만든다 var server = http.createServer(); // 웹 서버를 시작하여 3000번 포트에서 대기한다 var port = 3000; server.listen(port, function() { console.log('웹 서버가 시작되었습니다 : %d', port); });
require로 http 모듈을 불러온다.
http 모듈을 로딩했을 대 반환되는 객체에 createServer() 메소드가 정의되어 있다. 이 메소드를 호출하여 서버 객체를 만들 수 있다.
listen() 메소드로 웹 서버가 실행된다. 특정 포트(port)에서 대기하도록 한다.
//웹 서버를 시작하여 192.168.0.5 IP와 3000번 포트에서 대기하도록 설정 var host = '192.168.118.**'; var port = 3000; server.listen(port, host, '50000', function(){ console.log('웹 서버가 시작되었습니다. : %s %d', host, port); });
이더넷 카드가 여러개 있는 경우에는 IP 주소가 여러 개 존재하기 때문에 특정 IP를 지정하면서 서버를 실행해야 한다.
host에 자신의 IP주소를 입력하면 된다.
* 클라이언트가 웹 서버에 요청할 때 발생하는 이벤트
connection - 클라이언트가 연결하여 연결이 만들어 질 때
request - 클라이언트가 요청할 때
close - 서버를 종료할 때
var http = require('http'); //웹 서버 객체를 만든다 var server = http.createServer(); //웹 서버를 시작하여 3000번 포트에서 대기하도록 설정한다 var port = 3000; server.listen(port, function() { console.log('웹 서버가 시작되었습니다'); }); //클라이언트 연결 이벤트 처리 server.on('connection', function(socket){ var addr = socket.address(); console.log('클라이언트가 접속했습니다. : %s, %d', addr.address, addr.port); }); server.on('request', function(req, res){ console.log('클라이언트 요청이 들어왔습니다'); console.dir(req); res.writeHead(200, {"Content-Type" : "text/html; charset=utf-8"}); res.write(""); res.write(""); res.write(" "); res.write(" 응답 페이지"); res.write(" "); res.write(" "); res.write(" 노드제이에스로부터의 응답 페이지"); res.write(" "); res.write(""); res.end(); }); //서버 종료 이벤트 처리 server.on('close', function() { console.log('서버가 종료됩니다'); });
클라이언트(웹 브라우저)가 웹 서버에 연결되면 connection 이벤트가 발생한다.
on() 메소드를 호출한다. 첫 번째 파라미터로 connection 이벤트 이름을 전달, 두번째로 콜백 함수 전달한다.
콜백함수가 호출될 때는 socket이 파라미터로 전달된다. socket은 클라이언트 연결 정보를 담고 있다. -> address() 메소드를 호출하여 클라이언트의 IP와 포트 정보를 확인할 수 있다.
클라이언트가 특정 패스로 요청을 하면 request 이벤트가 발생한다. on() 메소드를 이용해 이벤트 처리한다.
서버에서 응답을 보내도록 한다.
그 다음에 localhost:3000에 접속해본다.
이런 식으로 다양한 정보(클라이언트가 접속한 IP와 포트, req 객체에 든 정보들)를 알 수 있다.
사이트에 들어갔을 때 나타나는 화면
res객체의 writeHead(), write(), end() 메소드를 사용하여 클라이언트로 응답을 보낼 수 있다. 이 중 end() 메소드는 응답을 모두 보냈다는 것을 의미하며, end() 메소드가 호출될 때 클라이언트로 응답을 전송한다.
writeHead(statusCode [, statusMessage] [, headers]) : 응답으로 보낼 헤더를 만든다.
write(chunk [, encoding] [, callback]) : 응답 본문(body) 데이터트
from http://garysummers.tistory.com/25 by ccl(A) rewrite - 2021-08-03 17:26:21