Search
Duplicate
moon
sun

시퀄라이즈

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
복사

CRUD 게시판 실습