Mini Node Server_Sprint

Hanbin Lee·2021년 5월 22일
0

codestates

목록 보기
6/7

HTTP module 공식문서

Web Server란 HTTP 요청을 처리하고 응답을 보내주는 프로그램을 말한다.

HTTP 모듈을 사용하면 node.js 환경에서 HTTP 요청을 보내거나 응답을 받을 수 있게 해준다.

서버 생성

require("")를 사용하여 http모듈을 불러올 수 있다.

createServer를 사용하여 웹 서버 객체를 만든다.

const http = require('http');

const server = http.createServer();
server.on('request',(request, response) => {
	// 여기서 작업이 진행된다.
});

// 상위 축약문법
const server = http.createServer((request, response) => {
  // 여기서 작업이 진행된다.
});

포트와 ip를 지정하고 listen 메소드를 사용하면 서버를 실행할 수 있다.

const PORT = 5000;
const ip = 'localhost';

server.listen(PORT, ip);

Mini Node Server 스프린트

HTTP 트랜잭션 해부 공식문서를 참고하며 스프린트를 진행했다.

server 라는 웹 서버 객체를 만들고, 서버를 실행하기 위해 포트와 ip를 지정한다.

const http = require('http');

const PORT = 5000;
const ip = 'localhost';

const server = http.createServer((req, res) => {
);

server.listen(PORT, ip, () => {
	console.log(`http server listen on ${ip}:${PORT}`);
);

request를 구조분해하여 methodurl을 분리한다.
굳이 분리하지 않아도 .을 활용해 불러올 수 있다.

const server = http.createServer((req, res) => {
	const { method, url } = req;
);

요청에 대한 bodydataend 이벤트를 이벤트 리스너에 등록해서 데이터를 받아 올 수 있다.
data이벤트에서 발생시킨 청크는 Buffer이다. 따라서 data이벤트에서 청크를 배열로 받아 end이벤트에서 배열을 합친뒤 문자열로 바꿔준다.

let body = []
req.on('data', (chunk) => body.push(chunk))
.on('end', () = body = Buffer.concat(body).toString());

따라서 메소드가 POST이고 urlupper일때, body를 대문자로 변경해주고 urllower이면 소문자로 변경해주면 된다.

cors를 허용하기 위해 Allow 범위를 지정해주어야 한다.

cors란?

Cross Origin Resource Sharing의 약자로, cross origin에서 리소스를 요청하여 사용한다는 뜻이다. 즉, 다른 origin에서 다른 서버에 있는 리소스를 요청하여 사용한다는 뜻이다.
보안상의 이유로 브라우저에서는 스크립내에서 초기화되는 cross-origin HTTP 요청을 제한한다. 하지만 서버가 Allow 한 범위 내에서는 cross origin 요청을 허용한다.

Allow 범위를 defaultCorsHeader 라는 변수에 저장을 하고, writeHead 메소드를 사용해 요청에 대한 응답 헤더에 Allow 범위를 입력한다.

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
};

res.writeHead(200, defaultCorsHeader);

따라서, 다른 origin 에서 OPTIONS 메소드를 통해 preflight 요청을 하면 서버에서 Allow 헤더를 응답하고 해당 헤더에 조건이 맞다면 서버 요청을 이어나갈 수 있다.

최종적으로 변환된 body(data)를 end 메소드를 사용하여 응답하면된다.

res.end(body);
profile
안녕하세요 백엔드 개발자 이한빈 입니다 :)

0개의 댓글