Sequelize(MySQL) - 1

박춘화·2021년 9월 27일
0

공식 문서를 참조했습니다. 😎
https://sequelize.org/master/manual/getting-started.html

모듈 설치 및 CLI 실행

npm install --save sequelize mysql2
npm install -g sequelize-cli

sequelize init

sequelize-cli를 실행하면 config, models, migrations, seeders 총 4개의 폴더가 생성된다. migrations, seeders에 대한 설명은 다음에 하고, 일단 config, models에 대한 설명을 하겠다.

Config

config 폴더의 config.json 파일은 개발, 테스트, 배포에 대한 데이터베이스의 설정 정보를 가진다.

{
  "development": {
    "username": "root",
    "password": null,
    "database": "development",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": null,
    "database": "test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": null,
    "database": "production",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}

Models

models 폴더의 index.js 파일은 models 폴더 내에 index.js 파일을 제외한 model 파일들을 읽어 이를 데이터베이스에 반영하기 위한 작업을 담당한다. (단, sequelize.sync() 메서드를 실행하기 전까지는 데이터베이스에 반영되지 않는다.)
article.js 파일을 예로 들어보자.

// article.js
module.exports = (sequelize, DataTypes) => sequelize.define('Article', {
    title : {
        type : DataTypes.STRING(30),
        allowNull : false
    }, 
    context : {
        type : DataTypes.TEXT,
        allowNull : false
    }
})

app.js 파일에서 sequelize.sync()를 호출하면 데이터베이스에 테이블이 생성된다. (단, 쿼리문에 IF TABLE EXISTS이 포함되므로 테이블이 생성된 뒤에 model 파일을 변경하면 변경내역이 반영되지 않는다.)

// app.js
const sequelize = require('sequelize')
sequelize.sync()

데이터 타입

sequelize는 DataTypes에 데이터 타입에 대한 정보가 저장되어 있다.

// String
DataTypes.STRING(30) // VARCHAR(30), 기본 값은 255
DataTypes.TEXT

// Number
DataTypes.INTEGER
DataTypes.BIGINT
DataTypes.FLOAT
DataTypes.REAL
DataTypes.DOUBLE
DataTypes.DECIMAL

// Boolean
DataTypes.BOOLEAN

// Dates
DataTypes.DATE
DataTypes.DATEONLY // 시간은 제외

// UUIDs
DataTypes.UUID

컬럼 옵션

  • type : 데이터 타입. DataTypes를 사용하여 설정
  • allowNull : Null을 허용
  • defaultValue : 기본값 설정
  • unique : 유일성 여부. true 외에 compositeIndex로 복합 유일키 설정 가능
  • primaryKey : Primary Key 설정
  • autoIncrement : 자동 증가 여부
profile
함께 성장하는 개발자

0개의 댓글