Gorilla-Kim/Project

[MEMO APP] Back-end/ DB์—ฐ๊ฒฐ (3)

Kim_gorilla 2020. 3. 18. 01:33

 

๐Ÿ‘จ‍๐Ÿ’ป DB์—ฐ๊ฒฐ (3)

 

๐Ÿ“Œ model ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•ˆ์— ์ƒ์„ฑ๋  ๋ฐ์ดํ„ฐ๋“ค์˜ ํ‹€์„ ๋งŒ๋“ค์–ด์ค„๊ฒ๋‹ˆ๋‹ค.

์ด ํ‹€์„ model ์ด๋ผ๊ณ  ๋ถˆ๋Ÿฌ์š”. ์Œ.. ๋ญ๋ž„๊นŒ ์‚ฌ์šฉํ•ด๋ณธ ์‚ฌ๋žŒ์˜ ์ž…์žฅ์œผ๋กœ์„œ ๋ง์”€๋“œ๋ฆฌ์ž๋ฉด ์žฅ๊ณ ์˜ ORM๊ณผ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ ๋ชฝ๊ณ ๋””๋น„๋„ ORM์„ ์ง€์›ํ•ด์ค€๋‹ค๊ณ  ํ•˜๋„ค์š” ^^

 

์•„๋ฌดํŠผ! ํ•œ๋ฒˆ ๋งŒ๋“ค์–ด ๋ณด๋„๋ก ํ•˜์ฃ !

 

์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด๋„ฃ์„์ง€๋ฅผ ์ƒ๊ฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ผ๋‹จ ์–ด๋–ค ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค๊ฒƒ์ธ๊ฐ€๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

(์‚ฌ์‹ค ์ด๋Ÿฌํ•œ IT ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๊ฒƒ์€ ์„ค๊ณ„๋‹จ๊ณ„๊ฐ€ ์ •๋ง ์ค‘์š”ํ•ด์š”. ๋จผ์ € ์„ ์ˆ˜๋˜์–ด์•ผ ํ•˜๋Š” ๊ณผ์ •์ด์ง€๋งŒ, ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ณผ๊ฐํžˆ ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค. ์ดํ›„ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋Š” ๋ฏธ๋ž˜์˜ ๋‚˜์—๊ฒŒ ๋งก๊ธฐ.. )

 

์ผ๋‹จ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“ค ์„œ๋น„์Šค๋Š” ๊ฐ„๋‹จํ•œ TodoList ๋ฉ”๋ชจ์žฅ์„ ๋งŒ๋“ค๊ฒ๋‹ˆ๋‹ค.

๊ทผ๋ฐ ๋„ˆ๋ฌด ๊ฐ„๋‹จํ•˜๋ฉด ์žฌ๋ฏธ๊ฐ€ ์—†์œผ๋‹ˆ๊น, ํšŒ์›๊ฐ€์ž…์„ ํ†ตํ•ด ์œ ์ €๋ณ„ ๋ฉ”๋ชจ์žฅ์„ ๊ด€๋ฆฌํ•ด์ฃผ๊ณ  ๊ทธ๋ฃน์ƒ์„ฑ์„ ํ†ตํ•ด ๊ทธ๋ฃน๋ณ„ ๊ณตํ†ต ํ• ์ผ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ• ๊ฒŒ์š”.

 

์ž ๊ทธ๋Ÿผ ์–ด๋–ค ํ…Œ์ด๋ธ”๋“ค์ด ํ•„์š”ํ• ๊นŒ์š”?

  1. ์œ ์ € ํ…Œ์ด๋ธ” (ํšŒ์›๊ด€๋ฆฌ)
  2. Todolist ํ…Œ์ด๋ธ” (๋ฉ”๋ชจ๋“ค)
  3. ๊ทธ๋ฃน ํ…Œ์ด๋ธ” (๊ทธ๋ฃน์ •๋ณด)

