ORM & sequelize

1

Database

목록 보기
2/7
post-thumbnail

orm 과 sequelize 의 대해 알아보자 !

1. orm

Object Relational Mapping, 객체-관계 매핑

객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 것을 말한다.

  • 객체 지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용한다.
  • 객체 모델과 관계형 모델 간에 불일치가 존재한다.
  • ORM을 통해 객체 간의 관계를 바탕으로 SQL을 자동으로 생성하여 불일치를 해결한다.

쉽게 말하면 sql문을 사용하지 않고 자바스크립트언어로 디비 연결이 가능한것 !

  1. sql문
const query = "SELECT * FROM post WHERE authorId = 12 AND status = 'active'";
  1. sequelize
models.Post.findAll({
    where: { authorId: 12, status: 'active' }
})

이런식으로 바꿔서 코딩이 가능하다

2. sequelize

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"
  }
}
profile
👩🏻‍💻항상발전하자 🔥

0개의 댓글