IT/Node.js

Node.js Sequelize DB 스키마 변경

1am_wish 2023. 4. 13. 18:32
728x90
반응형

기존의 백엔드에서 스키마 변경이 이루어지면 DB에서 수정 후, 코드를 수정했다.

나는 여태까지 그렇게 수정해왔는데, Sequelize의 sync기능을 이용하면 model만 수정해도 DB가 알아서 수정되는 마술이 있다는 것을 발견했다.

 

Sequelize는 DML(데이터 조작)뿐만 아닌 DDL(데이터 정의)도 지원한다는 특징 덕분인데 


이러한 특징 덕분에 이미 만들어진 테이블을 모델에 매핑할 수 있을 뿐 아니라, 작성한 모델을 바탕으로 테이블을 생성하는 등 다룰 수 있다.

아래는 sync를 적용하는 방법이다.

'use strict';

const _sequelize = require('sequelize');
const _config = require('config');

const models = require('../models/index');

const sequelize = new _sequelize(
    _config.get('mysql_local.database'),
    _config.get('mysql_local.username'),
    _config.get('mysql_local.password'),
    {
        host: _config.get('mysql_local.host'),
        dialect: _config.get('mysql_local.dialect'),
        logging: (message) => {
            console.log(message);
        },
        timezone: _config.get('mysql_local.timezone'), // Asia/Seoul
    },
);

// DB 스키마 Sync
sequelize.sync({force: true})

 

이런 방법이 운영중인 서비스에 적용하는 것은 당연히 문제가 있고, 서비스를 만들어가는 과정에서 스키마 구조를 변경하거나 개편할 때 편의에 따라 사용하면 될 것 같다.

기존 테이블을 지우고 재생성하면 데이터를 모두 지운다는 점에서 치명적일 수 있으니 꼭 작업 전에 고려하고 진행해야한다!

728x90
반응형