Node.js http 모듈 — 서버와 요청 처리

Node.js http 모듈 — 서버와 요청 처리

웹 서버를 만드는 가장 기본적인 방법 중 하나가 Node.js 내장 http 모듈을 쓰는 거예요. 프레임워크 없이도 서버를 띄우고 요청을 처리하고 응답을 돌려줄 수 있어요. 이 모듈은 네트워킹을 일급으로 지원하는 Node.js 표준 라이브러리의 일부예요.

출처: Node.js http 모듈 | Node.js Documentation

가장 대표적인 예가 "Hello World" 웹 서버예요. node:httpcreateServer()로 HTTP 서버를 만들어요.

const { createServer } = require('node:http');

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

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

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

이 코드를 server.js로 저장하고 node server.js로 실행하면 돼요. ESM 버전을 쓴다면 server.mjs로 저장하고 같은 방식으로 실행해요.

요청과 응답 객체

createServer()는 새 HTTP 서버를 만들어 돌려줘요. 서버는 지정한 포트와 호스트 이름에 리슨하고, 준비되면 콜백 함수가 호출돼요.

새 요청이 들어올 때마다 request 이벤트가 호출되며 두 객체를 건네줘요 — 요청(http.IncomingMessage) 객체와 응답(http.ServerResponse) 객체예요. 이 두 객체가 HTTP 호출을 처리하는 핵심이에요.

첫 번째 객체는 요청 상세를 제공해요. 헤더나 요청 데이터에 접근할 수 있어요. 두 번째 객체는 호출자에게 데이터를 돌려주는 데 써요.

응답 만들기

이 예시에서는 세 단계로 응답을 만들어요.

statusCode 프로퍼티를 200으로 설정해 성공적인 응답임을 나타내요.

res.statusCode = 200;

Content-Type 헤더를 설정해요.

res.setHeader('Content-Type', 'text/plain');

그리고 end()에 내용을 인자로 넣어 응답을 닫아요.

res.end('Hello World');

request 이벤트와 라우팅

요청 객체로 요청 URL이나 메서드를 읽으면 간단한 라우팅도 만들 수 있어요.

const server = createServer((req, res) => {
  if (req.url === '/') {
    res.end('Home page');
  } else if (req.url === '/about') {
    res.end('About page');
  } else {
    res.statusCode = 404;
    res.end('Not found');
  }
});

실제 서비스 수준의 라우팅·미들웨어가 필요해지면 Express 같은 프레임워크를 쓰는 게 편리하지만, http 모듈 하나로도 서버의 동작 원리를 명확하게 이해할 수 있어요.

정리하면, http 모듈은 createServer()로 서버를 만들고, req/res 두 객체로 요청을 읽고 응답을 쓰는 기본 HTTP 서버를 제공해요. Node.js 웹 개발의 가장 밑바닥이 되는 모듈이에요.

더 알아보기