728x90
시퀄라이즈 : SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리
- ORM: Object Relational Mapping: 객체와 데이터를 매핑(1대1 짝지음)한다
- MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환된다
- 자바스크립트 문법으로 데이터베이스 조작 가능하다
- 시퀄라이즈 예제: https://github.com/zerocho/nodejs-book/tree/master/ch7/7.6/learn-sequelize
GitHub - ZeroCho/nodejs-book
Contribute to ZeroCho/nodejs-book development by creating an account on GitHub.
github.com
프로젝트 세팅 후, 콘솔을 통해 경로로 이동한 후 package.json 작성
package.json
{
"name": "learn-sequelize",
"version": "0.0.1",
"description": "시퀄라이즈를 배우자",
"main": "app.js",
"scripts": {
"start": "nodemon app"
},
"author": "ZeroCho",
"license": "MIT",
"dependencies": {
"express": "^4.18.1",
"morgan": "^1.10.0",
"mysql2": "^2.3.3",
"nunjucks": "^3.2.3",
"sequelize": "^6.23.0",
"sequelize-cli": "^6.4.1"
},
"devDependencies": {
"nodemon": "^2.0.20"
}
}
npm i express morgan nunjucks sequelize sequelize-cli mysql2
npm i -D nodemon
npx sequelize init
- 시퀄라이즈 명령어 사용하기 위해 sequelize-cli 설치
- mysql2는 MySQL DB가 아닌 드라이버(Node.js와 MySQL을 이어주는 역할)
- npx sequelize init으로 시퀄라이즈 구조 생성
module/index.js
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config")[env];
const db = {};
const sequelize = new Sequelize(
config.database,
config.username,
config.password,
config
);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
- require(../config/config)으로 설정을 로딩한다
- new Sequelize(옵션들…)로 DB와 연결 가능하다.
MySQL 연결하기(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"), "번 포트에서 대기 중");
});
- sequelize.sync로 연결한다.
- 나머지는 이전 설정과 동일하다
DB Config 설정하기(config/config.json)
{
"development": {
"username": "root",
"password": "~~~",
"database": "nodejs",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": "~~~",
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": "~~~",
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}728x90