๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Vue.js

Vue.js(1) ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ๋ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

by Jo__y 2022. 10. 9.

MVVM ์ด๋ž€?

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

1. ๋ชจ๋ธ Model

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฌ๋‹ค.2. ๋ทฐ View
  • UI์™€ UI ๋กœ์ง์„ ๋‹ค๋ฃฌ๋‹ค.3. ๋ทฐ ๋ชจ๋ธ View Model
    • View ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ์œ„ํ•ด ๋งŒ๋“ , View๋ฅผ ์œ„ํ•œ Model์ด๋‹ค.
      View๋ฅผ ๋‚˜ํƒ€๋‚ด์ฃผ๊ธฐ ์œ„ํ•œ Model ์ด์ž View ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ๋ถ€๋ถ„์ด๋‹ค.

๋™์ž‘

  1. ์‚ฌ์šฉ์ž์˜ Action๋“ค์€ View๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๊ฒŒ ๋จ
  2. View์— Action์ด ๋“ค์–ด์˜ค๋ฉด, Command ํŒจํ„ด์œผ๋กœ View Model์— Action์„ ์ „๋‹ฌ
  3. View Model์€ Model์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญ
  4. Model์€ View Model์—๊ฒŒ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต
  5. View Model์€ ์‘๋‹ต ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜์—ฌ ์ €์žฅ
  6. View๋Š” View Model๊ณผ Data Bindingํ•˜์—ฌ ํ™”๋ฉด์„ ๋‚˜ํƒ€๋ƒ„

Vue.js ๋ž€?

  • ์›น ํŽ˜์ด์ง€ ํ™”๋ฉด์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ frontend framework
  • MVVM ํŒจํ„ด์˜ ViewModel ๋ ˆ์ด์–ด์— ํ•ด๋‹นํ•˜๋Š” ํ™”๋ฉด๋‹จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
  • ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
  • ๋ฆฌ์•กํŠธ์™€ ์•ต๊ทค๋Ÿฌ์˜ ์žฅ์ ์„ ๊ฐ€์กŒ๋‹ค.
    • ์•ต๊ทค๋Ÿฌ์˜ ์–‘๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ๊ณผ ๋ฆฌ์•กํŠธ์˜ ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ํ๋ฆ„์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ–ˆ๋‹ค.ํŠน์ง• : Reactivity๋ฐ์ดํ„ฐ์˜ ๋ณ€ํ™”์— ๋”ฐ๋ผ ํ™”๋ฉด์ด ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
      (์ฝ”๋“œ ์ˆ˜์ • ํ›„ ์ƒˆ๋กœ๊ณ ์นจ์„ ํ†ตํ•ด ๋‹ค์‹œ ๋กœ๋”ฉ์„ ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.)

Vue.js ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

๊ธฐ๋ณธ์ ์œผ๋กœ npm(Node.js ์„ค์น˜) ๊ณผ git์ด ์„ค์น˜ ๋˜์–ด์žˆ์–ด์•ผ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๋‹ค.

1. Vue CLI ์„ค์น˜

vue-cli ๋Š” ๊ธฐ๋ณธ Vue ๊ฐœ๋ฐœํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค.

CLI ?
๋ช…๋ น ์ค„ ์ธํ„ฐํŽ˜์ด์Šค(CLI, Command line interface) ๋˜๋Š” ๋ช…๋ น์–ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ…์ŠคํŠธ ํ„ฐ๋ฏธ๋„์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์ปดํ“จํ„ฐ๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ๋œปํ•œ๋‹ค.

npm install -g @vue/cli

ํ„ฐ๋ฏธ๋„์—์„œ ์œ„์™€๊ฐ™์ด ์ž…๋ ฅํ•˜์—ฌ ์„ค์น˜ํ•œ๋‹ค.

2. vue ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

์›ํ•˜๋Š” ๊ฒฝ๋กœ์—์„œ

vue create ํ”„๋กœ์ ํŠธ๋ช…

์„ ์ž…๋ ฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

Default ์˜ต์…˜์„ ์„ ํƒํ•œ๋‹ค.

3. vue ์„œ๋ฒ„ ์‹œ์ž‘

npm run serve

๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•œ๋‹ค.


Vue.js ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

