Sequelize Module - MrKwon/node.js GitHub Wiki
์น์ ํ๊ฒ๋ Sequelize๋ ํ๊ธํ ๊ณต์ Docs๊ฐ ์๋ค.
์ด ๋ฌธ์์ ๊ตฌ์ฑ
- Sequelize๋
- ์ฌ์ฉ์ ์ํด ํ์ํ ํจํค์ง
- ./models/index.js
- ./models ๋๋ ํฐ๋ฆฌ ๋ด์ฉ
- MySQL์ app.js์ ์ฐ๊ฒฐํ๊ธฐ
- Sequelize๋ก ๋ชจ๋ธ ์ ์
- Sequelize๋ก ๊ด๊ณ ์ ์
- Sequelize ์ฟผ๋ฆฌ
Sequelize๋
- MySQL ์์ ์ ์ฝ๊ฒ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ORM(Object-Relational Mapping) - ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Relation(Table)์ ๋งคํํด์ฃผ๋ ๋๊ตฌ
- MariaDB, PostgreSQL, SQLite, MSSQL ๋ฑ SQL ๋ฌธ๋ฒ์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ๊ฐ์ด ์ฌ์ฉํ ์ ์์
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ์์์ SQL ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ ๋๋ฌธ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก MySQL์ ์กฐ์ํ ์ ์์
์ฌ์ฉ์ ์ํด ํ์ํ ํจํค์ง
์์ ํจํค์ง๋ค์ ์ค์นํ๊ณ ํด๋น ๋๋ ํฐ๋ฆฌ๋ก ์ด๋ํ์ฌ
$ sequelize init
์ ์คํํ๋ฉด express-generator ๊ธฐ๋ณธ ๊ตฌ์กฐ์ config, models, migrations, seeders ํด๋๊ฐ ์์ฑ๋๋ค.
./models/index.js
- ./models/index.js ๋
var name = require(__dirname + '/models)
๋ง์ผ๋ก๋ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํ๋ค. models ๋๋ ํ ๋ฆฌ์ ์ฐ๊ฒฐํ๋ฉด ์๋์ผ๋ก index.js์ ์ฐ๊ฒฐ๋๋ค.
sequelize-cli๊ฐ ๊ธฐ๋ณธ์ผ๋ก ์์ฑํด์ฃผ๋ models/index.js ์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
'use strict';
const fs = require('fs');
const path = require('path');
const Sequelize = require('sequelize');
const basename = path.basename(__filename);
const env = process.env.NODE_ENV || 'development';
const config = require(__dirname + '/../config/config.json')[env];
const db = {};
let sequelize;
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
module.exports = db;
zerocho๋ ์, ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ์๋ฌ๊ฐ ๋ฐ์ํ๊ณ ํ์ํ ์๋ ๋ถ๋ถ๋ ๋ง๋ค๊ณ ํ๋ค. ๋ฐ๋ผ์ ํ์์๋ ๋ถ๋ถ์ ์ญ์ ํ๊ณ ์์ ํ๋ฉด ํด์ ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๋ฅผ ์ด๋ค. ์๋ง ์ฌ๋ฌ๊ฐ์ DB์ ์ ๊ทผํ๋ ค๋ฉด Sequelize ์ธ์คํด์ค ์ฌ๋ฌ๊ฐ ์์ฑํ๊ณ config์ ์์ฑ์ ์ฌ๋ฌ๊ฐ ๋ถ์ฌํด๋์์ผ ํ ๋ฏ ํ๋ค.(๋ฐฐ์ด๋ก ํ๋ฉด ๋ ๋ฏ? - ์์ง ๋ชจ๋ฆ)
const path = require('path');
const Sequelize = require('sequelize');
const env = process.env.NODE_ENV || 'development';
const config = require(path.join(__dirname, '..', 'config', 'config.json'))[env];
// env ๋ณ์์ ๋ง๋ config.json ๋ด์ ์์ฑ์ ๊ฐ์ ธ์์ config ๊ฐ์ฒด ๋ณ์์ ์์ฑ์ ์ ์ฅํ๋ค.
// .env๋ก NODE_ENV๋ฅผ ์ค์ ํ์ผ๋ฉด .env์์ ๋ถ๋ฌ์ค๊ณ ์๋๋ฉด 'development'๋ฅผ ์ฌ์ฉํ๋ค.
const db = {};
// ์ด๊ฑด ๋ญ๊น. export๋ฅผ ์ํ ๊ฐ์ฒด ๋ณ์์ธ ๊ฒ ๊ฐ๋ค.
const sequelize = new Sequelize(config.database, config.username, config.password, config);
db.sequelize = sequelize;
db.Sequelize = Sequelize;
// ์ด ๋ ๋ฌธ์ฅ์ ์คํํ๊ณ ๋๋ฉด db ๊ฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ด
// property์ seqeulize์ Sequelize ๋ property๊ฐ ์ถ๊ฐ๋๋ค. (ES2015+)
// db = {
// seqeulize,
// Seqeulize,
// };
module.exports = db;
./models ๋๋ ํฐ๋ฆฌ ๋ด์ฉ
models ๋๋ ํฐ๋ฆฌ์๋ MySQL์ Table๊ณผ ๋์๋๋ Sequelize์ Model๋ค์ ์ ์ํด์ผ ํ๋ค.
module.exports = (sequelize, DataTypes) => {
return sequelize.define('table_name' , {
// column ๋ค์ ํ๋กํผํฐ
// property.key - ํ
์ด๋ธ ์ต์
๋ช
/ property.value - ํ
์ด๋ธ ์ต์
์ค์ ๊ฐ
},
{
// ๊ธฐํ ํ
์ด๋ธ ์ต์
});
};
define ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
sequelize.define([table_name], { column ์ ์ }, { ํ
์ด๋ธ ์ต์
});<br>
- ์ฒซ๋ฒ์งธ param์ ํ ์ด๋ธ ๋ช ์ด๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก
table_name + 's'
๋ก ํ ์ด๋ธ ๋ช ์ด ์ค์ ๋๋ค.
- ๋๋ฒ์งธ param์ ํ ์ด๋ธ column์ ๋ํ ์ ์์ด๋ค.
MySQL ์์ฑ | Sequelize ์์ฑ๋ช | Sequelize ์์ฑ๊ฐ | ๋ด์ฉ |
---|---|---|---|
id |
Sequelize๋ ์์์ id๋ฅผ ๊ธฐ๋ณธ ํค๋ก ์ฐ๊ฒฐ, ๋ฐ๋ก ์ค์ ํ ํ์ ์์ | ||
type |
DataTypes. |
์๋ฃํ ์ค์ | |
VARCHAR |
STRING |
์คํธ๋ง | |
INT |
INTEGER |
์ ์ํ | |
TINYINT |
BOOLEAN |
๋ธ๋ฆฌ์ธ | |
DATETIME |
DATE |
์๊ฐ | |
UNSIGNED |
.USIGNED |
INT ์ต์ | |
ZEROFILL |
.ZEROFILL |
INT ์ต์ | |
NOT NULL |
allowNull |
true / false |
null ํ์ฉ ์ฌ๋ถ |
UNIQUE |
unique |
true / false |
row ์ค๋ณต ํ์ฉ ์ฌ๋ถ |
DEFAULT |
defaultValue |
[๋ฃ์ ๊ฐ] | ๊ธฐ๋ณธ๊ฐ ์ค์ |
- ์ธ๋ฒ์งธ param์ ํ ์ด๋ธ ์ต์ ์ด๋ค.
Sequelize ์ต์ ๋ช | ์์ฑ ๊ฐ | ํน์ง |
---|