ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

Node.js/Node.js ๊ณต๋ถ€

8.2 Sequelize ํ™˜๊ฒฝ settingํ•˜๊ธฐ

๋Œ•๋Œ•์ด๋ฐœ๐Ÿพ 2018. 6. 28. 15:55


์ด ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๋Š”๋ฐ ํ•œ์ฐธ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์—ˆ๋‹ค ใ…  ๋‹ค์‹œํ•œ๋ฒˆ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฆฌ๋ทฐํ•ด๋ณด์ž..



1. npm ์„ค์น˜


1
npm install sequelize

cs


1
npm install mysql
cs

=> ๋Š˜ ์ด ๋‹จ๊ณ„๊นŒ์ง€๋Š” ๋„ˆ๋ฌด ์ˆœ์กฐ๋กญ๋‹ค. sequelize ์„ค์น˜์™€ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋ ค๋Š” mysql์„ ์„ค์น˜ํ•ด์ค€๋‹ค. 

(๊ณต์‹์ ์œผ๋กœ PostgreSQL, MySQL, MariaDB, SQLite, MS-SQL์„ ์ง€์›ํ•œ๋‹ค.) 

์„ค์น˜์˜ต์…˜์€ ์œ„์—๋Š” ์“ฐ์ง€ ์•Š์•˜์ง€๋งŒ --save๋กœ ํ•ด์ฃผ๋Š”๊ฒŒ ์ข‹์„ ๋“ฏ ํ•˜๋‹ค.



2. ๋””๋ ‰ํ† ๋ฆฌ(ํด๋”) ์ƒ์„ฑ


๋‚˜๋„ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋งํ•˜๋ฉด์„œ ๋”ฐ๋ผํ•œ ๊ฒƒ์ด๋ผ ์ด๋Ÿฐ ๋””๋ ‰ํ† ๋ฆฌ ๋„ค์ด๋ฐ์ด ๋ฌด์กฐ๊ฑด ๋งž๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ํ˜„์žฌ ๋‚ด๊ฐ€ ๋”ฐ๋ฅด๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


1) config

=> DB์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” json ํŒŒ์ผ์„ ๋‹ด๊ณ ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๋‹ค. ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— sequelize.json ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ค€๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์˜

๋‚ด์šฉ์€ ์ด๋ ‡๋‹ค.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
  "development": {
    "username": "root",
    "password": "1234",
    "database": "test",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "test": {
    "username": "root",
    "password": "1234",
    "database": "scott",
    "host": "127.0.0.1",
    "dialect": "mysql"
  },
  "production": {
    "username": "root",
    "password": "1234",
    "database": "movie",
    "host": "127.0.0.1",
    "dialect": "mysql"
  }
}
cs


๋‚ด๊ฐ€ ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•œ ๋ถ€๋ถ„์ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” DB ์ •๋ณด์— ๋”ฐ๋ผ ๋‹ฌ๋ฆฌ ์ž‘์„ฑํ•ด์ค˜์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค. ์‚ฌ์šฉ์–ธ์–ด ๋ถ€๋ถ„์€ mysql์„ ์“ฐ๊ธฐ๋กœ ํ–ˆ์œผ๋ฏ€๋กœ ๋”ฐ๋กœ ์ƒ‰์น ํ•˜์ง€๋Š” ์•Š์•˜๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ mysql์ด ์ปดํ“จํ„ฐ์— ์„ค์น˜๋˜์–ด์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒŒ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ถ€๋ถ„์€ ์ƒ๋žตํ•˜๊ณ  ๋งจ ์œ„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ DB ์œ ์ €๋ช…, ์œ ์ € ํŒจ์Šค์›Œ๋“œ, DB๋ช… ์ˆœ์ด๋‹ค.


์ด๋ ‡๊ฒŒํ•ด์„œ ์ผ๋‹จ DB๊นŒ์ง€๋Š” ์ ‘๊ทผ์„ ํ•˜์˜€๋‹ค.



2) models 

=> ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” js ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์ด๋‹ค. ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋  ๋•Œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ๋Š” ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ๋‹ค. 



์ผ๋‹จ ๋‚ด test DB์˜ table ์ •๋ณด์ด๋‹ค. ๋ณด๋‹ค์‹œํ”ผ test๋ผ๋Š” DB์— 3๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ณ  ๊ทธ ์ค‘์— code ๋ผ๋Š” ํ…Œ์ด๋ธ”์„ ์ด์šฉํ•  ๊ฒƒ์ด๋‹ค.

๋ฐ”๋กœ ์ด์ „๋‹จ๊ณ„์ธ config ๋‹จ๊ณ„์—์„œ ์ž…๋ ฅํ•œ DB ๊ตฌ์กฐ์™€ ์ผ์น˜ํ•ด์•ผํ•œ๋‹ค. ์ฆ‰, database ํ•ญ๋ชฉ์— test๋ผ๋Š” DB๋ช…์„ ์ป๋‹ค๋ฉด ํ•ด๋‹น DB๊ฐ€ ์‹ค์ œ๋กœ ์กด์žฌํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


code ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” code.js ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ฒ ๋‹ค.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
module.exports = function (sequelize, DataTypes) {
  const code = sequelize.define('Code', {
      title: {
          field: 'title', type: DataTypes.STRING(10), allowNull: false },
      code: {
          field: 'code', type: DataTypes.STRING(100), allowNull: false },
  }, {
    // don't use camelcase for automatically added attributes but underscore style
    // so updatedAt will be updated_at
    underscored: true,
 
    // disable the modification of tablenames; By default, sequelize will automatically
    // transform all passed model names (first parameter of define) into plural.
    // if you don't want that, set the following
    freezeTableName: true,
 
    // define the table's name
    tableName: 'code'
  });
 
  return code;
};
cs


