Home sequelize 모듈 - define 메서드
Post
X

sequelize 모듈 - define 메서드

define으로 모델 정의

sequlize.define()을 이용해 User 테이블을 생성해보겠습니다.

define 메서드는 Sequelize에서 모델을 정의하는 데 사용되는 메서드입니다.

이를 통해 Sequelize는 DB의 테이블과 모델을 매핑하고, 모델을 생성하며, 해당 모델을 사용하여 DB와 상호작용할 수 있습니다.

형태 : define(modelName: string, attributes: object, options: object)

  • 주요 매개변수

    • modelName : 모델의 이름을 지정합니다.

      이 이름은 Sequelize에서 사용되며, 데이터베이스에 영향을 주지 않습니다.

    • attributes : 테이블의 열(컬럼)을 정의하는 객체입니다.

      각 열은 이름, 데이터 유형, 제약 조건 등을 포함합니다.

      • type : 데이터 타입 명시
      • primaryKey : 기본 키 설정
      • allowNull : Null 허용 여부
      • unique : 중복 값 저장 여부
      • autoIncrement : Auto Increase 기능 사용 여부
      • defaultValue : 기본 값 명시
      • validate : 유효성 검사 옵션
    • options : 모델의 추가적인 설정을 지정하는 객체입니다.

      • tableName : 테이블 이름 명시적 설정
      • freezeTableName : true 설정 시, 모델이름 변환 X, 지정한 이름 사용
      • underscored : true 설정 시, 카멜케이스 대신 스네이크케이스를 사용
      • timestamps : true 설정 시, created_at, updated_at 컬럼이 생성되며 데이터의 생성, 수정 시 시간이 자동으로 입력됩니다.
      • paranoid : true 설정 시, deletedAt 컬럼이 생성되며 지운 시각이 입력됩니다.
      • charset : 인코딩

models/users.js

models 폴더에 users.js 파일을 생성합니다.

class로 모듈화하고 import/export를 활용해 사용해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// users.js
import { DataTypes } from "sequelize";

class User {
  static define(sequelize) {
    sequelize.define(
      "User", // ModelName
      {
        user_id: {
          type: DataTypes.INTEGER,
          primaryKey: true,
          autoIncrement: true,
          allowNull: false,
          // validate
        },
        password: {
          type: DataTypes.STRING(30),
          allowNull: false,
        },
      }, // attributes
      {
        timestamps: false, // true : created_at, updated_at 컬럼이 생성되며 데이터의 생성, 수정 시 시간이 자동으로 입력됩니다.
        paranoid: false /* true : deletedAt 컬럼이 생성되며 지운 시각이 기록됩니다. */,
        underscored: true, // true : 카멜케이스 대신 스네이크케이스를 사용
        freezeTableName: true, // 모델이름 변환 X, 지정한 이름 사용
        tableName: "users", // 테이블 이름 명시적 설정
      } // options
    );
  }
}

export default User;

models/index.js 수정

index.js 파일에 users.js 파일을 import한 후 연결해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const Sequelize = require("sequelize");
const env = process.env.NODE_ENV || "development"; // 지정된 환경변수가 없으면 'development'로 지정

// 클래스를 불러온다.
import User from "./users.js";

const config = require("../config/config.json")[env];
// config.json 파일에 여러 변수명으로 객체를 생성하여 DB 설정을 관리합니다.
// config객체의 env변수(development)키 의 객체값들을 불러옵니다.
// 즉, 데이터베이스 설정을 불러오는 것

const db = {};

// new Sequelize를 통해 MySQL 연결 객체를 생성합니다.
const sequelize = new Sequelize(
  config.database,
  config.username,
  config.password,
  config
);

// 연결객체를 나중에 재사용하기 위해 db.sequelize에 넣어줍니다.
db.sequelize = sequelize;

// 모델 클래스를 넣어줍니다.
db.User = User;

// 모델과 테이블 종합적인 연결이 설정된다.
User.define(sequelize);

module.exports = db;

app.js

sequelize.sync() 를 이용하면 자동으로 모든 모델을 동기화할 수 있습니다.

app.js 파일에 models/index.js 파일을 import한 후 연결해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import express from "express";
import "dotenv/config";

import db from "./models/index.js";
const app = express();

app.set("port", process.env.PORT || 8000);

try {
  await db.sequelize.sync();
  console.log("데이터베이스 연결됨.");
} catch (err) {
  console.log(err);
}

app.use(express.json()); // json 파싱
app.use(express.urlencoded({ extended: false })); // uri 파싱

app.get("/", (req, res) => {
  res.json({ message: "hello world" });
});

// 서버 실행
app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 대기 중");
});

연결 테스트

sequelize-create-table-define-01

sequelize-create-table-define-02

에러 없이 users 테이블이 잘 생성된 것을 확인할 수 있습니다.

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