Node.js에서 HTTP 서버를 사용해 HTTP 모듈 만들기

발행: (2025년 12월 28일 오전 05:21 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Node.js에서 HTTP 서버를 사용하여 HTTP 모듈을 구축하는 표지 이미지

HTTP 모듈이란?

http 모듈은 Node.js에 내장된 라이브러리로, HTTP 서버를 생성하고 네트워크 요청을 처리합니다. 프레임워크 오버헤드 없이 HTTP 프로토콜에 대한 저수준 접근을 제공합니다.

import http from 'http';

첫 번째 HTTP 서버 만들기

createServer() 메서드는 진입점입니다. 요청 핸들러 함수를 받아 서버 인스턴스를 반환합니다:

import http from 'http';

const server = http.createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello from Node.js HTTP server!');
});

server.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

무슨 일이 일어나고 있나요

  • createServer()는 들어오는 HTTP 요청을 수신 대기하는 서버를 생성합니다.
  • 콜백은 두 개의 객체를 받습니다: req(요청)와 res(응답).
  • listen(3000)은 서버를 포트 3000에 바인딩합니다.

요청 및 응답 객체 이해하기

요청 객체 (req)

들어오는 모든 요청 데이터를 포함합니다:

const server = http.createServer((req, res) => {
  console.log('Method:', req.method);   // GET, POST, 등
  console.log('URL:', req.url);         // /about, /api/users
  console.log('Headers:', req.headers); // 모든 요청 헤더

  res.end('Request logged');
});

응답 객체 (res)

클라이언트에게 데이터를 보내는 데 사용됩니다:

const server = http.createServer((req, res) => {
  // 상태 코드와 헤더 설정
  res.writeHead(200, {
    'Content-Type': 'application/json',
    'X-Custom-Header': 'MyValue'
  });

  // 응답 본문 전송
  res.end(JSON.stringify({ message: 'Success' }));
});

Simple Router 만들기

다양한 라우트를 수동으로 처리하기:

import http from 'http';

const server = http.createServer((req, res) => {
  if (req.url === '/' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('

홈 페이지

');
  } else if (req.url === '/api/users' && req.method === 'GET') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(JSON.stringify({ users: ['Alice', 'Bob'] }));
  } else {
    res.writeHead(404, { 'Content-Type': 'text/plain' });
    res.end('404 Not Found');
  }
});

server.listen(3000);

본문 데이터를 포함한 POST 요청 처리

요청 본문을 읽으려면 데이터 스트림을 처리해야 합니다:

import http from 'http';

const server = http.createServer((req, res) => {
  if (req.url === '/api/data' && req.method === 'POST') {
    let body = '';

    req.on('data', chunk => {
      body += chunk.toString();
    });

    req.on('end', () => {
      const data = JSON.parse(body);
      res.writeHead(200, { 'Content-Type': 'application/json' });
      res.end(JSON.stringify({ received: data }));
    });
  }
});

server.listen(3000);

Source:

핵심 요점

네이티브 HTTP 모듈을 사용해야 할 때

  • Node.js 기본 개념 및 HTTP 프로토콜 기초 학습
  • 최소한의 의존성으로 마이크로서비스 구축
  • 프레임워크 오버헤드 없이 성능 극대화

Express와 같은 프레임워크를 사용해야 할 때

  • 복잡한 라우팅 및 미들웨어 요구 사항
  • 빠른 애플리케이션 개발
  • 내장 보안 기능 및 요청 파싱

모범 사례

  • 항상 적절한 Content-Type 헤더를 설정합니다.
  • 오류를 적절한 상태 코드(예: 404, 500)로 처리합니다.
  • 응답을 마무리하려면 res.end()를 사용합니다.
  • 프로덕션 애플리케이션에서는 보안 헤더 추가를 고려합니다.

다음 단계

  • 대용량 파일 업로드 처리를 위해 Node.js 스트림을 탐색합니다.
  • SSL/TLS 지원을 위한 https 모듈에 대해 학습합니다.
  • Express.js에 뛰어들기 전에 미들웨어 패턴을 공부합니다.

http 모듈을 마스터하면 모든 Node.js 프레임워크가 내부적으로 어떻게 동작하는지 이해할 수 있는 기반을 마련하게 되며, 보다 효율적인 백엔드 개발자가 될 수 있습니다.

Back to Blog

관련 글

더 보기 »

개발자 커뮤니티 (JavaScript, TypeScript)

여기 정리된 마크다운 버전이 있습니다. 이미지가 직접 삽입되어 있고, 링크가 같은 이미지를 가리키고 있었으므로 불필요합니다: markdown !logotechhttp...