시퀄라이즈 ORM (1)

김무연·2023년 12월 18일

Backend

목록 보기
43/49
post-thumbnail

Sequelize ORM

SQL 작업을 쉽게 할 수 있도록 도와주는 라이브러리

  • ORM: Object Relational Mapping: 객체와 데이터를 매핑(1대1 짝지음)
  • MySQL 외에도 다른 RDB(Maria, Postgre, SQLite, MSSQL)와도 호환됨
  • 자바스크립트 문법으로 데이터베이스 조작 가능

시퀄라이즈 명령어 사용하기 위해 sequelize-cli 설치

mysql2는 MySQL DB가 아닌 드라이버(Node.js와 MySQL을 이어주는 역할)

npx sequelize init으로 시퀄라이즈 구조 생성

위 처럼 진행할 시 package.json을 제외하고 config/config.json 이라는 환경 변수 파일이 하나 생성 된다.

// config.json

{
  "development": {
    "username": "이름",
    "password": "비밀번호",
    "database": "sehema 이름",
    "host": "host ip",
    "dialect": "어떠한 db인지"
  }
}

로 기입해준다!

이후 models 폴더를 만든 후 sequelize를 사용할 수 있게 파일을 만들어 선언해 준다

// sequelize.js

const Sequelize = require('sequelize');

const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};

const sequelize = new Sequelize(config.database, config.username, config.password, config);

db.sequelize = sequelize;

module.exports = db;

이후 선언해 준 sequlize 파일을 import 해와서 db를 연결 시켜준다

sequelize.sync({ force: false })
  .then(() => {
    console.log('데이터베이스 연결 성공');
  })
  .catch((err) => {
    console.error(err);
  });

model(테이블) 기초 만들기

sequelize의 model은 sql에서 테이블을 의미

공식문서 참조
https://sequelize.org/docs/v6/core-concepts/model-basics/

class User extends Sequelize.Model {
  static initiate(sequelize) {
    User.init({
      name: {
        type: Sequelize.STRING(20),
        allowNull: false,
        unique: true,
      },
      age: {
        type: Sequelize.INTEGER.UNSIGNED,
        allowNull: false,
      },
    }, {
      sequelize, // static init의 매개변수와 연결되는 옵션
      timestamps: false, // 자동으로 날짜 컬럼을 추가하는 옵션
      underscored: false, // 스네이크 케이스로 바꾸는 옵션 ('_'붙일지 말지)
      modelName: 'User', // 모델 이름
      tableName: 'users', // 실제 데이터베이스의 테이블 이름
      paranoid: false, // deletedAt 컬럼을 생성하는 옵션
      charset: 'utf8', // 한글 설정
      collate: 'utf8_general_ci', // 한글 설정
    });
  }
    static associate(db) {
    db.User.hasMany(db.Comment, { foreignKey: 'commenter', sourceKey: 'id' });
  }
};

sequelize의 기능 중 timestamps는 현재 false로 되어 있지만, default값은 true이다. 만약 true 일시 자동으로 createdAt, updatedAt이 생성되어, 만들어진 시간, 업데이트 된 시간을 자동으로 기입하게 해준다.

위 처럼 테이블을 초기화(init) 시켜 만들어 준다. 하지만 원래 sql이라면 아래처럼
기본키를 지정하고, autoIncrement를 통해 자동으로 숫자가 올라가게 해줘야 하지만,

id: {
	type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true,
    }

sequelize는 위와 같이 해주지 않아도 id를 자동으로 넣어주기 때문에 위 코드를 생략이 가능하다.

시퀄라이즈와 mysql의 자료형 차이

profile
Notion에 정리된 공부한 글을 옮겨오는 중입니다... (진행중)

0개의 댓글