[Node.js] http 모듈

Vorhandenheit ·2021년 10월 26일
0

JS/Node 

목록 보기
19/63
post-thumbnail

http

const http = require('http') // http 모듈을 require 메소드를 통해서 불러와 http 변수에 저장

const server = http.createServer();
server.on('request', (request, response) => {

})

http 트랜잭션 해부에 나오는 예시인데, const http라는 변수에 무엇을 불러오는 걸까 궁금해서 찾다보니, 'http'라는 모듈을 불러옴을 알게되었습니다. 하지만 node.js를 시작할 때 이걸 왜 불러오는걸까요?

1. http 모듈이란?

http 모듈은 TCP/IP를 기반으로 둔 프로토콜로, HTML 페이지를 전달하는데 사용하는 프로토콜입니다. 쉽게 말하면 http로 데이터를 주고받기 위해 필요한 코드의 모음이 http 모듈입니다. 이 http 모듈을 사용해서 웹 서버를 만들고 데이터를 요청하고 응답받을 수 있습니다.

2. http 모듈 구성

http 모듈에는 대표적으로

  • server 객체
  • response 객체
  • request 객체
    가 있습니다. 이제 각 객체가 어떤 역할을 하는지 알아보겠습니다.

(1) Server 객체

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

  • http 서버 시작 createServer()
const server = http.createServer() //웹 서버 생성, server 객체를 생성해서 반환.

http.createServer([requestListener])
Server 객체를 반환 합니다. requestListener 전달인자는 선택적 사항으로 요청 이벤트 발생시 수행될 콜백을 지정합니다.
이 콜백은 IncomingMessage, ServerResponse 두개를 전달인자로 받습니다.

  • IncomingMessage : HTTP 서버나 HTTP 클라이언트는 IncomingMessage 객체를 생성합니다. 서버 쪽에서는 클라이언트 요청이 IncomingMessage가 되고 클라이언트쪽에서는 서버의 응답이 IncomingMessage 객체가 됩니다.
  • ServerResponse : request 이벤트 수신 시 내부적으로 serverResponse 객체를 생성합니다. 이 객체는 클라이언트 요청에 대한 응답을 구성하고 전송합니다.

A. 메서드

  • server.listen(port[,callback]) : 서버를 실행함
let server = http.createServer()
server.listen(8000)
  • server.close([callback]) : 서버를 종료함
let server = http.createServer()
server.listen(2000)
server.close() // 서버 종료

B. 이벤트

server 객체는 EventEmitter 객체를 기반으로 만들어졌습니다. (이건 추후에...)

  • server.on('request', callback) : 클라이언트가 요청할 때 발생하는 이벤트
  • server.on('connection', callback) : 클라이언트가 접속할 때 발생하는 이벤트
  • server.on('close', callback) : 서버가 종료될 때 발생하는 이벤트
  • server.on('checkContinue', callback) : 클라이언트가 지속적인 연결을 하고 있을 때 발생하는 이벤트
  • server.on('upgrade', callback) : 클라이언트가 HTTP 업그레이드를 요청할 때 발생하는 이벤트
require('http').createServer((request, response) => {
  response.
}).listen(8000)

(2) request 객체

request 객체는 http.IncomingMessage 객체에 전달됩니다. 클라이언트 요청에 대한 기능을 정리하고있습니다

A. 객체 속성

  • url 속성을 사용한 페이지 구분 : 클라이언트가 요청한 URL을 나타냄
    request의 url 경로를 변수에 담은 후 if문에 따라 처리
http.createServer(function (request, response) {
	let pathname = url.parse(request.url).pathname;
  	if (pathname == '/') {
    }
  else (pathname == '/OtherPage.html') {
  }
})
  • method 속성을 사용한 페이지 구분 : 클라이언트의 요청 방식을 나타냄
    GET, POST, PUT, DELETE
http.createServer((request, response) => {
	if (request.method == 'GET') {
    }
  else if (request.method == 'POST') {
  }
})
  • GET 요청 매개변수 추출

    var query = url.parse(request.url, true).query

http.createServer((request, response) => {
	var query = url.parse(request.url, true).query; //Get 요청 매개변수 추출
})
  • POST 요청 매개변수 추출
    POST 방식은 request 이벤트 발생한 후 객체의 data 이벤트로 데이터가 전달, 클라리언트의 POST방식 요청시에는 매개변수를 추출해 내부 로직으 ㄹ처리
http.createServer((request, response) => {
	request.on('data', function(data) {
    	console.log('POST Data': +data)
    })
})
let data = ''
response.on ('data', function(chunk) {
	data = data + chunk
})

request.on('data', function(data) {}) : request로 들어온 데이터를 콜백함수의 data 인자값으로 일정 기준으로 조각내어서 넣어줍니다.
조각을 내서 넣어주기 때문에 body += data를 넣어줍니다.

let body = []
request.on('dat', (chunk) => {
	body.push(chunk)
}).on('end, () => {} => {
	body = Buffer.concat(body).toString()      
})

request.on('end', function() => {}) : request 데이터를 다 받고나서 작동합니다.
body에 request에 받은 모든 데이터를 querystring 형식으로 바꿔서 다시 post로 담습니다.

(3) reponse 객체

response 객체는 http.serverResponse라는 객체로 전달됩니다. 서버에서 클라이언트로 리턴되는 응답에 대한 기능을 정리하고 있습니다.

A. 메서드

  • response.writeHead(statusCode[, statusMessage][, headers]) : 응답 헤더를 작성
  • response.end([data]][, encoding][, callback]) : 응답 본문을 작성
require('http').createServer(function (request, response) {
	response.writeHead(200, { 'content-Type' : 'text/html' });
  	response.end('<h1>Hello World!</h1>');
}).listen(8000)

profile
읽고 기록하고 고민하고 사용하고 개발하자!

0개의 댓글