좋습니다! 이번에는 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}`);
});
🚀 실행 방법
- 프로젝트 초기화
npm init -y - Express 설치
npm install express - 위 코드를 server.js에 저장 후 실행
node server.js - 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를 만드는 예제
📌 준비 단계
- 프로젝트 초기화
npm init -y - 필요한 패키지 설치
- express: REST API 서버 프레임워크
- mariadb: MariaDB 연결용 드라이버
npm install express mariadb
- 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) 라이브러리
📌 준비 단계
- 프로젝트 초기화
npm init -y - 패키지 설치
npm install express sequelize mariadb - 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 |