immersive TIL #17

paxkk·2020년 10월 29일
0

sequelize란 nodejs에서 mysql을 쉽게 다룰 수 있도록 도와주는 라이브러리다.
sequelize는 ORM(Object-Relational Mapping)로 분류가 된다.
ORM은 객체와 관계형 데이터베이스의 관계를 매핑 해주는 도구이다.

ORM을 사용하면 query를 메소드로 조작할 수 있는데 메소드를 호출하면 내부적으로 쿼리가 실행된다.
sequelize 공식 문서를 참고해서 설치 할 수 있다.

sequelize는 Node.js 기반의 ORM으로 비동기 문법을 사용하는데
MYSQL같은 RDB가 시스템에 설치 되어 있어야한다.
(Mysql2 에서 async-await 사용가능)

ORM은 특정 DB의 종속되지 않는 특징을 갖고 있기 때문에
DB와 커넥션만 연결되면 어떤 DB를 사용하던지 상관없이 동일한 메소드로 쿼리 수행이 가능하다.

sequelize-cli 모듈

sequelize를 조금 더 효율적으로 사용하기 위해서 몇 개의 폴더와 파일( 스켈레톤 )을 생성
sequelize와 mysql모듈을 설치하고
npm install --save-dev sequelize-cli 명령어로 모듈을 설치한다.
npx sequelize --help CLI 실행하면 사용법이 나온다.
sequelize init 명령어를 통해 생성된 models 폴더 안에는 index.js라는 파일이 생성된다.

//index.js파일 
"use strict";

const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || "development";
const config = require(__dirname + "/../config/config.json")[env];
const db = {};

let sequelize;
if (config.use_env_variable) {
  sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
  sequelize = new Sequelize(
    config.database,
    config.username,
    config.password,
    config
  );
}

fs.readdirSync(__dirname)
  .filter(file => {
    return (
      file.indexOf(".") !== 0 &&
      file !== basename &&
      file.slice(-3) === ".js"
    );
  })
  .forEach(file => {
    const model = sequelize["import"](path.join(__dirname, file));
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

index.js파일에서 반복문으로 models폴더 내부에있는 파일들을 읽고 그파일들을 모델로 설정한다.
models폴더에서 만들고자하는 테이블의 이름으로 js파일을 만들어주고 모델을 정의하면 테이블이 생성된다.

모델을 정의하는 method는 define()이며,
sequelize.define('테이블객체 이름', 스키마 정의, 테이블 설정)로 사용할 수 있다.

module.exports = (sequelize, DataTypes) => {
  const users = sequelize.define(
    'users',                           //테이블객체 이름
    {
      email: DataTypes.STRING,         //스키마정의
      username: DataTypes.STRING,
      password: DataTypes.STRING
    },
    {timestamps: true,                 //테이블 설정
    }                                
  );

timestamps
Sequelize는 테이블을 생성한 후 자동적으로 createdAt, updatedAt column을 생성한다. Database에 해당 테이블이 언제 생성되었고 가장 최근에 수정된 시간이 언제인지 추적할 수 있도록 해준다. 기능을 끄려면 false로 설정한다
이외에 paranoid , underscore 등 .. 여러 테이블 옵션이 있다.

profile
꾸준하게 성장하자

0개의 댓글