코드 유지보수성을 극대화 하는 mysql2 API 분리

Jangmyun·2024년 7월 19일

프로젝트 구조

project
├── node_modules
├── src
│   ├── controllers
│   │   ├── userController.js
│   │   └── productController.js
│   ├── models
│   │   ├── userModel.js
│   │   └── productModel.js
│   ├── routes
│   │   ├── userRoutes.js
│   │   └── productRoutes.js
│   ├── config
│   │   └── dbConfig.js
│   ├── app.js
│   └── server.js
├── .env
├── package.json
└── package-lock.json

DB 세팅

config/dbConfig.js
const mysql = require('mysql2');

const pool = mysql.createPool({
  host: process.env.DB_HOST,
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME
});

const promisePool = pool.promise();

module.exports = promisePool;

모델 생성

models/userModel.js
const db = require('../config/dbConfig');

const getAllUsers = async () => {
  const [rows] = await db.query('SELECT * FROM users');
  return rows;
};

module.exports = {
  getAllUsers,
};
models/productModel.js
const db = require('../config/dbConfig');

const getAllProducts = async () => {
  const [rows] = await db.query('SELECT * FROM products');
  return rows;
};

module.exports = {
  getAllProducts,
};

Controller 생성

controllers/userController.js
const userModel = require('../models/userModel');

const getUsers = async (req, res) => {
  try {
    const users = await userModel.getAllUsers();
    res.json(users);
  } catch (error) {
    res.status(500).json({ error: 'Failed to fetch users' });
  }
};

module.exports = {
  getUsers,
};
controllers/productController.js
const productModel = require('../models/productModel');

const getProducts = async (req, res) => {
  try {
    const products = await productModel.getAllProducts();
    res.json(products);
  } catch (error) {
    res.status(500).json({ error: 'Failed to fetch products' });
  }
};

module.exports = {
  getProducts,
};

Router 생성

routes/userRoutes.js
const express = require('express');
const userController = require('../controllers/userController');

const router = express.Router();

router.get('/', userController.getUsers);

module.exports = router;
routes/productRoutes.js
const express = require('express');
const productController = require('../controllers/productController');

const router = express.Router();

router.get('/', productController.getProducts);

module.exports = router;

Express setup

app.js
const express = require('express');
const userRoutes = require('./routes/userRoutes');
const productRoutes = require('./routes/productRoutes');

const app = express();

app.use(express.json());
app.use('/users', userRoutes);
app.use('/products', productRoutes);

module.exports = app;
server.js
require('dotenv').config();
const app = require('./app');

const PORT = process.env.PORT || 3000;

app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}`);
});

환경변수 세팅

.env
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=mydatabase
PORT=3000

0개의 댓글