Sequelize, Sequelize-cli를 통한 mySQL DB 구성

박종혁·2021년 4월 29일

기본 세팅

프로젝트 폴더 세팅

프로젝트 폴더에 npm init으로 package.json 생성

npm init

package.json생성시 필요한 항목에 값을 삽입

필요한 모듈을 dependency에 맞게 설치

  • dependency에 설치
    npm install [모듈이름]
  • dev dependency에 설치
    npm install --save-dev [모듈이름]

여기서 필요한 모듈은

dependency에 dotenv,mysql2 / dev dependency에 sequelize, sequelize-cli 모듈

환경변수 사용을 위해 .env파일을 생성하고 안에 환경변수로 쓸 변수명과 값을 입력

USER_NAME=[DB 유저 이름]
USER_PASSWORD=[그 유저의 비밀번호]
**경우에 따라 다른 변수도 추가 가능**

이후 환경변수를 쓸 파일안에서

require("dotenv").config();

로 작성하면

process.env.USER_NAME

과 같이 사용가능

데이터베이스 세팅

이 단계 시작전에 글로벌에 mysql을 미리 설치해야 함

db를 구성하기 위해 일단 mysql내에 db생성
create database [db 이름];

sequelize-cli를 사용하기 위하여 환경 셋팅
npx sequelize init
이를 통해 config,migration,models,seeders 폴더가 생김

환경변수 이용을 위해 config폴더안 config.json파일을 수정
이렇게 생긴 초기상태의 파일을

{
  "development": {
    "username": "root",
    "password": null,
    "database": "database_development",
    "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"
  }
}

이렇게 생긴 js 파일로 수정

require("dotenv").config();

module.exports = {
  development: {
    username: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD,
    database: "[db이름]_development",
    host: "127.0.0.1",
    dialect: "mysql",
  },
  test: {
    username: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD,
    database: "[db이름]_test",
    host: "127.0.0.1",
    dialect: "mysql",
  },
  production: {
    username: process.env.DATABASE_USERNAME,
    password: process.env.DATABASE_PASSWORD,
    database: "[db이름]",
    host: "127.0.0.1",
    dialect: "mysql",
  },
};

model 폴더의 index.js 파일도 수정

const config = require(__dirname + '/../config/config.json')[env];
const config = require(__dirname + "/../config/config.js")[env];

여기까지 세팅 완료

테이블 작성

sequelize-cli를 통한 model generate

명령어를 통해 model파일과 migration파일을 생성
npx sequelize-cli model:generate --name [테이블명] --attributes [컬럼명]:string,[컬럼명]:integer,[컬럼명]:text
작성시 쉼표간에 띄어쓰기가 없음에 주의!

M:N테이블을 만들고 싶다면?
model generate할때 바로 잡아주는 방법을 몰라서 직접 수정해 주었음
generate를 통해 생긴 migration 파일 안에서 수정

//original
 user_id: {
        type: Sequelize.INTEGER,
      },
        
//fixed        
//user_id라는 컬럼이 users라는 테이블의 id라는 pk를 참조하는 fk로 지정
 user_id: {
        type: Sequelize.INTEGER,
        references: { model: "users", key: "id" },
      },

migration파일에서 필요한 수정이 다 끝났으면
npx sequelize-cli db:migrate
를 통해 db에 테이블 생성

mysql db에 잘 생성됐는지 확인해보기

터미널에서 mysql 실행후
show databases;
use [데이터베이스 이름];
show tables;
desc [테이블 이름];
순으로 명령어를 입력하여 잘 완성됐는지 확인 가능

만약 잘못 만들어진 경우

프로젝트 폴더 안에서
npx sequelize-cli db:migrate:undo 또는
npx sequelize-cli db:migrate:undo:all
을 통해 테이블을 지우고 다시 진행하는 것도 가능

migrate:undo 명령어로 지울때는 한단계씩 뒤로 갈 수 있기 때문에 틀린 지점으로 단계별 접근이 가능하다는 장점이 있음, 하지만 migrate는 일단 존재하는 migration파일을 전부 migration시켜준다는 점 주의

참고자료 :
https://sequelize.org/master/manual/migrations.html
https://sequelize.org/master/manual/assocs.html

profile
메모 메모

0개의 댓글