Sequelize Module - MrKwon/node.js GitHub Wiki

์นœ์ ˆํ•˜๊ฒŒ๋„ Sequelize๋Š” ํ•œ๊ธ€ํŒ ๊ณต์‹ Docs๊ฐ€ ์žˆ๋‹ค.

Sequelize ๊ณต์‹ Docs

์ด ๋ฌธ์„œ์˜ ๊ตฌ์„ฑ

  1. Sequelize๋ž€
  2. ์‚ฌ์šฉ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ํŒจํ‚ค์ง€
  3. ./models/index.js
  4. ./models ๋””๋ ‰ํ„ฐ๋ฆฌ ๋‚ด์šฉ
  5. MySQL์„ app.js์— ์—ฐ๊ฒฐํ•˜๊ธฐ
  6. Sequelize๋กœ ๋ชจ๋ธ ์ •์˜
  7. Sequelize๋กœ ๊ด€๊ณ„ ์ •์˜
  8. 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>
  1. ์ฒซ๋ฒˆ์งธ param์€ ํ…Œ์ด๋ธ” ๋ช…์ด๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ table_name + 's' ๋กœ ํ…Œ์ด๋ธ” ๋ช…์ด ์„ค์ •๋œ๋‹ค.
  1. ๋‘๋ฒˆ์งธ 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 [๋„ฃ์„ ๊ฐ’] ๊ธฐ๋ณธ๊ฐ’ ์„ค์ •
  1. ์„ธ๋ฒˆ์งธ param์€ ํ…Œ์ด๋ธ” ์˜ต์…˜์ด๋‹ค.
Sequelize ์˜ต์…˜๋ช… ์†์„ฑ ๊ฐ’ ํŠน์ง•

MySQL์„ app.js์— ์—ฐ๊ฒฐํ•˜๊ธฐ

Sequelize๋กœ ๋ชจ๋ธ ์ •์˜

Sequelize๋กœ ๊ด€๊ณ„ ์ •์˜

Sequelize ์ฟผ๋ฆฌ