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

๊ฒŒ์‹œํŒ์˜ ๊ธ€์€ DB๋ฅผ ํ†ตํ•ด์„œ ์กฐ์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋‹จ DB์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” Sequelize๋ฅผ ์ด์šฉํ•˜์—ฌ DB๋ฅผ ํ™œ์šฉํ•˜๋ คํ•˜๊ณ , SQL๋ฌธ ์ž‘์„ฑ ์—†์ด Javascript๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

http://bubobubo003.tistory.com/32 

ํ•ด๋‹น ๋งํฌ์— Sequelize๋ฅผ settingํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํฌ์ŠคํŒ… ํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. DB ํ™˜๊ฒฝ์„ setting ํ–ˆ๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— ๋‚ด์šฉ์„ ์ง„ํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


[User] ํ…Œ์ด๋ธ”

+------------+--------------+------+-----+---------+----------------+

| Field      | Type         | Null | Key | Default | Extra          |

+------------+--------------+------+-----+---------+----------------+

| id         | int(11)      | NO   | PRI | NULL    | auto_increment |

| name       | varchar(20)  | NO   |     | NULL    |                |

| nick       | varchar(20)  | NO   |     | NULL    |                |

| user_id    | varchar(50)  | NO   | UNI | NULL    |                |

| password   | varchar(256) | NO   |     | NULL    |                |

| created_at | datetime     | NO   |     | NULL    |                |

| updated_at | datetime     | NO   |     | NULL    |                |

+------------+--------------+------+-----+---------+----------------+


[board] ํ…Œ์ด๋ธ”

+------------+--------------+------+-----+---------+----------------+

| Field      | Type         | Null | Key | Default | Extra          |

+------------+--------------+------+-----+---------+----------------+

| id         | int(11)      | NO   | PRI | NULL    | auto_increment |

| subject    | varchar(30)  | NO   |     | NULL    |                |

| content    | varchar(100) | NO   |     | NULL    |                |

| count      | int(11)      | NO   |     | 0       |                |

| created_at | datetime     | NO   |     | NULL    |                |

| updated_at | datetime     | NO   |     | NULL    |                |

| fk_userId  | int(11)      | YES  | MUL | NULL    |                |

+------------+--------------+------+-----+---------+----------------+


ํ…Œ์ด๋ธ”์€ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์‹ค user ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ ๋“ค์ด ์ฉ ๋ง˜์— ๋“ค์ง„ ์•Š์ง€๋งŒ ๊ฐœ์ธ ์ทจํ–ฅ ๊ป ๋ฐ”๊พธ์…”๋„ ๋ฉ๋‹ˆ๋‹ค.


ํ•ด๋‹น ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” js์˜ model ํŒŒ์ผ์„ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


models/user.js


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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
var models = require('../models');
module.exports = function (sequelize, DataTypes) {
  const user = sequelize.define('User', {
      name: {
          field: 'name'
          type: DataTypes.STRING(20), 
          allowNull:false
      },
      nick: {
          field: 'nick'
          type: DataTypes.STRING(20), 
          allowNull:false
      },
      user_id: {
          field: 'user_id'
          type: DataTypes.STRING(50), 
          allowNull: false,
          unique: true
      },
      password: {
          field: 'password'
          type: DataTypes.STRING(256), 
          allowNull:false
      },
      }, {
    charset: 'utf8',
    collate: 'utf8_unicode_ci',
    underscored: true,
 
    freezeTableName: true,
 
    // define the table's name
    tableName: 'user'
    });
    user.associate = function(models) {
        models.User.hasMany(models.Code, {
            foreignKey: 'fk_userId',
            onDelete: 'cascade'
        });
        models.User.hasMany(models.Board,{
            foreignKey: 'fk_userId',
            onDelete: 'cascade'
        });
    };
    return user;
};
cs


