포스트

Sequelize에서 ID와 동일한 기본값 설정하기

문제 개요

Node.js의 Sequelize 라이브러리를 사용하면서 테이블의 특정 열에 대해 기본값을 설정하려는 경우가 있습니다. 특히 해당 열의 기본값을 동적으로 생성된 ID와 동일하게 하려는 상황에 직면할 수 있습니다. 이 문제에는 몇 가지 해결 방법이 있으며, 그 중 가장 효과적인 방법을 소개하겠습니다.

해결책 1: beforeCreate 훅 사용하기

beforeCreate는 모델 인스턴스가 데이터베이스에 저장되기 전에 실행되는 함수입니다. 이 훅을 사용하면 새로 생성되는 레코드의 ID를 얻어 해당 레코드의 다른 열에 할당할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const Model = sequelize.define('Model', {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  anotherColumn: {
    type: Sequelize.INTEGER,
    defaultValue: null
  }
});

Model.beforeCreate((instance, options) => {
  instance.anotherColumn = instance.id;
});

해결책 2: 데이터베이스 트리거 사용하기

데이터베이스 트리거는 특정 이벤트가 발생했을 때 자동으로 실행되는 함수입니다. 예를 들어, 새 레코드가 생성될 때 해당 레코드의 ID를 가져와 다른 열에 할당할 수 있습니다.

1
2
3
4
5
6
CREATE TRIGGER set_another_column
AFTER INSERT ON Model
FOR EACH ROW
BEGIN
  UPDATE Model SET anotherColumn = NEW.id WHERE id = NEW.id;
END;

정리

beforeCreate 훅과 데이터베이스 트리거 두 가지 방법 모두 장단점이 있습니다. beforeCreate 훅은 코드 상에서 간편하게 구현할 수 있으나, 복잡한 로직이 필요한 경우에는 데이터베이스 트리거가 더 효율적일 수 있습니다. 어떤 방법을 선택할지는 프로젝트의 요구사항과 개발 환경에 따라 달라질 수 있으니, 상황에 맞게 선택하는 것이 중요합니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.