YoonC

[Nodejs ๊ต๊ณผ์„œ] ์‹œํ€„๋ผ์ด์ฆˆ ๋ณธ๋ฌธ

Develop/Node.js

[Nodejs ๊ต๊ณผ์„œ] ์‹œํ€„๋ผ์ด์ฆˆ

์œคํƒœํ’ 2021. 3. 18. 20:23

๐Ÿ’ก์‹œํ€„๋ผ์ด์ฆˆ๋ž€ MySQL์˜ ์ž‘์—…์„ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์จ ORM

     (Object-relational Mapping : ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฆด๋ ˆ์ด์…˜ ๋งตํ•‘)์œผ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค.

 

==> ์‚ฌ์šฉํ•˜๋Š” ์ด์œ  : ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ์„ ์•Œ์•„์„œ SQL๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ๋•Œ๋ฌธ (SQL์–ธ์–ด ๋ชฐ๋ผ๋„ OK)

 

1) MySQL ์—ฐ๊ฒฐํ•˜๊ธฐ

 ์‹œํ€„๋ผ์ด์ฆˆ๋ฅผ ํ†ตํ•ด ์ต์Šคํ”„๋ ˆ์Šค ์•ฑ๊ณผ MySQL ์—ฐ๊ฒฐํ•ด์ฃผ์–ด์•ผ ํ•จ

...

const { sequelize } = require('./models');

const app = express();
app.set('port', process.env.PORT || 3001);
app.set('view engine', 'html');
nunjucks.configure('views', {
  express: app,
  watch: true,
});
sequelize.sync({ force: false })
  .then(() => {
    console.log('๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ ์„ฑ๊ณต');
  })
  .catch((err) => {
    console.error(err);
  });
  
  ...

:  ์‹œํ€„๋ผ์ด์ฆˆ๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ sync ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ์„œ๋ฒ„ ์‹คํ–‰์‹œ MySQL๊ณผ ์—ฐ๋™๋˜๋„๋ก ํ•˜๋Š” ๊ณผ์ •

 

2) ๋ชจ๋ธ ์ •์˜ํ•˜๊ธฐ

 MySQL์—์„œ ์ •์˜ํ•œ ํ…Œ์ด๋ธ”์„ ์‹œํ€„๋ผ์ด์ฆˆ์—์„œ๋„ ์ •์˜ํ•ด ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ

 ์‹œํ€„๋ผ์ด์ฆˆ๋Š” ๋ชจ๋ธ๊ณผ MySQL ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ. ์ฑ…์—์„œ๋Š” User, Comment ๋ชจ๋ธ ์ƒ์„ฑํ•จ

 

๋ชจ๋ธ์€ Sequelize.Model์„ ํ™•์žฅํ•œ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•˜๋ฉฐ ํฌ๊ฒŒ ๋‘๊ฐ€์ง€ ๋ฉ”์„œ๋“œ๋กœ ๋‚˜๋‰จ

 

  - static init ๋ฉ”์„œ๋“œ : super.init ๋ฉ”์„œ๋“œ. 1th ์ธ์ˆ˜๋Š” ํ…Œ์ด๋ธ” ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์„ค์ •, 2th ์ธ์ˆ˜๋Š” ํ…Œ์ด๋ธ” ์˜ต์…˜

  • ์‹œํ€„๋ผ์ด์ฆˆ๋Š” ์•Œ์•„์„œ id๋ฅผ ๊ธฐ๋ณธํ‚ค๋กœ ์—ฐ๊ฒฐํ•˜๋ฏ€๋กœ id ์ปฌ๋Ÿผ์€ ํ•„์š”๊ฐ€ ์—†์Œ
  • ์‹œํ€„๋ผ์ด์ฆˆ์˜ ์ž๋ฃŒํ˜•์€ MySQL์˜ ์ž๋ฃŒํ˜•๊ณผ ์•ฝ๊ฐ„ ๋‹ค๋ฆ„ (ํ•„์š”ํ• ๋•Œ ์ฐพ์•„๋ณผ๊ฒƒ)
  • ํ…Œ์ด๋ธ”์˜ต์…˜์œผ๋กœ๋Š” sequelize, timestamps, underscored, modelName, tableName,
                               paranoid, charset, collate ๋“ฑ์ด ์žˆ์Œ

  - static associate ๋ฉ”์„œ๋“œ : ๋‹ค๋ฅธ๋ชจ๋ธ๊ณผ์˜ ๊ด€๊ณ„ ์ •์˜

 

