SQL 문을 배우는 것은 매우 가치 있는 일이었습니다. 하지만 제가 주로 쓰는 것은 Javascript입니다. 저 이외에도 SQL문을 자바스크립트로 사용하고 싶은 사람이 있었을 것입니다.
그런 사람들을 위해서 Javascript에서 작성하면 자동으로 SQL문으로 바꿔주는 Sequelize 라이브러리가 나오게 된 것입니다.
sequelize가 필요한 파일에 sequelize를 설치합니다.
npx npm install --save sequelize
sequelize를 설치하게 되면 model, migrations, config, seeders 파일이 생깁니다.
config/config.json의 파일은 다음과 같이 바꿔줍니다.
{
"development": {
"username": mysql 유저이름,
"password": 내 비밀번호,
"database": 내가 쓸 데이터베이스 이름,
"host": 호스트주소,
"dialect": "mysql"
},
....
}
}
sequelize-cli는 js에서 SQL문을 작성하고 업데이트 하게끔 도와주므로 설치해줍니다.
npm install --save-dev sequelize-cli
데이터베이스를 terminal 혹은 yarn에서 작성하게 되면 model의 형태로 저장이 됩니다. 이 model은 SQL의 테이블과 대응됩니다.
npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
이 명령어를 사용하면 model과 migration이 생성됩니다.
//model
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User 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) {
}
};
User.init({
firstName: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING
}, {
sequelize,
modelName: 'User',
});
return User;
};
//migrations
'use strict';
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
model이 테이블의 기본 폼을 생성해준다면 migration은 여러 명령어를 통해서 테이블을 생성하거나 테이블을 제거하고 요소를 추가하는 등의 작업을 담당합니다.
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable('Users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstName: {
type: Sequelize.STRING
},
lastName: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
},
});
},
down: async (queryInterface, Sequelize) => {
await queryInterface.dropTable('Users');
}
};
위에서 createtable은 테이블 생성, droptable은 테이블 제거입니다.
혹은 sequelize-cli를 통해 새로운 migration을 생성할 수 있습니다.
npx sequelize-cli migration generate --name test
module.exports = {
up: async (queryInterface, Sequelize) =>{
}
,
down : async (queryInterface, Sequelize) => {
}
}
up부분은 migration을 해줄 때의 명령을 넣어주는 것이고
down부분은 migration을 undo했을 때의 명령을 넣어줍니다.
이렇게 작성한 데이터는
sequelize-cli 명령을 통해 migration 문법이 SQL 문법으로 바뀌어서 mysql에 저장됩니다.
npx sequelize-cli db:migrate
migration 에서 up 부분 실행 및 migrating 실행
npx sequelize-cli db:migrate:undo
migration에서 down부분 실행 및 최근 migration 취소
SQL문법을 사용하지 않더라도 vscode 안에서 js를 통해 데이터베이스를 사용할 수 있는 Sequelize에 대해 알아봤습니다. 혹시 틀린 부분이 있다면 적극적인 comment 부탁드립니다! 감사합니다.