Node.js는 서버 사이드에서 자바스크립트를 실행할 수 있는 강력한 런타임 환경입니다. Node.js의 내장 모듈 중 하나인 HTTP 모듈은 웹 서버를 쉽게 구축할 수 있게 해줍니다. 이 글에서는 Node.js HTTP 모듈을 사용하여 간단한 HTTP 서버를 구축하고, 다양한 활용 방법을 알아보겠습니다.
Node.js HTTP 모듈이란?
Node.js HTTP 모듈은 HTTP 서버를 생성하고 요청을 처리하는 데 필요한 기본 기능을 제공합니다. 이 모듈을 사용하면 간단한 서버부터 복잡한 웹 애플리케이션까지 구현할 수 있습니다. Node.js의 HTTP 모듈은 클라이언트에서 오는 요청을 받고, 그에 대한 응답을 반환하는 역할을 합니다.
HTTP 모듈은 별도의 설치 없이 Node.js에 기본적으로 포함되어 있으며, require()
함수를 사용해 불러올 수 있습니다.
HTTP 서버 생성하기
Node.js HTTP 모듈을 사용하여 간단한 웹 서버를 만드는 방법을 살펴보겠습니다. 기본적으로 HTTP 서버는 클라이언트(예: 웹 브라우저)에서 들어오는 요청을 받고, 그에 맞는 응답을 제공합니다.
// HTTP 모듈 불러오기
const http = require('http');
// 서버 생성
const server = http.createServer((req, res) => {
// HTTP 헤더 설정
res.writeHead(200, { 'Content-Type': 'text/plain' });
// 응답 데이터
res.write('Hello, World!');
// 응답 종료
res.end();
});
// 서버가 3000번 포트에서 대기
server.listen(3000, () => {
console.log('서버가 http://localhost:3000 에서 실행 중입니다.');
});
위 코드에서는 http.createServer()
메서드를 사용해 HTTP 서버를 생성하고, 클라이언트 요청이 있을 때마다 "Hello, World!" 메시지를 반환합니다. server.listen(3000)
은 서버가 3000번 포트에서 요청을 대기하도록 설정합니다.
요청 및 응답 처리
HTTP 서버는 클라이언트의 요청을 받고, 그 요청에 대한 응답을 제공합니다. 요청과 응답은 각각 req
와 res
객체로 처리됩니다. req
객체에는 요청 정보(HTTP 메서드, URL, 헤더 등)가 포함되어 있고, res
객체를 사용하여 클라이언트로 응답을 보냅니다.
HTTP 요청 메서드 확인
HTTP 요청 메서드는 클라이언트가 서버에 어떤 작업을 요청하는지를 나타냅니다. 주로 사용하는 HTTP 메서드로는 GET
, POST
, PUT
, DELETE
등이 있습니다.
const server = http.createServer((req, res) => {
// 요청 메서드 확인
if (req.method === 'GET') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('GET 요청을 받았습니다.');
} else if (req.method === 'POST') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('POST 요청을 받았습니다.');
}
res.end();
});
위 예제에서는 req.method
를 사용하여 클라이언트의 요청 메서드를 확인하고, 그에 맞는 응답을 처리합니다.
요청 URL에 따른 라우팅
Node.js HTTP 모듈에서는 req.url
을 사용해 요청된 URL을 확인하고, 해당 경로에 따라 응답을 다르게 처리할 수 있습니다. 이를 라우팅이라고 합니다.
const server = http.createServer((req, res) => {
if (req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('홈 페이지');
} else if (req.url === '/about') {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('소개 페이지');
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.write('페이지를 찾을 수 없습니다.');
}
res.end();
});
위 코드에서는 req.url
을 사용하여 요청된 경로에 따라 "홈 페이지", "소개 페이지", 또는 404 오류 메시지를 반환합니다.
JSON 응답 처리
Node.js HTTP 모듈을 사용하여 JSON 형식의 데이터를 반환할 수도 있습니다. 이는 웹 API를 구축할 때 자주 사용됩니다.
const server = http.createServer((req, res) => {
const data = {
message: 'Hello, JSON!',
status: 'success'
};
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(data));
});
위 예제에서는 클라이언트 요청에 대해 JSON 데이터를 응답합니다. res.writeHead()
에서 Content-Type
을 application/json
으로 설정하고, 데이터를 JSON.stringify()
로 문자열화하여 전송합니다.
정적 파일 서빙 (Serving Static Files)
Node.js HTTP 모듈을 사용하여 HTML, CSS, JavaScript 같은 정적 파일을 제공할 수 있습니다. 파일을 제공하려면 fs
모듈을 함께 사용하여 파일을 읽고 응답으로 보냅니다.
const fs = require('fs');
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/index.html') {
fs.readFile('index.html', (err, data) => {
if (err) {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('파일을 찾을 수 없습니다.');
} else {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(data);
}
});
} else {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('페이지를 찾을 수 없습니다.');
}
});
위 코드에서는 fs.readFile()
을 사용해 index.html
파일을 읽고, 클라이언트에게 그 내용을 응답합니다. 파일을 찾지 못한 경우에는 404 에러 메시지를 반환합니다.
포트와 호스트 지정
기본적으로 Node.js 서버는 특정 포트에서 클라이언트 요청을 대기합니다. server.listen()
메서드를 사용하여 서버가 대기할 포트와 호스트를 지정할 수 있습니다.
server.listen(3000, '127.0.0.1', () => {
console.log('서버가 http://127.0.0.1:3000 에서 실행 중입니다.');
});
위 예제에서는 서버가 로컬 호스트 127.0.0.1
의 3000번 포트에서 실행되도록 설정합니다.
결론
Node.js HTTP 모듈은 웹 서버를 쉽게 구축할 수 있는 강력한 도구입니다. 기본적인 HTTP 요청과 응답 처리부터, JSON 응답, 정적 파일 서빙까지 다양한 기능을 제공합니다. 간단한 웹 서버부터 복잡한 API 서버까지 Node.js HTTP 모듈을 활용하여 다양한 프로젝트를 개발해보세요!
댓글 쓰기