백엔드 기초 – Node.js로 서버 만들기


Node.js는 JavaScript를 사용하여 서버를 구축할 수 있게 해주는 런타임 환경입니다. 이 포스팅에서는 Node.js의 기본 개념과 사용법을 소개하고, 간단한 예제를 통해 Node.js 서버를 만드는 방법을 자세히 설명하겠습니다.


Node.js란?


Node.js는 V8 JavaScript 엔진을 기반으로 서버 측 애플리케이션을 실행할 수 있게 해주는 런타임 환경입니다. Node.js를 사용하면 JavaScript를 사용하여 서버를 구축하고, 데이터베이스와 상호작용하며, HTTP 요청을 처리할 수 있습니다. Node.js는 비동기 I/O 모델을 사용하여 높은 처리량과 효율성을 제공합니다.


Node.js 설치


Node.js를 설치하려면 Node.js 공식 웹사이트에서 설치 프로그램을 다운로드하고 설치합니다. 설치가 완료되면 터미널이나 명령 프롬프트에서 다음 명령어를 사용하여 Node.js와 npm(Node Package Manager)이 올바르게 설치되었는지 확인합니다.


node -v
npm -v

첫 번째 Node.js 서버 만들기


프로젝트 설정


  1. 새로운 디렉토리를 만들고, 해당 디렉토리로 이동합니다.
    mkdir my-node-server
    cd my-node-server
    

  2. npm 초기화를 통해 package.json 파일을 생성합니다.
    npm init -y
    

간단한 HTTP 서버 만들기


Node.js의 기본 모듈인 http를 사용하여 간단한 HTTP 서버를 만들 수 있습니다.


  1. server.js 파일을 만들고, 다음 코드를 작성합니다.
    const http = require('http');
    
    const hostname = '127.0.0.1';
    const port = 3000;
    
    const server = http.createServer((req, res) => {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Hello, World!\n');
    });
    
    server.listen(port, hostname, () => {
        console.log(`Server running at http://${hostname}:${port}/`);
    });
    

  2. 서버를 실행합니다.
    node server.js
    

  3. 브라우저에서 http://127.0.0.1:3000을 열어 "Hello, World!" 메시지가 표시되는지 확인합니다.

Express.js로 서버 확장하기


Express.js는 Node.js를 위한 빠르고 간결한 웹 애플리케이션 프레임워크입니다. Express를 사용하면 HTTP 서버를 쉽게 확장하고, 다양한 라우팅 및 미들웨어 기능을 추가할 수 있습니다.


  1. Express를 설치합니다.
    npm install express
    

  2. server.js 파일을 다음과 같이 수정합니다.
    const express = require('express');
    const app = express();
    const port = 3000;
    
    app.get('/', (req, res) => {
        res.send('Hello, World!');
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

  3. 서버를 다시 실행하고, 브라우저에서 http://localhost:3000을 열어 "Hello, World!" 메시지가 표시되는지 확인합니다.

라우팅


라우팅은 URL 경로에 따라 요청을 처리하는 방법을 정의하는 것입니다. Express에서는 app.get, app.post, app.put, app.delete 등을 사용하여 라우트를 정의할 수 있습니다.


const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
    res.send('Hello, World!');
});

app.get('/about', (req, res) => {
    res.send('About page');
});

app.post('/submit', (req, res) => {
    res.send('Form submitted');
});

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

위 예제에서 /, /about, /submit 경로에 대한 GET 및 POST 요청을 처리하는 라우트를 정의했습니다.


미들웨어


미들웨어는 요청과 응답 객체를 처리하는 함수입니다. 미들웨어는 라우트 핸들러 전에 실행되며, 요청 처리 과정에서 필요한 기능을 추가할 수 있습니다.


기본 미들웨어


  1. 요청 로깅 미들웨어
    const express = require('express');
    const app = express();
    const port = 3000;
    
    // 요청 로깅 미들웨어
    app.use((req, res, next) => {
        console.log(`${req.method} ${req.url}`);
        next();
    });
    
    app.get('/', (req, res) => {
        res.send('Hello, World!');
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

  2. 정적 파일 제공 미들웨어
    const express = require('express');
    const app = express();
    const port = 3000;
    
    // 정적 파일 제공 미들웨어
    app.use(express.static('public'));
    
    app.get('/', (req, res) => {
        res.send('Hello, World!');
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

    public 디렉토리에 정적 파일을 추가하면, /public 경로를 통해 파일을 제공할 수 있습니다.

Body Parser 미들웨어


폼 데이터나 JSON 데이터를 처리하려면 Body Parser 미들웨어를 사용해야 합니다.


  1. Body Parser 설치
    npm install body-parser
    

  2. Body Parser 설정
    const express = require('express');
    const bodyParser = require('body-parser');
    const app = express();
    const port = 3000;
    
    // Body Parser 미들웨어 설정
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    app.post('/submit', (req, res) => {
        const name = req.body.name;
        res.send(`Hello, ${name}!`);
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

데이터베이스 연결


Node.js 서버에서 데이터베이스와 상호작용하려면, 데이터베이스 클라이언트 라이브러리를 사용해야 합니다. 여기서는 MongoDB를 예제로 사용하겠습니다.


MongoDB 설치 및 설정


  1. MongoDB 설치 (MongoDB Atlas 또는 로컬 MongoDB 서버를 사용할 수 있습니다).
  2. mongoose 라이브러리 설치
    npm install mongoose
    

MongoDB 연결 및 모델 정의


  1. MongoDB 연결 설정
    const mongoose = require('mongoose');
    
    mongoose.connect('mongodb://localhost:27017/mydatabase', {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    
    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', () => {
        console.log('MongoDB connected');
    });
    

  2. 모델 정의 및 데이터 저장
    const express = require('express');
    const bodyParser = require('body-parser');
    const mongoose = require('mongoose');
    const app = express();
    const port = 3000;
    
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    
    mongoose.connect('mongodb://localhost:27017/mydatabase', {
        useNewUrlParser: true,
        useUnifiedTopology: true
    });
    
    const db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', () => {
        console.log('MongoDB connected');
    });
    
    // 사용자 스키마 및 모델 정의
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number
    });
    
    const User = mongoose.model('User', userSchema);
    
    app.post('/users', (req, res) => {
        const user = new User({
            name: req.body.name,
            age: req.body.age
        });
    
        user.save((err) => {
            if (err) return res.status(500).send(err);
            res.status(200).send('User saved successfully');
        });
    });
    
    app.get('/users', (req, res) => {
        User.find((err, users) => {
            if (err) return res.status(500).send(err);
            res.status(200).json(users);
        });
    });
    
    app.listen(port, () => {
        console.log(`Server running at http://localhost:${port}/`);
    });
    

결론


Node.js는 JavaScript를 사용하여 서버를 구축할 수 있게 해주는 강력한 런타임 환경입니다. 이 포스팅에서는 Node.js의 기본 개념과 사용법을 소개하고, Express를 사용하여 HTTP 서버를 만들고, 라우팅 및 미들웨어를 설정하는 방법을 설명했습니다. 또한, MongoDB를 사용하여 데이터베이스와 상호작용하는 방법도 다루었습니다.

이 포스팅이 Node.js를 이해하는 데 도움이 되길 바랍니다. 질문이나 추가 정보가 필요하시면 언제든지 댓글로 남겨주세요.

다음 이전