본문 바로가기
카테고리 없음

Node.js로 웹 서버 구축하기 - http 라이브러리 활용 가이드

by excel-master 2025. 4. 12.
반응형
Node.js로 웹 서버 구축하기 - http 라이브러리 활용 가이드

Node.js는 JavaScript를 사용하여 서버 사이드에서 실행할 수 있게 해주는 런타임입니다. http 라이브러리를 활용하면 간단한 웹 서버를 구축할 수 있으며, 이를 통해 다양한 웹 애플리케이션을 개발할 수 있습니다. 이 글에서는 Node.js의 http 라이브러리를 사용하여 웹 서버를 구축하는 방법과 실용적인 팁, 사례를 소개하겠습니다.

Node.js http 라이브러리 소개

Node.js의 http 모듈은 HTTP 서버와 클라이언트를 생성하는 데 필요한 기능을 제공합니다. 이 모듈을 사용하면 요청을 받고 응답을 반환하는 기본적인 웹 서버를 쉽게 구축할 수 있습니다.

웹 서버 구축하기 - 기본 코드

아래는 간단한 웹 서버를 구축하는 예제 코드입니다. 이 코드를 실행하면 기본적인 HTTP 서버가 실행됩니다.


const http = require('http');

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

const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}/`);
});
    

이 코드는 3000번 포트에서 "Hello, World!"라는 메시지를 반환하는 간단한 서버를 설정합니다.

사례 연구

사례 1: RESTful API 구축

Node.js의 http 모듈을 사용하여 RESTful API를 구축할 수 있습니다. 다음은 간단한 CRUD(Create, Read, Update, Delete) API의 예제입니다.


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

let data = [
    { id: 1, name: 'Item 1' },
    { id: 2, name: 'Item 2' }
];

const server = http.createServer((req, res) => {
    const parsedUrl = url.parse(req.url, true);
    const method = req.method;

    if (method === 'GET' && parsedUrl.pathname === '/items') {
        res.writeHead(200, { 'Content-Type': 'application/json' });
        res.end(JSON.stringify(data));
    } else {
        res.writeHead(404, { 'Content-Type': 'text/plain' });
        res.end('Not Found');
    }
});

const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}/`);
});
    

위 코드는 "/items" 경로에 대한 GET 요청을 처리하여 JSON 형식으로 아이템 목록을 반환합니다. RESTful API를 구축하는 데 기본적인 구조를 제공합니다.

사례 2: 파일 서버 구축

Node.js를 사용하여 정적 파일 서버를 구축할 수 있습니다. 아래 코드는 특정 디렉토리의 파일을 클라이언트에게 제공합니다.


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

const server = http.createServer((req, res) => {
    let filePath = '.' + req.url;
    if (filePath === './') {
        filePath = './index.html';
    }

    const extname = String(path.extname(filePath)).toLowerCase();
    const mimeTypes = {
        '.html': 'text/html',
        '.js': 'text/javascript',
        '.css': 'text/css',
        '.json': 'application/json',
        '.png': 'image/png',
        '.jpg': 'image/jpg',
        '.gif': 'image/gif',
        '.svg': 'image/svg+xml',
        '.wav': 'audio/wav',
        '.mp4': 'video/mp4',
        '.woff': 'application/font-woff',
        '.ttf': 'application/font-sfnt',
        '.eot': 'application/vnd.ms-fontobject',
        '.otf': 'application/font-otf',
        '.wasm': 'application/wasm'
    };

    const contentType = mimeTypes[extname] || 'application/octet-stream';

    fs.readFile(filePath, (error, content) => {
        if (error) {
            res.writeHead(500);
            res.end('Sorry, there was an error: ' + error.code + ' ..\n');
        } else {
            res.writeHead(200, { 'Content-Type': contentType });
            res.end(content, 'utf-8');
        }
    });
});