์ •๋ฆฌํ•ด ๋ณด๋‹ˆ ์ด์ •๋„๊ฐ€ ๋ ๊บผ๊ฐ™๋„ค์š”. ์ถ”ํ›„ ํ•„์š”ํ•ด์ง€๋Š” ์ •๋ณด๋“ค์„ ๊ทธ๋•Œ๊ฐ€์„œ updateํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ์œ ์ €ํ…Œ์ด๋ธ” ์ƒ์„ฑ์„ ์œ„ํ•œ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณผ๊นŒ์š”? ์ด๋ฆ„์€ User ๋กœ ํ• ๊ฒŒ์š”.

๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ธฐ์ „์— ์ด ๋ชจ๋ธ๋“ค์„ ๊ด€๋ฆฌํ•  models๋ผ๋Š” ์ด๋ฆ„์˜ ํด๋”๋ฅผ dbํด๋”์•ˆ์— ์ƒ์„ฑํ•ด์ฃผ๊ณ  ๊ทธ์•ˆ์— User.js๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.

์ด์•ˆ์— ๋ชจ๋ธ์„ ์œ„ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

 

๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์€ ๋‹‰๋„ค์ž„, ์ด๋ฉ”์ผ, ํŒจ์Šค์›Œ๋“œ, ๊ทธ๋ฆฌ๊ณ  ๊ณ„์ •์ƒ์„ฑ์‹œ๊ฐ„ ์ •๋„?

๋‹ค์Œ์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

const mongoose = require('mongoose');

const User = new mongoose.Schema({
  displayName: String,
  email: String,
  password: String,
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model('User', User);

์œ ์ € ๋ชจ๋ธ์„ ๋งŒ๋“ค์—ˆ์œผ๋‹ˆ ๋‹ค์Œ์€ Todo ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

(์ด๋ฆ„์€ Todo.js ๋ผ๊ณ  ํ• ๊ฒŒ์š”.)

 

์•ˆ์—๋“ค์–ด๊ฐˆ ๋‚ด์šฉ์€ Todo ์ œ๋ชฉ, ๋‚ด์šฉ, ์™„๋ฃŒ์—ฌ๋ถ€, ์ƒ์„ฑํ•œ์‚ฌ๋žŒ, ์ƒ์„ฑ์‹œ๊ฐ„ ์ •๋„?

๋‹ค์Œ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ• ๊ฒŒ์š”.

const mongoose = require('mongoose');

const Todo = new mongoose.Schema({
  title: String,
  content: String,
  complete: Boolean,
  user: { // ํ•ด๋‹น ๋ฉ”๋ชจ๋ฅผ ์ž‘์„ฑํ•œ User
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
  },
  createdAt: {
    type: Date,
    default: Date.now,
  },
});

module.exports = mongoose.model('Todo', Todo);

์ด๋ ‡๊ฒŒ ๋ฉ”๋ชจ๋ฅผ ๋งŒ๋“ค๊ธฐ์œ„ํ•œ ๊ธฐ์ดˆ๋ชจ๋ธ์€ ๋‹ค ๋งŒ๋“ค์–ด์กŒ๊ณ , ๊ทธ๋ฃน์„ ๋งŒ๋“ค๊ณ  ๊ทธ๋ฃน๋ณ„ ํ• ์ผ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์€ ์œ ์ € ๊ธฐ๋Šฅ๊ณผ ์œ ์ €๋ณ„ ๋ฉ”๋ชจ๊ธฐ๋Šฅ์„ ๋‹ค ๋งŒ๋“  ๋‹ค์Œ์— ์ถ”๊ฐ€ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ๊นŒ์ง€ DB๊ด€๋ จ๋‚ด์šฉ์ด์—ˆ๊ตฌ ๋‹ค์Œ ํฌ์ŠคํŒ… ๋ถ€ํ„ฐ๋Š” ํŠน์ • ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์‹œ ํšŒ์›๊ฐ€์ž…์ด ์ด๋ฃจ์–ด์ง€๋„๋ก Controller ์ž‘์„ฑ์ž‘์—…๋“ฑ์„ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์ˆ˜๊ณ ํ•˜์…จ์–ด์š”