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

박종혁·2021년 4월 29일
0

기본 세팅

프로젝트 폴더 세팅

프로젝트 폴더에 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개의 댓글