본문 바로가기
Html(js) & WebGL & Node.js

Node.js REST API 서버 예제

by ERLite 2026. 3. 17.

좋습니다! 이번에는 Node.js + Express로 전체 CRUD(Create, Read, Update, Delete) 기능을 갖춘 REST API 서버 예제를 보여드릴게요. 간단히 메모리 배열을 데이터베이스처럼 사용해서 구현합니다.

📌 Node.js + Express사용 CRUD 예제

 
// server.js
const express = require('express');
const app = express();
const port = 3000;

// JSON 요청 처리 미들웨어
app.use(express.json());

// 임시 데이터 (메모리 DB)
let users = [
  { id: 1, name: 'Kim' },
  { id: 2, name: 'Lee' },
  { id: 3, name: 'Park' }
];

// ✅ CREATE (POST) - 사용자 추가
app.post('/users', (req, res) => {
  const newUser = {
    id: users.length + 1,
    name: req.body.name
  };
  users.push(newUser);
  res.status(201).json(newUser);
});

// ✅ READ (GET) - 전체 사용자 조회
app.get('/users', (req, res) => {
  res.json(users);
});

// ✅ READ (GET) - 특정 사용자 조회
app.get('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const user = users.find(u => u.id === userId);
  if (!user) {
    return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
  }
  res.json(user);
});

// ✅ UPDATE (PUT) - 특정 사용자 수정
app.put('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const user = users.find(u => u.id === userId);
  if (!user) {
    return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
  }
  user.name = req.body.name;
  res.json(user);
});

// ✅ DELETE (DELETE) - 특정 사용자 삭제
app.delete('/users/:id', (req, res) => {
  const userId = parseInt(req.params.id);
  const userIndex = users.findIndex(u => u.id === userId);
  if (userIndex === -1) {
    return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
  }
  const deletedUser = users.splice(userIndex, 1);
  res.json(deletedUser[0]);
});

// 서버 실행
app.listen(port, () => {
  console.log(`REST API 서버 실행 중: http://localhost:${port}`);
});

🚀 실행 방법

  1. 프로젝트 초기화
    npm init -y
    
  2. Express 설치
    npm install express
    
  3. 위 코드를 server.js에 저장 후 실행
    node server.js
    
  4. API 테스트 (Postman, curl 등 사용)
    • POST http://localhost:3000/users → 사용자 추가
    • GET http://localhost:3000/users → 전체 조회
    • GET http://localhost:3000/users/1 → 특정 조회
    • PUT http://localhost:3000/users/1 → 수정
    • DELETE http://localhost:3000/users/1 → 삭제

 

Node.js + Express + MariaDB를 연결해서 CRUD API를 만드는 예제

📌 준비 단계

  1. 프로젝트 초기화
    npm init -y
    
  2. 필요한 패키지 설치
    • express: REST API 서버 프레임워크
    • mariadb: MariaDB 연결용 드라이버
      npm install express mariadb
      
  3. MariaDB에 테스트용 데이터베이스와 테이블 생성
    CREATE DATABASE testdb;
    USE testdb;
    
    CREATE TABLE users (
      id INT AUTO_INCREMENT PRIMARY KEY,
      name VARCHAR(50) NOT NULL
    );
    

📌 Node.js 서버 코드 (CRUD)

// server.js
const express = require('express');
const mariadb = require('mariadb');
const app = express();
const port = 3000;

// DB 연결 풀 생성
const pool = mariadb.createPool({
  host: 'localhost',   // DB 서버 주소
  user: 'root',        // DB 사용자
  password: 'password',// DB 비밀번호
  database: 'testdb',  // 사용할 DB
  connectionLimit: 5
});

// JSON 요청 처리
app.use(express.json());

// ✅ CREATE (POST) - 사용자 추가
app.post('/users', async (req, res) => {
  let conn;
  try {
    conn = await pool.getConnection();
    const result = await conn.query(
      'INSERT INTO users(name) VALUES (?)',
      [req.body.name]
    );
    res.status(201).json({ id: result.insertId, name: req.body.name });
  } catch (err) {
    res.status(500).json({ error: err.message });
  } finally {
    if (conn) conn.release();
  }
});

// ✅ READ (GET) - 전체 사용자 조회
app.get('/users', async (req, res) => {
  let conn;
  try {
    conn = await pool.getConnection();
    const rows = await conn.query('SELECT * FROM users');
    res.json(rows);
  } catch (err) {
    res.status(500).json({ error: err.message });
  } finally {
    if (conn) conn.release();
  }
});

// ✅ READ (GET) - 특정 사용자 조회
app.get('/users/:id', async (req, res) => {
  let conn;
  try {
    conn = await pool.getConnection();
    const rows = await conn.query('SELECT * FROM users WHERE id=?', [req.params.id]);
    if (rows.length === 0) {
      return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    }
    res.json(rows[0]);
  } catch (err) {
    res.status(500).json({ error: err.message });
  } finally {
    if (conn) conn.release();
  }
});

