Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

Sequelize로 Node.js에서 MySQL 테이블 생성하는 방법

Sequelize란 무엇인가?

Sequelize는 Node.js 환경에서 사용되는 프라미스(Promise) 기반 ORM(Object-Relational Mapping) 라이브러리입니다. PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Server 등 다양한 관계형 데이터베이스를 지원하며, SQL 쿼리를 직접 작성하지 않고도 자바스크립트 객체를 통해 데이터베이스를 손쉽게 다룰 수 있게 해줍니다.

Sequelize의 대표적인 기능은 다음과 같습니다.

  • 트랜잭션(Transaction) 지원

  • 테이블 간 관계(Relations) 정의

  • 즉시 로딩(Eager Loading) 및 지연 로딩(Lazy Loading)

  • 읽기 복제(Read Replication) 등 다양한 고급 기능

Sequelize로 MySQL에 연결하기

Node.js 애플리케이션과 MySQL 데이터베이스를 연동하려면 먼저 Sequelize를 통해 연결을 설정해야 합니다. 연결이 완료되면 프로젝트 구성을 위해 아래 세 개의 파일이 필요합니다. 각 파일은 반드시 해당 폴더 안에 생성해 주세요.

  • SequelizeDemo > application.js
    애플리케이션의 루트 파일로, 실제 실행 로직이 담깁니다.

  • SequelizeDemo > utils > database.js
    MySQL 접속에 필요한 모든 연결 정보를 담당합니다.

  • SequelizeDemo > models > user.js
    모델(Model) 정의 정보가 들어가는 파일입니다.

실습 예제

1. database.js 설정

먼저 데이터베이스 연결 정보를 입력합니다.

const Sequelize = require('sequelize')
const sequelize = new Sequelize(
    'YOUR_DB_NAME',      // 데이터베이스 이름
    'YOUR_DB_USER_NAME', // 사용자 이름 (예: root)
    'YOUR_DB_PASSWORD',  // 비밀번호
    {
        dialect: 'mysql',
        host: 'localhost'
    }
);
module.exports = sequelize

위 코드에서 자신의 데이터베이스 이름, 사용자 이름, 비밀번호를 실제 값으로 변경해 주세요.

2. user.js 설정 (모델 정의)

이 파일에서는 모델과 테이블 간의 매핑을 정의합니다.

const Sequelize = require('sequelize')
const sequelize = require('../utils/database')

const User = sequelize.define('user', {
    // 첫 번째 컬럼: user_id
    user_id: {
        // 정수(Integer) 타입
        type: Sequelize.INTEGER,

        // 값 자동 증가
        autoIncrement: true,

        // NULL 허용 안 함
        allowNull: false,

        // 사용자를 고유하게 식별하는 기본 키
        primaryKey: true
    },

    // 두 번째 컬럼: name
    name: { type: Sequelize.STRING, allowNull: false },

    // 세 번째 컬럼: email
    email: { type: Sequelize.STRING, allowNull: false },

    // 타임스탬프 컬럼
    createdAt: Sequelize.DATE,
    updatedAt: Sequelize.DATE,
})

module.exports = User

3. application.js 설정 (테이블 생성)

모델을 기반으로 실제 테이블을 생성할 때는 두 가지 방식 중 하나를 선택할 수 있습니다.

  • sync() 메서드 — 모델이 존재하지 않을 때만 새로 생성합니다. 이미 모델이 존재하면 기존 모델을 덮어쓰지 않습니다.

  • sync({ force: true }) 메서드 — 모델이 없으면 새로 생성하고, 이미 존재한다면 기존 모델을 삭제한 뒤 덮어씁니다.

// 데이터베이스 연결 불러오기
const sequelize = require('./database')

// User 모델 불러오기
const User = require('./user')

// user 모델에 정의된 모든 테이블 생성
sequelize.sync()

// user.js 파일을 수정한 뒤 아래 코드를 실행하면
// 기존 테이블이 덮어써지는지 확인할 수 있습니다.
sequelize.sync({ force: true })

실행 결과

위 프로그램을 실행하면 다음과 같은 출력 결과를 확인할 수 있습니다.

C:\Users\SequelizeDemo> node app.js
Executing (default): CREATE TABLE IF NOT EXISTS `users` (`user_id` INTEGER NOT NULL auto_increment , `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `createdAt` DATETIME, `updatedAt` DATETIME, PRIMARY KEY (`user_id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `users`

실행이 완료되면 MySQL 데이터베이스를 열어 확인해 보세요. 위에서 정의한 대로 users 테이블이 성공적으로 생성된 것을 볼 수 있습니다.