1. node_modules

  • npm ์œผ๋กœ ์„ค์น˜๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ2. public > index.html
  • npm run serve ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ์‹คํ–‰๋˜๋Š” ํŒŒ์ผ
  • ํ”„๋กœ์ ํŠธ ๋ฐฐํฌ์‹œ ํ•„์š”ํ•œ ํŒŒ์ผ
  • ์‹ค์ œ build ๋œ ํŒŒ์ผ๋“ค์€ src ์•„๋ž˜์— main.js ๋“ฑ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋“ค์„ ์ข…ํ•ฉํ•ด์„œ
    ์ตœ์†Œํ•œ์˜ ํŒŒ์ผ๋กœ ๋ฌถ์–ด์„œ ์ฃผ์ž…3. src
  • ์‹ค์ œ ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”ฉ์ด ์ด๋ฃจ์–ด์ง€๋Š” ๋””๋ ‰ํ† ๋ฆฌ
  • ์• ํ”Œ๋ฆฌํ…Œ์ด์…˜์ด ๋™์ž‘ํ•˜๋Š”๋ฐ ํ•„์š”ํ•˜๋Š” ๋กœ์ง๋“ค์ด ์œ„์น˜
    • api/ : api ํ•จ์ˆ˜
    • assets/ : ์ด๋ฏธ์ง€, ๊ธฐํƒ€ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋“ฑ ํŒŒ์ผ๋“ค์„ ์ €์žฅํ•˜๋Š” ์žฅ์†Œ
    • compoments/ : vue ์†Œ์Šค๋“ค์„ ์ €์žฅํ•˜๋Š” ์žฅ์†Œ
    • routes/ : vue-router ์„ค์ •์„ ์ €์žฅํ•˜๋Š” ์žฅ์†Œ
    • store/ : vuex ๋ฅผ ์ด์šฉํ•œ ์ƒํƒœ๊ด€๋ฆฌ
    • utils/ : ํ•„ํ„ฐ ๋“ฑ์˜ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜
    • views/ : ๋ผ์šฐํ„ฐ ํŽ˜์ด์ง€
    • App.vue : ํŽ˜์ด์ง€๊ฐ€ ์‹œ์ž‘๋˜๋Š” ์ตœ์ดˆ์˜ ์ปดํฌ๋„ŒํŠธ
    • main.js : ์ง„์ž…์ . ๊ฐ€์žฅ๋จผ์ € ์‹œ์ž‘๋˜๋Š” javascript ํŒŒ์ผ๋กœ vue instance ์ƒ์„ฑํ•˜๋Š” ์—ญํ• 

4. .gitignore

  • git์—์„œ ํŠน์ •ํŒŒ์ผ ํ˜น์€ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ ๋Œ€์ƒ์—์„œ ์ œ์™ธํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ5. package.json
  • dependency ์„ค์ •ํ•˜๋Š” ํŒŒ์ผ๋กœ, maven ์— ๋น„์œ ํ•˜๋ฉด repository ์—ญํ• 6. babel.config.js
  • js์˜ ๋ฒ„์ „์„ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” babel ์˜ ์„ค์ •ํŒŒ์ผ7. jsconfig.json
  • import ๊ฒฝ๋กœ๋ฅผ ../../ ์™€ ๊ฐ™์€ ์ƒ๋Œ€๊ฒฝ๋กœ๊ฐ€ ์•„๋‹Œ @ ๋กœ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ํ‘œ๊ธฐํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •8. vue.config.js
  • vue cli ํ™˜๊ฒฝ์„ค์ •๊ณผ webpack ์„ค์ •๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ฃผ๋กœ ์™ธ๋ถ€ ์ฐธ์กฐํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ ๋ณ€๊ฒฝํ• ๋•Œ ์“ฐ์ธ๋‹ค. publicPath ๋ณ€๊ฒฝ
  • ํ”„๋ก์‹œ ์„ค์ • ๊ฐ€

์ฐธ์กฐ 
MVVM ํŒจํ„ด์ด๋ž€?
Vue.js ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?
vue.js ์„ค์น˜ ๋ฐ ์„ธํŒ…
vue-cli๋กœ ๊ฐœ๋ฐœํ™˜๊ฒฝ
Vue.js ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ
Vue.js-03 ํ”„๋กœ์ ํŠธ๊ตฌ์กฐ
vue-proxy ์‚ฌ์šฉํ•˜๊ธฐ
โ˜…์ด๋ฏธ ์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ์— vue ์„ค์น˜ํ•˜๊ธฐ
โ˜…Vue ๊ฐœ๋ฐœํ™˜๊ฒฝ ๋งŒ๋“ค๊ธฐ

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€