기억 휘발 방지소

[Node.js / Sequelize] 시퀄라이즈 본문

Database/ORM

[Node.js / Sequelize] 시퀄라이즈

choice91 2021. 10. 6. 20:41
728x90
반응형

📌 시퀄라이즈

시퀄라이즈는 DB작업을 쉽게 할 수 있도록 도와주는 라이브러리이며 ORM(Object Relational Mapping)으로 분류된다.

ORM이란 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

MySQL 외에도 MariaDB, MSSQL 등과 같은 다른 RDB와도 호환이 된다.

시퀄라이즈를 사용함으로써 자바스크립트 문법으로 데이터베이스를 쉽게 조작할 수 있다.

 

📌 시퀄라이즈 설치

npm i express sequelize sequelize-cli mysql2

express, sequelize, sequelize-cli, mysql2을 설치한다.

 

  • sequelize-cli는 sequelize 명령어를 사용할 수 있게 해주는 패키지이다.
  • mysql2는 Node.js와 MySQL을 연결해주는 드라이버이다.

package.json은 다음과 같다.

...
"dependencies": {
  "express": "^4.17.1",
  "morgan": "^1.10.0",
  "mysql2": "^2.3.0",
  "sequelize": "^6.6.5",
  "sequelize-cli": "^6.2.0"
},
"devDependencies": {
  "nodemon": "^2.0.13"
}
...

 

📌 시퀄라이즈 설정

먼저, 아래 명령어를 실행하면 config, migrations, models, seeders 폴더와 config.json, index.js 파일이 생성된다.

npx sequelize init

 

1. config/config.json

config.json파일은 sequelize를 사용하기 위해 DB 환경설정을 하는 파일이다.

각자에 환경에 맞게 username, password, database 값을 넣어주면 된다.

{
  "development": {
    "username": "유저이름",
    "password": "비밀번호",
    "database": "데이터베이스이름",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
	...
}

 

2. models/index.js

index.js에서 여러 모델들을 한 객체(db)에 모아서 반환하는 역할을 한다.

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;

 

📌 MySQL 연결하기

sequelize의 sync() 메서드로 DB와 연결할 수 있다.

sync() 메소드에 'force: false' 옵션이 있는데 이 옵션이 true이면 서버 실행 시마다 테이블을 재생성한다.

const express = require("express");
const morgan = require("morgan");

const app = express();
const logger = morgan("dev");

const { sequelize } = require("../models/index.js");

app.set("port", process.env.PORT || 4000);

sequelize
  .sync({ force: false })
  .then(() => {
    console.log("✅ DB 연결 성공 😊");
  })
  .catch((err) => {
  	console.log("❗ DB 연결 실패 😱");
    console.error(err);
  });

app.use(logger);

app.use("/", (req, res) => {
  return res.send("Hello");
});

app.listen(app.get("port"), () => {
  console.log(`✅ Server listening on http://localhost:${app.get("port")} 👈`);
});
728x90
반응형