노드 시퀄라이즈 사용하기
시퀄라이즈 ORM
SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리
- ORM : Object Relational Mapping : 객체와 데이터를 매핑(1 대 1 짝지음)
- MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환된다.
- 자바스크립트 문법으로 데이터베이스 조작 가능
* 자바스크립트 코드를 SQL로 바꿔서 실행을 해준다.
시퀄라이즈를 사용해 보기 위해서 프로젝트 세팅을 하자.
콘솔을 통해 경로로 이동한 후 package.json 작성.
//package.json
{
"name": "learn-sequelize",
"version": "0.0.1",
"description": "시퀄라이즈를 배우자",
"main": "app.js",
"scripts": {
"start": "nodemon app"
},
"author": "ZeroCho",
"license": "MIT"
}
시퀄라이즈 CLI 사용하기
시퀄라이즈 명령어를 사용하기 위해 sequelize-cli 설치
mysql2는 MySQL DB가 아닌 드라이버(Node.js와 MySQL을 이어주는 역할)
//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.2",
"morgan": "^1.10.0",
"mysql2": "^3.2.3",
"nunjucks": "^3.2.4",
"sequelize": "^6.31.0",
"sequelize-cli": "^6.6.0"
},
"devDependencies": {
"nodemon": "^2.0.22"
}
}
dependencies에 추가가 잘 된 것을 확인 가능하다.
npx sequelize init으로 시퀄라이즈 구조 생성
이후의 프로젝트 구조는 다음과 같다
그리고 필요한 준비물은 다음과 같다
sequelize init해서 생성된 부분을 제외하고 파일을 일단 직접 생성하면 된다.
models/index.js 수정
다음과 같이 수정한다.
- new Sequelize(옵션들 ...)로 DB와 연결 가능
//models/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;
이렇게 하면 mysql2 드라이버를 사용해서 mysql과 시퀄라이즈, 노드를 연결해준다.
그리고 config/config.json파일이 있는데 여기서 password 와 database를 본인이 설정한 값으로 바꿔준다.
app.js
//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('/', indexRouter);
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'), '번 포트에서 대기 중');
});
이것이 기본적인 구조가 되겠다.
require를 통해서 필요한 것들을 쭉 불러왔다.
그리고 model의 index.js를 불러오는데 그걸 require로 불러와서 sequelize의 sync해준다.
sequelize sync하면 데이터베이스에 연결이 된다. 시퀄라이즈를 통해서 노드에서 db로 연결이 되는 것이다.
나머지 필요한 부분은 여기서 받으면 된다.
https://github.com/KangMinR/learn-sequelize/tree/main/learn-sequelize
GitHub - KangMinR/learn-sequelize
Contribute to KangMinR/learn-sequelize development by creating an account on GitHub.
github.com
npm start로 실행해서 SELECT 1+1 AS RESULT가 나오면 연결 성공이다. (MySQL도 켜져 있는지 확인)
SELECT 1+1 AS RESULT를 하는 이유는 그냥 연결이 잘 됐는지 확인하기 위해서 단순한 쿼리를 실행해 본 것이다.