Node.js · 2025-12-24

Sequelize로 Node.js ORM 시작하기 쉽게 보기

Node.js 환경에서 Sequelize를 설치하고 모델을 정의해 기본 CRUD와 연관 관계를 이해하는 실용 설명서. 초보자도 따라할 수 있는 예제 중심 설명.

작성일 : 2025-12-24 ㆍ 작성자 : 관리자
post
목차

소개

Sequelize는 Node.js에서 널리 쓰이는 ORM이다. SQL 문을 직접 많이 쓰지 않고도 데이터베이스를 다룰 수 있다. 이 글은 Sequelize 사용법 Node.js 환경에서 설치부터 모델 정의, 기본 CRUD와 연관 관계까지 차근차근 설명한다. 처음 접하는 사람도 이해하기 쉽도록 예제를 중심으로 구성했다.

준비 작업

필수 도구

  • Node.js(최신 LTS 권장)
  • 데이터베이스(MySQL, PostgreSQL, SQLite 등)
  • 프로젝트 초기화: npm init

패키지 설치

Sequelize와 사용하려는 데이터베이스 드라이버를 설치한다.

npm install sequelize
npm install mysql2          # MySQL 예시
npm install pg pg-hstore    # PostgreSQL 예시

기본 설정

새 파일 db.js를 만든 뒤 Sequelize 인스턴스를 생성한다. 환경 변수로 설정을 분리하면 운영 환경과 개발 환경을 나누기 쉽다.

const { Sequelize } = require('sequelize');

const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql',
  logging: false,
});

module.exports = sequelize;

모델 정의

모델은 테이블 구조를 코드로 표현한다. 아래는 사용자 모델 정의 예제다. 필드 타입과 제약을 명시할 수 있다.

const { DataTypes } = require('sequelize');
const sequelize = require('./db');

const User = sequelize.define('User', {
  id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
  username: { type: DataTypes.STRING, allowNull: false, unique: true },
  email: { type: DataTypes.STRING, allowNull: false },
}, {
  tableName: 'users',
  timestamps: true,
});

module.exports = User;

Sequelize 모델 정의 예제 설명

define 메서드는 모델 이름과 속성, 옵션을 받는다. timestamps 옵션으로 createdAt, updatedAt을 자동 처리한다. 다양한 데이터 타입과 검증 옵션을 통해 제약을 추가할 수 있다.

테이블 생성 및 동기화

개발 초기에는 sync 메서드로 간단히 테이블을 생성할 수 있다. 운영 환경에서는 마이그레이션 도구 사용을 권장한다.

const sequelize = require('./db');
const User = require('./User');

(async () => {
  try {
    await sequelize.authenticate();
    await sequelize.sync({ alter: true });
    console.log('DB 연결 및 동기화 완료');
  } catch (err) {
    console.error('DB 연결 오류:', err);
  }
})();

기본 CRUD 예제

CRUD 패턴을 통해 데이터를 생성, 조회, 수정, 삭제하는 방법을 보여준다.

// 생성
const newUser = await User.create({ username: 'kim', email: 'kim@example.com' });

// 조회
const users = await User.findAll({ where: { username: 'kim' } });

// 수정
await User.update({ email: 'kim2@example.com' }, { where: { id: newUser.id } });

// 삭제
await User.destroy({ where: { id: newUser.id } });

연관 관계(Associations)

다대일, 일대다, 다대다 관계를 정의해 조인 쿼리를 ORM 수준에서 처리할 수 있다. 아래는 게시글과 사용자 관계 예시다.

const Post = sequelize.define('Post', {
  id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true },
  title: DataTypes.STRING,
  content: DataTypes.TEXT,
});

User.hasMany(Post, { foreignKey: 'userId' });
Post.belongsTo(User, { foreignKey: 'userId' });

// 포함 조회
const posts = await Post.findAll({ include: [{ model: User, attributes: ['username'] }] });

실무 팁

  • 환경별 설정을 분리해 비밀번호와 호스트 정보를 관리한다.
  • 운영 환경에서는 sync 대신 마이그레이션 사용을 권장한다.
  • 연결 풀과 타임아웃 설정으로 안정성을 높인다.
  • 대용량 작업은 배치 처리와 트랜잭션으로 묶는다.

문제 해결과 디버깅

에러 발생 시 SQL 로그를 확인하면 원인을 빠르게 파악할 수 있다. logging 옵션을 true로 설정하거나 sequelize.showAllSchemas 같은 유틸을 이용한다. 또한 validation 오류와 DB 제약 오류를 구분해 처리하면 에러 핸들링이 단순해진다.

마무리

이 글은 Node.js Sequelize 튜토리얼 형태로 설치부터 모델 정의 예제, CRUD와 연관 관계를 설명했다. ORM의 장점은 반복적인 SQL 작성 부담을 줄이고 코드 중심으로 데이터 모델을 관리할 수 있다는 점이다. 필요한 경우 공식 문서와 마이그레이션 도구를 함께 사용하면 안정적인 운영 환경을 구축할 수 있다.

Sequelize 사용법 Node.js Node.js ORM Sequelize 모델 정의 예제 Node.js Sequelize 튜토리얼 Sequelize CRUD 예제 데이터베이스 연결 Associations 예제 Sequelize 설치