const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}/`);
});
    

위 코드는 요청된 파일을 찾아 클라이언트에게 반환하는 정적 파일 서버를 구현합니다. 이 방법으로 HTML, CSS, JS 파일을 쉽게 서빙할 수 있습니다.

사례 3: 웹소켓을 통한 실시간 데이터 전송

Node.js와 http 모듈을 사용하여 웹소켓 서버를 구축할 수 있습니다. 웹소켓은 클라이언트와 서버 간의 양방향 통신을 가능하게 합니다. 다음은 웹소켓을 사용한 간단한 채팅 서버의 예제입니다.


const http = require('http');
const WebSocket = require('ws');

const server = http.createServer();
const wss = new WebSocket.Server({ server });

wss.on('connection', (ws) => {
    ws.on('message', (message) => {
        console.log('received: %s', message);
        wss.clients.forEach((client) => {
            if (client.readyState === WebSocket.OPEN) {
                client.send(`Echo: ${message}`);
            }
        });
    });
});

const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Server running at http://localhost:${PORT}/`);
});
    

위 코드는 웹소켓을 통해 클라이언트로부터 메시지를 수신하고, 이를 다시 모든 클라이언트에게 전송합니다. 실시간 데이터 전송이 필요한 애플리케이션에 유용합니다.

실용적인 팁

팁 1: 에러 핸들링

서버 구축 시 에러 핸들링은 필수입니다. 사용자가 요청한 리소스가 없거나 서버가 예상치 못한 오류를 만났을 때, 사용자에게 적절한 에러 메시지를 제공해야 합니다. 이를 통해 유저 경험을 개선하고, 디버깅에 도움을 줄 수 있습니다. 예를 들어, 404 에러 페이지를 만들어 사용자에게 친절한 안내를 제공하세요.

팁 2: 요청 로그 기록

서버에서 수신한 요청을 로그로 기록하는 것은 서버 모니터링에 매우 유용합니다. 각 요청의 URL, 메소드, 시간 등을 기록하여 나중에 분석할 수 있습니다. 이를 통해 어떤 경로가 많이 사용되는지, 오류가 발생하는 지점을 파악할 수 있습니다. 로그를 관리하기 위해 다양한 로깅 라이브러리를 사용할 수도 있습니다.

팁 3: CORS 설정

다른 도메인에서 API를 호출할 경우 CORS 설정이 필요합니다. 기본적으로 Node.js http 서버는 CORS를 허용하지 않으므로, 필요한 경우 헤더를 추가하여 CORS를 설정해야 합니다. 예를 들어, 다음과 같이 응답 헤더에 CORS 허용 정보를 추가할 수 있습니다:


res.setHeader('Access-Control-Allow-Origin', '*');
    

팁 4: HTTPS 사용하기

보안을 위해 HTTPS를 사용하는 것이 좋습니다. Node.js의 https 모듈을 이용하면 SSL 인증서를 설정하여 HTTPS 서버를 구축할 수 있습니다. 사용자 데이터 보호를 위해 HTTPS는 필수입니다. Let's Encrypt와 같은 무료 SSL 인증서 발급 서비스를 이용해보세요.

팁 5: 성능 최적화

Node.js 애플리케이션의 성능을 최적화하기 위해 다양한 방법을 사용할 수 있습니다. 예를 들어, 클러스터링을 통해 멀티코어 CPU를 활용하거나, 캐싱을 통해 데이터 조회 속도를 개선할 수 있습니다. 또한, 불필요한 요청을 줄이기 위해 CDN(Content Delivery Network)을 활용하는 것도 좋은 방법입니다.

요약 및 실천 팁


Node.js의 http 라이브러리를 사용하면 간단하고 효율적인 웹 서버를 구축할 수 있습니다. 이 가이드를 통해 기본적인 웹 서버부터 RESTful API, 파일 서버, 웹소켓 서버까지 다양한 사례를 살펴보았습니다. 또한, 서버 구축 시 유용한 실용적인 팁을 제공했습니다.

마지막으로, 다음과 같은 실천 팁을 고려해보세요:

  • 기본적인 웹 서버 코드를 작성하고, 다양한 요청을 처리하는 방법을 연습해보세요.
  • 에러 핸들링 및 요청 로그 기록을 통해 서버의 안정성을 높이세요.
  • CORS와 HTTPS 설정을 통해 보안을 강화하세요.
  • 성능 최적화를 위한 다양한 기법을 적용해보세요.
  • 실제 프로젝트에 적용하여 경험을 쌓아보세요.

이 글이 Node.js로 웹 서버를 구축하는 데 도움이 되길 바랍니다. 다양한 실습을 통해 더 많은 경험을 쌓아보세요!

반응형