데이터베이스

Sequelize ORM

realtrynna 2022. 5. 3. 20:27

Sequelize

노드에서 관계형 데이터베이스를 쉽게 다룰 수 있게 해주는 라이브러리이다.

- MySQL MariaDB PostgreSQL SQLite MSSQL 등 여러 데이터베이스에서 사용 가능하다.

- sequelize는 전부 비동기 Promise 기반으로 작동한다

 

ORM

자바스크립트 객체와 데이터베이스의 릴레이션을 매핑해주는 도구이다.

장점

- 별도의 쿼리문을 작성하지 않아도 자바스크립트로 구현이 가능하다.

- 대량의 쿼리를 쓰지 않고도 객체 간의 관계를 설정할 수 있기에 테이블 간 관계를 객관적으로 파악 가능하다.

- ORM은 독립적으로 작성되어 있고 해당 객체들은 재사용이 가능하기에 유지 보수가 좋다.

- 데이터베이스 마이그레이션을 쉽게 할 수 있다.

 

단점

- 프로젝트의 복잡성이 높아질 경우 난이도가 올라갈 수 있다.

- 구현이 틀리면 속도 저하와 일관성이 무너질 수 있다.

- 데이터베이스와 바로 연결하는 거보다 초기설정이 더 많아지거나 복잡해질 수 있다.

- 직접 쿼리문을 보내는 게 아니어서 성능 저하가 발생한다.

 

Object Relational Mapping

 


 

설치

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를 통해 익스프레스와 MySQL을 연결

'데이터베이스' 카테고리의 다른 글

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