models/board.js

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
module.exports = function (sequelize, DataTypes) {
  const board = sequelize.define('Board', {
      subject: {
          field: 'subject'
          type: DataTypes.STRING(30), 
          allowNull: false 
      },
      content: {
          field: 'content'
          type: DataTypes.STRING(100), 
          allowNull: false 
      },
      count:{
          field:'count',
          type:DataTypes.INTEGER,
          allowNull:false,
          defaultValue:0
      }
  }, {
    charset: 'utf8',
    collate: 'utf8_unicode_ci',
    underscored: true,
 
    freezeTableName: true,
 
    tableName: 'board'
  });
    return board;
};
cs


๊ฐ๊ฐ ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๋Š” sequelize.define ๊ตฌ๋ฌธ์€ ์‰ฝ๊ฒŒ ์ดํ•ด๊ฐ€ ๊ฐ€์‹ค ๊ฒ๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋‘ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ๊ด€๊ณ„๊ฐ€ ์กด์žฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œํŒ์˜ ๊ธ€์€ user์ค‘ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ์ž‘์„ฑํ•  ๊ฒƒ์ด๊ณ , ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ๊ฐ์˜ ๊ฒŒ์‹œ๋ฌผ์— ์ฃผ์ธ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ด€๊ณ„๊ฐ€ ์ƒ๊ธฐ๊ฒŒ ๋˜๊ฒ ์ฃ ?


์ฆ‰, ํ•œ ๋ช…์˜ ์œ ์ €๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” 1:n์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ user.jsํŒŒ์ผ์—์„œ ์™ธ๋ž˜ํ‚ค ์ •์˜์™€ cascade ์†์„ฑ์„ ๋ถ€์—ฌํ•˜์—ฌ user์˜ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋์„ ๋•Œ,

๊ทธ์— ๊ด€๋ จ๋œ ๋ชจ๋“  ๊ฒŒ์‹œ๋ฌผ๋“ค์˜ ์ •๋ณด๋„ ์ผ๊ด„์ ์œผ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.


Sequelize์™€ ํ…Œ์ด๋ธ” ์ •์˜ ํŒŒ์ผ์„ ๋‹ค ์ž‘์„ฑํ–ˆ๋‹ค๋ฉด ์ œ๋Œ€๋กœ ํ…Œ์ด๋ธ”์ด ๋งŒ๋“ค์–ด ์ง€๋Š” ์ง€ ํ™•์ธ์„ ํ•ด๋ด…๋‹ˆ๋‹ค.


routes/index.js

1
2
3
4
5
6
7
var express = require('express')
var router = express.Router()
 
router.get('/',function(req,res){
    res.send('hi')
})
module.exports = router;
cs


app.js

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
31
32
33
34
35
36
37
38
39
40
41
42
43
var express = require('express');
var path = require('path');
var models = require('./models')
var app = express();
 
//app.get
var indexRouter = require('./routes/index');
//sequelize
models.sequelize.sync()
    .then(function() {
    console.log('โœ“ DB connection success.');
      console.log('  Press CTRL-C to stop\n');
  })
  .catch(function(err) {
    console.error(err);
    console.log('โœ— DB connection error. Please make sure DB is running.');
    process.exit();
  });
 
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine''pug');
//dir path
app.use(express.static(__dirname));
 
//get
app.use('/', indexRouter);
 
app.use(function(req, res, next) {
  next(createError(404));
});
 
// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env'=== 'development' ? err : {};
 
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});
module.exports = app;
cs


์ด๋ ‡๊ฒŒ ์ž‘์„ฑ ํ›„ app.js ํŒŒ์ผ์„ ์‹คํ–‰์‹œ์ผฐ์„ ๋•Œ console์ด ๋‚˜์˜ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค.



javascript๋กœ ์ž‘์„ฑํ•œ ํ…Œ์ด๋ธ” ์ •๋ณด๊ฐ€ SQL๋ฌธ์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด์„œ console์— ์ฐํžˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ DB๋ฅผ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด ํ…Œ์ด๋ธ”์ด ์ƒ๊ธด ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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 31
๊ธ€ ๋ณด๊ด€ํ•จ