ํ›„์— index.js์— ๋ชจ๋ธ์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค. db.User=User; User.associate(db)์˜ ํ˜•์‹

์ฆ‰ db๋ผ๋Š” ๊ฐ์ฒด์— ๋ชจ๋ธ์„ ๋‹ด์€ ํ›„ ๋‹ค๋ฅธํ…Œ์ด๋ธ”๊ณผ์˜ ๊ด€๊ณ„๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” associate ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ๋Š” ๊ฒƒ

 

3) ๊ด€๊ณ„ ์ •์˜ํ•˜๊ธฐ

  ใ„ฑ) 1:N ๊ด€๊ณ„

       static associate ๋ฉ”์„œ๋“œ ์•ˆ์— ์—ฌ๋Ÿฌ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง„ ๋ชจ๋ธ์—๋Š” hasMany ๋ฉ”์„œ๋“œ (sourceKey ์†์„ฑ)๋ฅผ

       ํ•˜๋‚˜์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋ธ๋“ค์—๋Š” belongsTo (targetKey ์†์„ฑ) ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์คŒ

 

  ใ„ด) 1:1 ๊ด€๊ณ„

       hasMany ๋Œ€์‹  hasOne ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉ(sourceKey ์†์„ฑ) belongsTo ๋ฉ”์„œ๋“œ๋Š” ๋™์ผ (targetKey ์†์„ฑ)

       ํ•˜์ง€๋งŒ  belongsTo๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋ธ์— UserId ์นผ๋Ÿผ์ด ์ถ”๊ฐ€๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ ํ•จ

 

  ใ„ท) N:M ๊ด€๊ณ„

       ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋กœ ์–‘์ชฝ ๋ชจ๋ธ ๋ชจ๋‘ belongsTo ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์ƒˆ๋กœ์šด ๋ชจ๋ธ์ด ์ƒ์„ฑ๋œ๋‹ค.

       ์ƒˆ๋กœ์šด ๋ชจ๋ธ์˜ ์ด๋ฆ„์€ through ์†์„ฑ์— ์“ฐ๋ฉด ๋จ

 

4) ์ฟผ๋ฆฌ ์•Œ์•„๋ณด๊ธฐ

์‹œํ€„๋ผ์ด์ฆˆ๋กœ CRUD ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ์•Œ์•„์•ผ ํ•˜๋Š”๊ฒƒ์ด ์‹œํ€„๋ผ์ด์ฆˆ ์ฟผ๋ฆฌ.

์ฟผ๋ฆฌ๋Š” ํ”„๋กœ๋ฏธ์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ then์„ ๋ถ™์—ฌ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ async/await ๋ฌธ๋ฒ•๊ณผ ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

 

๊ด€๊ณ„์ฟผ๋ฆฌ..

'Develop > Node.js' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

REST? RESTful API??  (0) 2021.03.26
[Nodejs ๊ต๊ณผ์„œ] ๋ชฝ๊ณ ๋””๋น„  (3) 2021.03.18
[Nodejs ๊ต๊ณผ์„œ] MySQL  (0) 2021.03.17
[Nodejs] MySQL ๋šž๋”ฒ๐Ÿ”จ  (0) 2021.03.17
[Nodejs ๊ต๊ณผ์„œ] Http ๋ชจ๋“ˆ  (0) 2021.03.05
Comments