100%를 한번에 바꾸는건 어려워도 1%를 100번 바꾸는건 쉽다.

생각정리 자세히보기

개발/Node.js (NestJS)

[Node.js] Sequelize Model 설정

dc-choi 2021. 12. 18. 15:35
반응형

Sequelize의 동작방식

크게 두가지 방식으로 나눌수있다.

 

1. DB 스키마를 DB에서 다루는 방식

2. DB 스키마를 Sequelize에서 다루고 실행때마다 model 폴더안에 있는 entity들을 가져와서 스키마를 생성한다.

 

1번의 경우는 ERD를 따로 작성했을경우에 사용한다고 한다.

2번의 경우는 JS에서 DB를 관리할수있는 편리함이 있다.

 

2번이 더 유용해보이지만 따로 DBA가 있는경우 1번 방식을 사용한다고 한다.

이번 프로젝트를 진행하는 목적이 공부를 하기위함이고, 이미 ERD를 작성했으니 1번 방식으로 진행을 하려고 한다.

 

DB 테이블을 자동으로 models폴더에 js파일로 생성하기.

설정하는 파트의 부분은 ERD를 전부 작성했다는 전제하로 설명한다.

 

sequelize-auto라는 라이브러리를 사용하면 된다.

express 프로젝트에 sequelize-auto를 설치하자.

npm install -g sequelize-auto
npm install -g mysql
npm install -g mysql2

만약 package.json에도 추가를 해야한다면 추가적으로 -g 설정을 제외하고 명령어를 실행한다.

npm install sequelize-auto
npm install mysql
npm install mysql2

그리고 다음과 같은 형태의 명령으로 현재 mysql 로컬 DB의 테이블을 이용하여 시퀄라이저 models폴더에 js파일을 자동으로 생성할수 있다. 내 로컬의 경우 다음과 같다.

sequelize-auto -o "./models" -d slack -h localhost -u root -p 3306 -x -e mysql

명령어를 실행하고난후에는 다음과 같이 생성이 된다.

위처럼 자동으로 파일이 자동으로 models폴더 내부에 생성된 것을 확인 할수 있다.

 

DB스키마 관리는 그냥 기존의 SQL, workbench, erd등으로 관리한다.

 

sequelize models/index.js 업그레이드

models/index.js 파일은 시퀄라이저 핵심 엔트리 파일이다.

자동으로 models폴더를 읽어서 js파일을 적재할수 있게 수정하자.

수정된 models/index.js 파일은 다음과 같다.

const Sequelize = require('sequelize');
const initModels = require("./init-models");

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;
db.models = initModels(sequelize);

module.exports = db;

 

마무리

시퀄라이즈 설정을 다 해보았다. DB에서 변경사항이 생길때마다 이 명령어를 다시 실행해야하나 고민에 빠졌다.

sequelize-auto -o "./models" -d slack -h localhost -u root -p 3306 -x -e mysql

이 부분은 다시 알아봐야할거같다...

반응형