이전 글
NodeJS HTTP request(요청) 이벤트 처리
웹서버라 함은 말 그대로 웹환경(http 이용)에서 service를 제공하는 역할을 합니다.
여기서 서비스란 브라우저같은 웹 클라이언트가 요청한 웹페이지, 이미지, 첨부파일 등을 응답해주는 것입니다.
NodeJS의 http 모듈 또한 요청을 처리하기 위한 기능을 제공하고 있습니다.
server 객체 이벤트
http모듈을 이용해 생성한 nodeJS 웹서버는(이하 server) 다음과 같이 크게 세가지 이벤트가 있습니다.
이벤트 |
설명 |
connection |
클라이언트가 서버에 http로 통신하기 위해 tcp/ip 로 연결을 하게 되면 발생하는 이벤트입니다. |
request |
클라이언트와 서버가 연결된 이후에 http 요청을 보내왔을 때 발생하는 이벤트입니다.
가장 많이 사용되며 이때 요청에 대한 처리를 구현해줍니다. |
close |
서버가 종료될 때 발생하는 이벤트입니다. |
connection 이벤트 - 클라이언트와의 연결
connection 이벤트는 클라이언트와 웹서버가 http로 통신하기 위해 연결을 맺게 되는데, 연결을 맺은 직후 발생하는 이벤트입니다.
이때 실행될 이벤트 핸들러(콜백함수)를 두번째 인자로 넘길 수 있스며, 이벤트 발생시에는 콜백함수의 인자로 socket 객체가 넘어오게 됩니다.
socket 객체는 tcp 소켓으로 클라이언트와의 연결 정보가 담겨있습니다.
다음과 같이 연결된 클라이언트의 주소와 포트번호를 얻을 수 있습니다.
내 pc 내에서 브라우저로 접속한 경우 ip주소가 ::1 과 같이 나올 수 있는데 이는 ipv6 주소 체계에서 localhost를 가리키는 주소입니다.
포트 번호의 경우 클라이언트 프로그램(ex: 브라우저) 의 포트번호가 리턴됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
var http = require('http');
var server = http.createServer();
var port = 7070;
server.listen(port, function() {
console.log('서버 start');
});
// 클라이언트와 연결 이벤트
server.on('connection', function(socket) {
console.log('클라이언트 정보 - ip : %s, port : %d', socket.remoteAddress, socket.remotePort);
}); |
cs |
request 이벤트 - 클라이언트로부터의 요청
request 이벤트는 연결 이후 클라이언트가 http 요청(request)를 보냈을때 발생하는 이벤트입니다.
가장 많이 사용될 이벤트이며, 그만큼 중요합니다.
이벤트가 발생하면 콜백함수로 request와, response 객체가 넘어옵니다. 이 둘은 각각 http 요청과 응답을 구현한 객체입니다.
request 객체에는 http 요청 클라이언트에 대한 정보들이 담겨있습니다.
이 정보에는 http 요청 파라미터, 클라이언트의 정보, http 요청 헤더, 요청 본문 등이 포함됩니다.
response 객체는 클라이언트에게 http 응답을 하기 위해 사용되는 객체입니다.
마찬가지로 response 메세지 헤더, 상태코드, 응답메시지, 응답 본문(실질적인 데이터) 등을 조작할 수 있습니다.
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 port = 7070;
server.listen(port, function() {
console.log('server start');
});
server.on('request', function(req, res) {
res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
res.write("<html>");
res.write(" <head>");
res.write(" <title>node JS Web Test</title>");
res.write(" </head>");
res.write(" <body>");
res.write(" <h1> node JS 응답 페이지 입니다.</h1>");
res.write(" </body>");
res.write("</html>");
res.end();
}); |
cs |
위 웹서버는 request 객체는 사용하지 않았지만 요청이 오는 경우 writeHead() 메서드를 통해 http 헤더에 상태값 200을 넘김으로써 브라우저에게 정상 처리 되었다는 사실과 지금부터 응답할 http 메시지 본문은 utf-8로 인코딩된 html 문서라는것을 알려주고 있습니다.
이후 write() 메서드를 통해 html의 마크업 문자열을 출력합니다.
실질적으로는 end() 메서드가 실행되면서 문자열의 끝이라는 사실을 알려주는데, 이때 클라이언트에게 응답 데이터가 전달됩니다.
다음과 같이 end() 메서드를 통해 간단히 응답하는것도 가능합니다.
1 |
res.end('<html><body><h1>Hello, World!</h1></body></html>'); |
cs |
NodeJS http 가이드 문서
'NodeJS' 카테고리의 다른 글
[Node.js] NodeJS 웹서버에서 스트림을 이용하여 클라이언트에게 파일 응답 (0) | 2018.02.17 |
---|---|
[Node.js] NodeJS 웹서버에서 클라이언트에게 파일 응답하기 (0) | 2018.01.31 |
[Node.js] NodeJS http 모듈 [1] 웹서버 작동 방법 (0) | 2018.01.28 |
[Node.js] NodeJS 로깅 (Logging) (1) | 2018.01.28 |
[Node.js] NodeJS 파일 입출력 [3] 스트림 단위 입출력 (0) | 2018.01.27 |