Sequelize
Node.js 환경에서 사용되는 ORM(Object-Relational Mapping) 라이브러리
MySQL, PostgreSQL, SQLite, MSSQL 등 다양한 데이터베이스를 지원합니다. Sequelize를 사용하면 JavaScript 코드를 통해 데이터베이스와 상호 작용할 수 있으며, 데이터베이스 스키마를 모델로 정의하여 쉽게 다룰 수 있습니다.
주요 속성 및 메소드
속성 및 메소드 | 설명 |
sequelize | Sequelize 인스턴스를 나타냅니다. |
Sequelize.DataTypes | 다양한 데이터 타입을 제공하는 속성입니다. |
sequelize.define() | 모델을 정의합니다. |
belongsTo() | 다양한 관계를 설정합니다. (다른 모델과의 1:N 관계 등) |
hasMany() | 다양한 관계를 설정합니다. (다른 모델과의 N:1 관계 등) |
hasOne() | 다양한 관계를 설정합니다. (다른 모델과의 1:1 관계 등) |
sequelize.sync() | 데이터베이스와 모델을 동기화합니다. |
sequelize.sync({ force: true }) | 데이터베이스를 강제로 재생성합니다. |
create(values, options) | 새로운 레코드를 생성합니다. |
findAll(options) | 모든 레코드를 검색합니다. |
findByPk(id, options) | 주어진 기본 키로 레코드를 검색합니다. |
update(values, options) | 레코드를 업데이트합니다. |
destroy(options) | 레코드를 삭제합니다. |
사용 목적
Sequelize는 데이터베이스와의 상호 작용을 추상화하여 개발자가 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 통신할 수 있게 해줍니다. 이를 통해 코드의 가독성을 높이고, 데이터베이스 스키마의 변경에 유연하게 대처할 수 있습니다. 또한 Sequelize는 다양한 데이터베이스를 지원하므로, 프로젝트의 요구 사항에 맞게 선택하여 사용할 수 있습니다.
MySQL 설치
MySQL 연결
1.
데이터 베이스 생성
2.
모듈 설치
3.
config.json (데이터 소스 설정)
4.
model 설정
5.
app 설정
데이터 베이스 생성
CREATE SCHEMA `test` ;
Plain Text
복사
package.json 생성
npm init
Shell
복사
모듈 설치
# 모듈 설치
npm install express morgan pug sequelize sequelize-cli mysql2 dotenv
# 개별 설치
npm install express
npm install morgan
npm install sequelize
npm install sequelize-cli
npm install mysql2
npm install dotenv
---
# sequelize 초기화 (sequelize-cli 모듈 이용)
npx sequelize init
### sequelize 설정 파일들이 생성됨
### 자동 생성된 models/index.js 에 에러 발생이슈 등으로 코드 수정
Markdown
복사
모듈 설치
npm install express morgan sequelize sequelize-cli mysql2 dotenv
Shell
복사
시퀄라이즈 초기화
npx sequelize init
Shell
복사
config.json (데이터 소스 설정)
{
"development": {
"username": "joeun",
"password": "123456",
"database": "test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "joeun",
"password": "123456",
"database": "test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "joeun",
"password": "123456",
"database": "test",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
JSON
복사
model 설정
index.js
const Sequelize = require('sequelize');
// ✅ 모델 import
const Board = require('./board');
const env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env];
const db = {};
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
// 모델 등록 및 설정
db.Board = Board;
// 모델 초기화 메소드 호출
Board.initiate(sequelize);
// 연관 관계 설정 메소드 호출 (필요에 따라 사용)
Board.associate(db);
module.exports = db;
JavaScript
복사
board.js
const { DataTypes, Model, Sequelize } = require('sequelize');
class Board extends Model {
static initiate(sequelize) {
Board.init(
{
board_no: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
},
title: {
type: DataTypes.STRING,
allowNull: false,
},
writer: {
type: DataTypes.STRING,
allowNull: false,
},
content: {
type: DataTypes.TEXT,
allowNull: false,
},
reg_date: {
type: 'TIMESTAMP',
// defaultValue: 'now()',
},
upd_date: {
type: 'TIMESTAMP',
// defaultValue: 'now()',
},
},
{
sequelize,
modelName: 'Board',
tableName: 'board',
timestamps: false, // true ➡ createdAt, updatedAt 컬럼 자동생성
}
);
}
static associate(db) {
// Add associations if needed
}
}
module.exports = Board;
JavaScript
복사
app 설정
.env
# 모드 (development, test, production)
NODE_ENV=development
# PORT 설정
PORT=3000
Plain Text
복사
app.js
const express = require('express');
const path = require('path');
const morgan = require('morgan');
const dotenv = require('dotenv');
const { sequelize } = require('./models');
dotenv.config(); // dotenv 설정
const app = express();
app.set('port', process.env.PORT || 3001);
sequelize.sync({ force: false })
.then(() => {
console.log('데이터베이스 연결 성공');
})
.catch((err) => {
console.error(err);
});
app.use(morgan('dev'));
app.use(express.static(path.join(__dirname, 'public')));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use((req, res, next) => {
const error = new Error(`${req.method} ${req.url} 라우터가 없습니다.`);
error.status = 404;
next(error);
});
app.use((err, req, res, next) => {
res.locals.message = err.message;
res.locals.error = process.env.NODE_ENV !== 'production' ? err : {};
res.status(err.status || 500);
res.render('error');
});
app.listen(app.get('port'), () => {
console.log(app.get('port'), '번 포트에서 대기 중');
});
JavaScript
복사






