모델을 정의하는 것은 내가 직접 작성해도 되지만 아까 설치한 sequelize-cli 를 통해 간단한 명령어로 정의할 수 있다.
sequelize-cli란 sequelize command line interface의 줄임말이다.
즉 터미널에서 명령어를 사용해 데이터베이스 작업을 할 수 있게 만들어주는 툴이다.
모델을 생성하는 명령어의 문법이다.
sequelize model:create --name TABLE_NAME --attributes "COLUMN1:type, COLUMN2:type, COLUMN3:type"
간단하게 music 테이블을 만든다고 해보자. 생성할 컬럼은 노래 이름, 가수, 앨범 이름 정도로 간단하게 만들어보자
$ sequelize model:generate --name music --attributes name:string,singer:string,albumName:string
models 폴더와 migrations 폴더에 뭔가 생성됐을 것이다.
models 폴더에 생성된 music.js 를 먼저 살펴보자
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class music extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here
}
};
music.init({
name: DataTypes.STRING,
singer: DataTypes.STRING,
albumName: DataTypes.STRING
}, {
sequelize,
modelName: 'music',
});
return music;
};
music.init()을 통해 명령어에서 입력했던 칼럼을 정의해주고 modelName 옵션으로 모델 이름을 정의해주고 있다.
그리고 sequelize의 특징이라고 할 수 있는 migrations 폴더를 살펴보자
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('music', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
singer: {
type: Sequelize.STRING
},
albumName: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('music');
}
};
실제로 지금 model 은 정의되어있지만 테이블을 생성해주기 위해서는 이 migration을 실행해 줘야 한다.
up 부분을 살펴보면 createTable('tableName', { attributes }) 를 통해 명령어에 입력했던 테이블 정의를 볼 수 있는데 자동으로 id 칼럼과 createaAt, updateAt 칼럼이 생성된 것을 확인할 수 있다. createAt, updateAt 컬럼이 자동으로 생성되는 것이 싫다면
간단하게 명시되어있는 칼럼의 옵션 값을 보면
allowNull : 널 허용
autoIncrement : 자동 증가
primaryKey : PK 설정 여부
type : 데이터 타입 설정
이라는 것을 확인할 수 있다. 그 외의 옵션들은 공식 사이트의 Document를 통해 확인 가능하다.
down 부분을 살펴보면 dropTable('tableName')을 통해 테이블 드롭을 하는 명령어임을 볼 수 있다.
migration 파일을 실행하는 명령어 >>
//up 부분 실행
sequelize db:migrate
//down 부분 실행
sequelize db:migrate:undo
해당 명령어를 터미널에서 실행해보자
up부분이 실행되면 테이블이 생성되는 것을 확인할 수 있고, down 부분이 실행되면 테이블이 삭제되는 것을 확인할 수 있다.
이렇게 간단하게 명령어를 통해 모델 정의와 동시에 테이블 생성/삭제도 가능하게 되었다.
sequelize 공식 사이트 >>
'Node.js > express' 카테고리의 다른 글
[Node.js] sequelize 사용하기 1 (0) | 2021.03.22 |
---|---|
[Node.js] Mysql 연동하기 (0) | 2021.03.22 |
[Node.js] Express 프레임워크를 이용해 Hello World 만들기 (0) | 2021.03.19 |
[Node.js] WebStorm 으로 프로젝트 만들기 (0) | 2021.03.19 |