[NodeJS] Sequelize

이애진·2022년 7월 14일

Node

목록 보기
9/12
post-thumbnail

ORM 기반으로, DB 쿼리를 날릴 때 하드코딩으로 작성하지 않아도 된다.
promise 기반으로 구현되었기 때문에 비동기 로직을 편리하게 사용할 수 있다.

install library

npm install sequelize mysql2

create sequelize.ts

import { Sequelize } from 'sequelize';
import dotenv from 'dotenv';
import { join } from 'path';

dotenv.config();

const sequelize = new Sequelize(
    process.env.MYSQL_DATABASE as string,
    process.env.MYSQL_USER as string,
    process.env.MYSQL_PASSWORD,
    {
      host: process.env.MYSQL_HOST,
      port: 13306,
      dialect: 'mysql',
      pool: { max: 30, min: 0, idle: 10000 },
      logging: false
    }
);

export default sequelize;

sequelize-cli를 이용해 sequelize 초기화를 시켜주어 다른 폴더까지 생성을 해줄 수 있는데, 나 같은 경우에는 미리 생성해둔 폴더와 일부 겹쳐 초기화를 따로 진행하지 않았다

development, test, production config만 추후에 별도로 변경하면 될 듯 싶다


create model

import { Model, DataTypes, Sequelize } from "sequelize";

interface MemberAttributes {
    email : string
    pwd : string
    profile : string
}

class MemberModel extends Model<MemberAttributes> {
    public email!: string;
    public pwd!: string;
    public profile! : string;
}

export default function(sequelize: Sequelize): typeof MemberModel {
    MemberModel.init(
        {
            email: {
                type: DataTypes.STRING(50),
                allowNull: false,
                primaryKey: true
            },
            pwd: {
                type: DataTypes.STRING(255),
                allowNull: false
            },
            profile: {
                type: DataTypes.STRING(255),
                allowNull: true
            }
        },
        {
            modelName: 'member',
            tableName: 'member',
            sequelize,
            timestamps: false
        }
    );

    return MemberModel;
}

Sequelize를 사용하려면 모델 생성해서 db와 맞추어야한다

모델을 생성해서 쿼리를 날릴 때, 중간에 계속 나는 정작 사용하지 않는 createAt, updateAt 필드를 찾으려고 하길래 이를 무시하기 위해 timestamps: false 를 설정해야한다


create index model

import sequelize from '@database/sequelize'
import MemberModel from './member';

const DB = {
    sequelize,
    member: MemberModel(sequelize)
}

export default DB;

사용하기 쉽도록 객체화 하여 사용한다


use

const chkEmail = await DB.member.findOne({ where: { email: reqBody.email} });

await DB.member.create({
    email: reqBody.email,
    pwd: reqBody.password,
    profile: reqBody.profile
});

index model에서 추출한 DB로 조작할 member를 선택하여 쿼리를 수행한다
쿼리 사용 방법은 아래 블로그에 잘 정리되어있는 듯 하니 아래 블로그를 참고하자

ukcasso code

profile
Frontend Developer

0개의 댓글