Sequelize Model
Sequelize Model Basics
Sequelize에서 Model은 데이터베이스 테이블을 추상화한 핵심 개념입니다. 모델은 테이블의 구조(컬럼, 타입, 제약조건 등)와 동작을 정의하며, 애플리케이션 코드와 DB 사이의 인터페이스 역할을 합니다.
Model 정의 방법
Sequelize는 모델을 정의하는 두 가지 방식을 제공합니다. 두 방식은 내부적으로 동일하게 동작하며 스타일 차이에 가깝습니다.
sequelize.define 방식
const User = sequelize.define('User', {
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
}
});
- 간결하고 빠르게 정의할 때 적합
- 함수형 스타일
Model.init + class 상속 방식
class User extends Model {}
User.init({
firstName: {
type: DataTypes.STRING,
allowNull: false
},
lastName: {
type: DataTypes.STRING
}
}, {
sequelize,
modelName: 'User'
});
- 클래스 기반 구조
- 확장 메서드, static 메서드 정의에 유리
- 규모 있는 프로젝트에서 선호됨
모델 접근 방식
정의된 모델은 Sequelize 인스턴스를 통해 접근할 수 있습니다.
sequelize.models.User
또는 정의 시 반환된 변수를 직접 사용해도 됩니다.
테이블 이름 규칙
기본 동작
- 모델명은 단수형
- 테이블명은 복수형으로 자동 변환됨
예시
- Model:
User - Table:
Users
테이블명 고정 (복수형 비활성화)
{
freezeTableName: true
}
- 모델명 그대로 테이블 생성
테이블명 직접 지정
{
tableName: 'employees'
}
컬럼 정의 (Attributes)
컬럼은 DataTypes 를 사용해 정의합니다.
age: {
type: DataTypes.INTEGER,
defaultValue: 0
}
자주 사용하는 옵션
type: 데이터 타입allowNull: NULL 허용 여부defaultValue: 기본값primaryKey: 기본 키autoIncrement: 자동 증가
타임스탬프 (createdAt / updatedAt)
기본 동작
모든 모델에는 기본적으로 다음 컬럼이 자동 생성됩니다.
createdAtupdatedAt
비활성화
{
timestamps: false
}
테이블 동기화 (sync)
Sequelize는 모델 정의를 기준으로 테이블을 자동 생성할 수 있습니다.
await User.sync();
옵션
await User.sync({ force: true });
- 기존 테이블 삭제 후 재생성
- 개발 환경에서만 사용 권장
await User.sync({ alter: true });
- 기존 테이블을 최대한 유지하며 스키마 수정
- 컬럼 추가/변경을 자동으로 시도
⚠️ 운영 환경에서는 sync 대신 migration 사용 권장
요약
- Model은 DB 테이블의 추상화 객체
define/init두 방식 제공- 기본적으로 테이블명은 복수형
timestamps기본 활성화sync는 개발용, 운영은 migration 권장