Node.js http로 서버 만들기

승헌·2021년 6월 11일
0

express 모듈을 사용하지 않고 http로 서버를 만들기 위해 노력한 흔적입니다.

서버 생성하기

Node.js 공식문서에 나타난 http 사용 예시입니다.

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

- createServer 로 서버 만들기

createServer를 통해 서버를 만들 수 있습니다.

statusCode를 통해 상태코드를 200으로 정합니다.
200은 서버가 요청을 성공적으로 처리했다는 뜻입니다.

setHeader를 통해 헤더를 설정합니다.
res.setHeader('Content-Type', 'text/plain');는 컨텐츠 타입이 텍스트라는 의미입니다.

end를 통해 응답을 종료합니다.

- listen 으로 서버 대기시키기

listen을 통해 해당 경로에 접속한다면 반응할 수 있도록 서버를 대기시킵니다.

라우팅 처리하기

express를 사용한다면 get()을 통해 경로에 따라 요청을 처리할 수 있지만 http로만 서버를 구축하려면 if문을 통해 직접 처리해줘야 합니다.
단순하게 라우팅을 처리해봤습니다.

const http = require('http');
const fs = require('fs');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  if(req.url == '/'){
    res.writeHeader(200, { 'Content-Type', 'text/html' });
    res.end(fs.readFile('/index.html'));
  }else{
  
  }
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

위 방법은 한 파일안에 다 때려넣은 방법으로 실제로 개발할 때는 라우팅 관련된 코드를 따로 작성하여 빼놓는 게 좋을 것 같습니다.

- HTTP Method 처리

위와 같은 라우팅 처리에서 POST, GET과 같은 HTTP 메소드를 처리하려면 if문이 더 복잡해집니다.
에러 처리도 필요한데 추가하면 난리날 것 같습니다.

- 정적 파일

또한 위 코드를 보면 html만 보내주는데 실제로 웹사이트를 돌아가게 하려면 html뿐만 아니라 css, js와 같은 정적 파일도 보내줘야 합니다.

express에서는 정적 파일 제공과 관련된 기능이 있지만, express를 사용하지 않으므로 Content-Type을 각각 파일에 맞게 처리하도록 코드를 작성해줘야 합니다.

해당 예시처럼 작성할 수 있습니다.

마치며

Node.js로 express 없이 http로만 웹 서버를 개발하고 싶었습니다. 하지만 처음 공부하는 것인데 속도가 너무 더뎌 라우팅 처리에서 포기했습니다. 지금은 리액트쪽으로 노선을 틀었지만 나중에 라우팅 처리까지 직접 개발해보고 싶습니다. 지금까지 진행하며 얻었던 작은 지식과 작은 경험들이 앞으로의 여정에 도움이 되리라 믿습니다.

0개의 댓글