Node.js에서 HTTP 서버를 사용해 HTTP 모듈 만들기
발행: (2025년 12월 28일 오전 05:21 GMT+9)
5 min read
원문: Dev.to
Source: Dev.to

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 프레임워크가 내부적으로 어떻게 동작하는지 이해할 수 있는 기반을 마련하게 되며, 보다 효율적인 백엔드 개발자가 될 수 있습니다.