orm 과 sequelize 의 대해 알아보자 !
객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.
쉽게 말하면 sql문을 사용하지 않고 자바스크립트언어로 디비 연결이 가능한것 !
const query = "SELECT * FROM post WHERE authorId = 12 AND status = 'active'";
models.Post.findAll({
where: { authorId: 12, status: 'active' }
})
이런식으로 바꿔서 코딩이 가능하다
sequelize란 nodeJS에서 mysql을 사용할 때 raw Query문을 사용하지 않고 더욱 쉽게 다룰 수 있도록
도와주는 라이브러리이다.
sequelize는 ORM(Object-Relational Mapping)로 분류가 됩니다.
sequelize를 사용하기 위해서는 설치를 먼저 합니다.
$ npm install --save sequelize
sequelize-cli를 설치 하여 마이그레이션을 쉽게 할 수있다.
cli모델을 생성하거나 스키마 적용을 할 수 있도록 돕는다$ npm install --save sequelize-cli // 설치
config,models,migrations,seeders 자동 설치
$ npx sequelize-cli init
모델을 생성합니다.
$ npx sequelize-cli model:generate --name User --attributes firstName:string,lastName:string,email:string
세부내용은 자신이 만들 테이블에 맞춰 수정을 합니다.
migration.js
'use strict'; module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('urls', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, url: { type: Sequelize.STRING }, title: { type: Sequelize.STRING }, visits: { type: Sequelize.INTEGER, defaultValue:0 }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('urls'); } };
model.js
'use strict'; const { Model } = require('sequelize'); module.exports = (sequelize, DataTypes) => { class url 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 } }; url.init({ url: DataTypes.STRING, title: DataTypes.STRING, visits: {type : DataTypes.INTEGER, defaultValue : 0} }, { sequelize, modelName: 'url', }); return url; };
수정이 완료 되면 마이그레이트를 실행한다.
$ npx sequelize-cli db:migrate
데이터베이스안에 테이블이 생성됩니다.
config안에 development부분은 자신의 데이터베이스에 맞게 설정합니다.config.json
{ "development": { "username": "root", "password": "1234", "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" } }