// ✅ UPDATE (PUT) - 특정 사용자 수정
app.put('/users/:id', async (req, res) => {
  let conn;
  try {
    conn = await pool.getConnection();
    const result = await conn.query(
      'UPDATE users SET name=? WHERE id=?',
      [req.body.name, req.params.id]
    );
    if (result.affectedRows === 0) {
      return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    }
    res.json({ id: req.params.id, name: req.body.name });
  } catch (err) {
    res.status(500).json({ error: err.message });
  } finally {
    if (conn) conn.release();
  }
});

// ✅ DELETE (DELETE) - 특정 사용자 삭제
app.delete('/users/:id', async (req, res) => {
  let conn;
  try {
    conn = await pool.getConnection();
    const result = await conn.query('DELETE FROM users WHERE id=?', [req.params.id]);
    if (result.affectedRows === 0) {
      return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    }
    res.json({ message: '사용자가 삭제되었습니다.' });
  } catch (err) {
    res.status(500).json({ error: err.message });
  } finally {
    if (conn) conn.release();
  }
});

// 서버 실행
app.listen(port, () => {
  console.log(`MariaDB 연동 REST API 서버 실행 중: http://localhost:${port}`);
});

🚀 테스트 방법

  • POST http://localhost:3000/users → { "name": "Hong" }
  • GET http://localhost:3000/users → 전체 조회
  • GET http://localhost:3000/users/1 → 특정 조회
  • PUT http://localhost:3000/users/1 → { "name": "Choi" }
  • DELETE http://localhost:3000/users/1 → 삭제

👉 이 예제는 MariaDB와 직접 연결하는 기본 CRUD 구조입니다. 실무에서는 ORM (예: Sequelize, TypeORM)을 사용하면 더 편리하게 모델 관리와 관계 설정을 할 수 있습니다.

 

Node.js + Express + Sequelize ORM + MariaDB를 활용한 CRUD 예제

※ ORM(Object Relational Mapping) 라이브러리

📌 준비 단계

  1. 프로젝트 초기화
    npm init -y
    
  2. 패키지 설치
    npm install express sequelize mariadb
    
  3. MariaDB에 DB 생성
    CREATE DATABASE testdb;
    

📌 Sequelize 모델 정의

// models/user.js
const { DataTypes } = require('sequelize');

module.exports = (sequelize) => {
  const User = sequelize.define('User', {
    id: {
      type: DataTypes.INTEGER,
      autoIncrement: true,
      primaryKey: true
    },
    name: {
      type: DataTypes.STRING(50),
      allowNull: false
    }
  }, {
    tableName: 'users',
    timestamps: false
  });

  return User;
};

📌 Express 서버 (CRUD API)

// server.js
const express = require('express');
const { Sequelize } = require('sequelize');
const app = express();
const port = 3000;

// DB 연결
const sequelize = new Sequelize('testdb', 'root', 'password', {
  host: 'localhost',
  dialect: 'mariadb'
});

// 모델 불러오기
const User = require('./models/user')(sequelize);

// JSON 요청 처리
app.use(express.json());

// DB 연결 확인 및 테이블 생성
sequelize.sync()
  .then(() => console.log('DB 연결 및 테이블 준비 완료'))
  .catch(err => console.error('DB 연결 실패:', err));

// ✅ CREATE (POST)
app.post('/users', async (req, res) => {
  try {
    const user = await User.create({ name: req.body.name });
    res.status(201).json(user);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// ✅ READ (GET) - 전체 조회
app.get('/users', async (req, res) => {
  try {
    const users = await User.findAll();
    res.json(users);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// ✅ READ (GET) - 특정 조회
app.get('/users/:id', async (req, res) => {
  try {
    const user = await User.findByPk(req.params.id);
    if (!user) return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    res.json(user);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// ✅ UPDATE (PUT)
app.put('/users/:id', async (req, res) => {
  try {
    const user = await User.findByPk(req.params.id);
    if (!user) return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    user.name = req.body.name;
    await user.save();
    res.json(user);
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// ✅ DELETE (DELETE)
app.delete('/users/:id', async (req, res) => {
  try {
    const user = await User.findByPk(req.params.id);
    if (!user) return res.status(404).json({ message: '사용자를 찾을 수 없습니다.' });
    await user.destroy();
    res.json({ message: '사용자가 삭제되었습니다.' });
  } catch (err) {
    res.status(500).json({ error: err.message });
  }
});

// 서버 실행
app.listen(port, () => {
  console.log(`Sequelize ORM 기반 REST API 서버 실행 중: http://localhost:${port}`);
});

🚀 테스트 방법

  • POST http://localhost:3000/users → { "name": "Hong" }
  • GET http://localhost:3000/users → 전체 조회
  • GET http://localhost:3000/users/1 → 특정 조회
  • PUT http://localhost:3000/users/1 → { "name": "Choi" }
  • DELETE http://localhost:3000/users/1 → 삭제

👉 이렇게 하면 SQL을 직접 작성하지 않고도 ORM을 통해 DB를 다룰 수 있습니다.

 

'Html(js) & WebGL & Node.js' 카테고리의 다른 글

Ivy Color Picker  (0) 2026.06.02
Ubuntu에서 Python과 pip을 설치  (0) 2026.03.17
Node.js 설치  (0) 2026.03.17
Node.js WebSocket 샘플  (0) 2026.03.16
현재화면(Canvas)을 Node.js 서버로 저장  (0) 2026.03.13