ํ…Œ์ด๋ธ”์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” ํŒŒ์ผ๋กœ, ์—ฌ๊ธฐ์„  2๊ฐœ์˜ ํ•„๋“œ (title๊ณผ code) ๋ฅผ ๊ฐ€์ง„๋‹ค. ์„ธ์„ธํ•œ ํ…Œ์ด๋ธ” ์ •๋ณด (๋ฐ์ดํ„ฐ ํƒ€์ž…์ด๋‚˜ allowNull ๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ค๋ช…์€ ์ƒ๋žตํ•œ๋‹ค.)


์กฐ๊ธˆ ์ต์ˆ™์น˜ ์•Š์€ ๊ฒƒ๋“ค์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ณด์ธ๋‹ค. ์‚ฌ์šฉ์ž ๋ชจ๋“ˆ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ธ๋ฐ ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜์ž๋ฉด ํ•ด๋‹น ํŒŒ์ผ์ด ๋ฆฌํ„ดํ•˜๋Š” ๊ฐ์ฒด code๋ฅผ ๋‹ค๋ฅธํŒŒ์ผ์—์„œ ์“ฐ๊ธฐ ์œ„ํ•จ์ด๋‹ค. 


define ์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋กœ ํ…Œ์ด๋ธ”์„ ์ •์˜ํ•˜๊ฒŒ ๋œ๋‹ค. define์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๋Š” ํ…Œ์ด๋ธ”๋ช… (๋‚˜๋Š” 'Code' ๋ผ๊ณ  ์ •์˜) ์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ฏ€๋กœ ๋‚˜์ค‘์— ์‚ฌ์šฉํ•˜๋ ค ํ•  ๋•Œ models์—์„œ ์ •์˜๋œ ๊ฐ’์œผ๋กœ ์จ์ค˜์•ผํ•œ๋‹ค. 




3. app.js ํŒŒ์ผ์—์„œ ํ•ด๋‹น ๋ชจ๋“ˆ ์‚ฌ์šฉ


DB ์ •์˜์™€ ํ…Œ์ด๋ธ” ์ •์˜๊นŒ์ง€ ๋๋ƒˆ์œผ๋‹ˆ ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋ณธ์ธ์˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•  ์ฐจ๋ก€์ด๋‹ค. ๋ฐ”๋กœ ์ด์ „์— ์‚ฌ์šฉ์ž ๋ชจ๋“ˆ์ด๋ผ๊ณ  ๋งŒ๋“ค์—ˆ๋˜ ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ผ์ธ์ด ํ•„์š”ํ•˜๋‹ค.


1
var models = require('./models');
cs


require ๋˜์–ด์žˆ๋Š” ๊ฒƒ์€ models ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์–˜๊ธฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 


๋‚˜๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์œ„์™€๊ฐ™์ด app.js ํŒŒ์ผ๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ์— models ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ./models ๋ผ๊ณ  ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋‹ค. 

์‚ฌ์šฉ์ž ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ๊ฒฐ๊ณผ๋กœ models ๋ณ€์ˆ˜์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.


๊ทธ๋Ÿผ ๋ฐ”๋กœ ํ•˜๋‹จ์— ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด์ž.


1
2
3
4
5
6
7
8
9
10
models.sequelize.sync()
  .then(() => {
    console.log('โœ“ DB connection success.');
    console.log('  Press CTRL-C to stop\n');
  })
  .catch(err => {
    console.error(err);
    console.log('โœ— DB connection error. Please make sure DB is running.');
    process.exit();
  });
cs


models ๋ณ€์ˆ˜์— ์ œ๋Œ€๋กœ ์—ฐ๊ฒฐ๋œ DB๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค๋ฉด success ๋ฌธ์ด ๋‚˜์˜ฌํ…Œ๊ณ  ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด catch๋ฌธ์— ๊ฑธ๋ ค์„œ ์•„๋ž˜์˜ ๋กœ๊ทธ๊ฐ€ ์ฐํž ๊ฒƒ์ด๋‹ค. 


๊ฐ€์žฅ ํ•˜๋‹จ์˜ 2์ค„์ด ๋‚˜์˜ค๋ฉด ์ผ๋‹จ DB์—ฐ๊ฒฐ์€ ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค. ์œ„์— ๋‚˜์˜ค๋Š” ๋กœ๊ทธ๋“ค์€ ์œ„ models ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค ๋•Œ ๋ญ”๊ฐ€ ์ข‹์ง€ ์•Š์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ๋‚˜์˜ค๋Š” ๊ฒฝ๊ณ ๋ฌธ? ๊ฐ™๋‹ค. ์ผ๋‹จ ์—ฌ๊ธฐ๊นŒ์ง€ ๋˜์—ˆ๋‹ค๋ฉด models ๋””๋ ‰ํ† ๋ฆฌ์— ๋งŒ๋“ค์—ˆ๋˜ ํ…Œ์ด๋ธ”๋“ค์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.


๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” ํ”ํžˆ DB ๋ถ„์•ผ์—์„œ ๋งํ•˜๋Š” ๋ฐ์ดํ„ฐ์กฐ์ž‘์–ด(DDL) ์™€ ๋ฐ์ดํ„ฐ์ •์˜์–ด(DML) ๋ฅผ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. 

๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2024/11   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
๊ธ€ ๋ณด๊ด€ํ•จ