시퀄라이즈는 ORM(Object-relational Mapping)으로 분류됩니다. ORM은 자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구입니다.
Node.js 교과서 개정3판 p.332
npm init을 통해 package.json을 생성해줍니다.
1 2 3 4 5 6 7 8 9 10 11 | { "name": "learn-sequelize", "version": "0.0.1", "description": "시퀄라이즈를 배우자", "main": "app.js", "scripts": { "start": "nodemon app" }, "author": "sojeong", "license": "MIT" } | cs |
1 | npm i -D nodemon | cs |
1 | npm i express morgan nunjucks sequelize sequelize-cli mysql2 | cs |
1 | npx sequelize init | cs |
Sequelize를 사용하여 데이터베이스에 연결하고, 그 연결을 다른 파일에서도 사용할 수 있도록 설정하는 역할을 합니다.
그대로 사용할 때 에러가 발생하고, 필요없는 부분도 있기 때문에 수정해주어야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 'use strict'; const fs = require('fs'); const path = require('path'); const Sequelize = require('sequelize'); const process = require('process'); const basename = path.basename(__filename); const env = process.env.NODE_ENV || 'development'; const config = require(__dirname + '/../config/config.json')[env]; const db = {}; let sequelize; if (config.use_env_variable) { sequelize = new Sequelize(process.env[config.use_env_variable], config); } else { sequelize = new Sequelize(config.database, config.username, config.password, config); } fs .readdirSync(__dirname) .filter(file => { return ( file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js' && file.indexOf('.test.js') === -1 ); }) .forEach(file => { const model = require(path.join(__dirname, file))(sequelize, Sequelize.DataTypes); db[model.name] = model; }); Object.keys(db).forEach(modelName => { if (db[modelName].associate) { db[modelName].associate(db); } }); db.sequelize = sequelize; db.Sequelize = Sequelize; module.exports = db; | cs |
1 2 3 4 5 6 7 8 9 10 11 | const Sequelize = require("sequelize"); const env = process.env.NODE_ENV || "development"; const config = require(__dirname + "/../config/config.json")[env]; const db = {}; const sequelize = new Sequelize(config.database, config.username, config.password, config); db.sequelize = sequelize; module.exports = db; | cs |
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
process.env.NODE_ENV에서 현재 환경 변수를 가져옵니다.
환경 변수가 설정되지 않은 경우, 기본값으로 "development"를 사용합니다.
const config = require(__dirname + "/../config/config.json")[env];
const sequelize
시퀄라이즈 객체를 생성하여 데이터베이스 연결을 설정합니다.
config.database: 데이터베이스 이름 입니다.
config.username: 사용자 이름 입니다.
config.password: 비밀번호 입니다.
config: 추가 옵션 입니다.
const db = {};
DB 객체를 정의합니다.
데이터베이스 연결 및 모델을 관리하기 위해 사용됩니다.
db.sequelize = sequelize;
module.exports = db;
development.password와 development.database를 현재 MySQL 커넥션과 일치하게 수정하면 됩니다.

웹 서버를 구축, 데이터베이스 연결, 템플릿 엔진 설정, 미들웨어 설정, 에러 처리, 그리고 서버 시작까지 전체적인 애플리케이션의 기본 구조를 설정하는 역할을 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | //app.js const express = require("express"); const path = require("path"); const morgan = require("morgan"); const nunjucks = require("nunjucks"); const { sequelize } = require("./models"); const app = express(); app.set("port", process.env.PORT || 3001); app.set("view engine", "html"); nunjucks.configure("views", { express: app, watch: true, }); sequelize .sync({ force: false }) .then(() => { console.log("데이터베이스 연결 성공"); }) .catch((err) => { console.error(err); }); app.use(morgan("dev")); app.use(express.static(path.join(__dirname, "public"))); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use((req, res, next) => { const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`); error.status = 404; next(error); }); app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== "production" ? err : {}; res.status(err.status || 500); res.render("error"); }); app.listen(app.get("port"), () => { console.log(app.get("port"), "번 포트에서 대기 중"); }); | cs |
1 | const { sequelize } = require("./models"); | cs |
1 2 3 4 5 6 7 8 | sequelize .sync({ force: false }) .then(() => { console.log("데이터베이스 연결 성공"); }) .catch((err) => { console.error(err); }); | cs |
root 비밀번호는 mysql을 설치했을 때의 비밀번호를 입력해줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | { "development": { "username": "root", "password": "[root 비밀번호]", "database": "nodejs", "host": "127.0.0.1", "dialect": "mysql" }, "test": { "username": "root", "password": null, "database": "database_test", "host": "127.0.0.1", "dialect": "mysql" }, "production": { "username": "root", "password": null, "database": "database_production", "host": "127.0.0.1", "dialect": "mysql" } } | cs |
npm start로 서버를 실행하면 3001번 포트에서 서버가 잘 돌아가는 것을 볼 수 있었습니다.
