Node.js & MongoDB

요청, 응답, 서버 객체 이해

http.ClientRequest 객체

ClientRequest 객체는 HTTP 클라이언트 구성을 위해 http.request() 호출 시 내부적으로 생성된다.

ClientRequest 객체를 구현하려면 http.request()를 다음과 같이 호출한다.

http.request(options, callback);

options 전달인자는 클라이언트 HTTP 요청을 열고 서버에 전송하는 방법에 대한 속성을 지정한다. callback 전달인자는 서버에 요청이 보내진 후 불리게 되는데, 서버로 부터 받은 응답을 처리한다.

var http = require('http');
var options = {
  host: '127.0.0.1',
  path: '/',
  port: '8080',
  method: 'POST'
};
var req = http.request(options, function(response){
    var str = '';
    response.on('data, function(chunk){
        str += chunk;
    });
    response.on('end', function(){
        console.log(str);
    });
});
req.end();

ClientRequest 객체는 서버의 응답을 받았을 때 발생하는 response 이벤트를 처리하는 리스너를 추가할 수 있다.

http.ServerResponse 객체

HTTP 서버는 request 이벤트 수신 시 내부적으로 ServerResponse 객체를 생성한다. 이 객체는 request 이벤트 핸들러를 두 번째 전달인자로 받는다. ServerResponse 객체를 사용해 클라이언트 요청에 대한 응답을 정형화해 보낸다.

http.IncomingMessage 객체

HTTP 서버나 HTTP 클라이언트는 IncomingMessage 객체를 생성한다. 서버 단에서는 클라이언트 요청이 IncomingMessage 객체가 되고 클라이언트 단에서는 서버의 응답이 incomingMessage 객체가 된다.

HTTP Server 객체

Node.js의 HTTP Server 객체는 HTTP 서버를 구현하는 데 기초가 되는 프레임워크를 제공한다. Server 객체는 EventEmitter를 구현해 이벤트를 방출한다.

HTTP 서버를 시작하려면 아래와 같이 createServer() 함수를 사용해 Server 객체를 생성해야 한다.

http.createServer([requestListener])

이 함수는 Server 객체를 반환한다. requestListener 전달인자는 선택적인 사항으로 요청 이벤트 발생 시 수행될 콜백을 지정한다. 콜백은 두 개의 전달인자를 받는데 첫번째 전달인자인 IncomingMessage 객체는 클라이언트 요청을 받고, 두번째 전달인자로는 응답을 구성하고 전송하는 ServerResponse 객체를 지정한다.

서버 객체를 생성한 경우 Server 객체의 listen() 함수를 호출해 요청을 수신한다.

listen(port, [hostname], [backlog], [callback])

다음 코드는 HTTP 서버를 시작하고 8080 포트로 수신하는 예제며 요청 콜백 핸들러 함수가 createServer 함수에 전달되고 있다.

var http = require('http');
http.createServer(function(req, res){
    ...
}).listen(8080);

HTTP 서버를 정지시키려면 close() 함수를 사용한다.

close([callback])