[node.js] http 모듈로 웹 서버 구축해보기

Hyebin·2021년 5월 13일
1

node.js

목록 보기
3/6
post-thumbnail

HTTP 모듈

Node.js에서 http 모듈은 웹 서버를 구동하기 위한 기본적인 웹 모듈이다.

http 모듈을 사용해 웹 서버 구축하는 과정을 공부해보았다.
아래 내용은 HTTP 요청/응답 처리 과정이 자세하게 설명되어 있는 node.js의 HTTP 트랜잭션 해부 공식 문서를 정리한 내용이다.

우선 모듈을 사용하기 위해서 http 모듈을 require로 불러와야한다.

const http = require('http');

서버 생성을 위해 createServer()listen()메서드가 필요하다.

  • createServer()
    요청을 처리하기 위한 웹 Server 객체를 생성한다.
  • listen(port, hostname, backlog, listeningListener)
    접속하는 포트를 할당하여 서버를 요청대기 상태로 만든다.
const server = http.createServer((req,res) => {
  //요청과 응답 처리는 여기서
})

//3000포트에 서버 활성화
server.listen(3000, () => {
	console.log('`http server listen on 3000`)
})

request / response

Http 요청이 서버에 오면 node가 트랜잭션을 다루기 위해 request와 response 객체를 전달해 요청 핸들러 함수를 호출한다.

request에는 요청한 정보가 response에는 요청에 대한 응답 내용이 담긴다.

request 객체

클라이언트가 서버로 요청할 때 보낸 method, url, header, body의 정보가 담겨있어 필요한 정보를 뽑아서 처리할 수 있다.

const server = http.createServer((req,res) => {	
  //요청 메서드, url, 헤더를 가져온다.
  {method, url, headers} = req;
})

body에 담긴 데이터는 streamBuffer 형태로 들어오기 때문에 chunk 파라메터로 받아 문자열로 바꾸는 작업이 필요하다.

  • .on : 이벤트 등록
let body = []
const server = http.createServer((req,res) => {	
  req.on('data', (chunk) => {
    //chunk는 Buffer 형태 데이터이다.
  	body.push(chunk)
  }).on('end', () => {
    //문자열로 변환
  	body = Buffer.concat(body).toString()
  })
})

response 객체

응답 상태 코드나 헤더 설정을 해줄 수 있고, 응답 데이터를 보낼 수 있다.

  • response.statusCode(상태코드) : 상태코드 설정

  • response.setHeader('Content-Type', 'application/json')
    : 응답 헤더 설정

  • response.writeHead(상태코드, 헤더)
    : 상태코드와 헤더를 같이 설정

  • response.end(보낼 데이터)
    : 보낼 데이터를 body에 담아 전달
    end 메서드를 쓰기전 상태코드와 헤더가 설정되어 있어야한다.

간단 예제

대문자 문자열 소문자로 만드는 POST 요청을 받을 때 요청에 맞는 응답을 하는 서버를 작성해보자.

const http = require('http');

//서버 생성
const server = http.createServer((req,res) => {	
  	//POST 요청 && /lower 일때 
	if(req.method === 'POST' && req.url === '/lower') {
    	let body = []
    	req.on('data', chunk => {
			body.push(chunk)    
    	}).on('end', () => {
          //buffer 데이터를 문자열화 
        	body = Buffer.concat(body).toString()
          //상태코드와 응답헤더를 설정한다.
          res.writeHead(200, defaultCorsHeader) 
          //요청 데이터를 소문자로 변환해서 응답 body에 담아 보낸다.
          res.end(body.toLowercase())
        }) 
    }
})

const defaultCorsHeader = {
  'Access-Control-Allow-Origin': '*',
  'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  'Access-Control-Allow-Headers': 'Content-Type, Accept',
  'Access-Control-Max-Age': 10
};

0개의 댓글