Sequelize
노드에서 관계형 데이터베이스를 쉽게 다룰 수 있게 해주는 라이브러리이다.
- MySQL MariaDB PostgreSQL SQLite MSSQL 등 여러 데이터베이스에서 사용 가능하다.
- sequelize는 전부 비동기 Promise 기반으로 작동한다
ORM
자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다.
장점
- 별도의 쿼리문을 작성하지 않아도 자바스크립트로 구현이 가능하다.
- 대량의 쿼리를 쓰지 않고도 객체 간의 관계를 설정할 수 있기에 테이블 간 관계를 객관적으로 파악 가능하다.
- ORM은 독립적으로 작성되어 있고 해당 객체들은 재사용이 가능하기에 유지 보수가 좋다.
- 데이터베이스 마이그레이션을 쉽게 할 수 있다.
단점
- 프로젝트의 복잡성이 높아질 경우 난이도가 올라갈 수 있다.
- 구현이 틀리면 속도 저하와 일관성이 무너질 수 있다.
- 데이터베이스와 바로 연결하는 거보다 초기설정이 더 많아지거나 복잡해질 수 있다.
- 직접 쿼리문을 보내는 게 아니어서 성능 저하가 발생한다.
설치
sequelize: 시퀄라이즈 패키지이다.
sequelize-cli: 시퀄라이즈 명령어를 실행하기 위한 패키지이다.
mysql2: MySQL과 시퀄라이즈를 이어주는 드라이버 패키지이다.
npx sequelize init: 전역 설치 없이 명령어로 사용하기 위한 명령어(npx)
명령어를 실행하면 config / models / migrations / seeders 폴더가 생성된다.
models 폴더 속 index.js를 수정한다.
sequelize-cli가 자동으로 생성해주는 코드인데 그대로 사용 시 에러가 난다.
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development";
const config = require("../config/config.json")[env];
const db = {};
const sequelize = new Sequelize(
config.database, config.username, config.password, config
);
db.sequelize = sequelize;
module.exports = db;
models > index.js
- Sequelize는 시퀄라이즈 패키지이자 생성자다.
- config/config.json 파일을 불러와 new Sequelize를 통해 MySQL 연결 객체를 생성한다.
- 연결 객체를 나중에 재사용하기 위해 db.sequelize에 넣어놓는다.
config 폴더 속 config.json를 수정한다.
{
"development": {
"username": "root",
"password": "password",
"database": "database",
"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"
}
}
config > config.json
- 개발 환경이기에 development를 수정한다.
- development에 password/database를 개발 환경에 맞게 설정한다.
시퀄라이즈를 통해 익스프레스와 MySQL을 연결한다.
const express = require("express");
const { sequelize } = require("./models");
const app = express();
app.set("port", 1000);
sequelize.sync({ force: false })
.then(() => console.log("sequelize connect"))
.catch((err) => console.error(err));
app.listen(app.get("port"), () => {
console.log("1000");
});
app.js
- models 폴더에 sequelize를 불러와 sync 메서드로 호출한다.
- sync 메서드에 force 옵션의 기본값은 false이다.
- true로 설정해놓으면 수정된 모델들이 강제로 데이터베이스에 업데이트가 된다. (데이터는 다 날아간다)
- 테이블에 컬럼이 변경되었으면 force: true로 설정한다.
- 테이블이 새로 생성된 경우에는 alter: true로 설정한다.
- force를 사용하면 기존 데이터는 삭제되고 alter는 삭제되지 않는다.
'데이터베이스' 카테고리의 다른 글
Sequelize N:M associate (0) | 2022.05.05 |
---|---|
Sequelize 1:N associate (0) | 2022.05.05 |
Sequelize 1:1 associate (0) | 2022.05.05 |
Sequelize Model (0) | 2022.05.04 |
MongoDB Mongoose (0) | 2022.01.24 |