Node Js - MVC ํŒจํ„ด ๐Ÿง๐Ÿง

์ด๊ธฐ๊ณคยท2022๋…„ 3์›” 14์ผ
0
post-custom-banner

MVC ํŒจํ„ด

๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(modelโ€“viewโ€“controller, MVC)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์ด ํŒจํ„ด์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹œ๊ฐ์  ์š”์†Œ๋‚˜ ๊ทธ ์ด๋ฉด์—์„œ ์‹คํ–‰๋˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์„œ๋กœ ์˜ํ–ฅ ์—†์ด ์‰ฝ๊ฒŒ ๊ณ ์น  ์ˆ˜ ์žˆ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. MVC์—์„œ ๋ชจ๋ธ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ •๋ณด(๋ฐ์ดํ„ฐ)๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ทฐ๋Š” ํ…์ŠคํŠธ, ์ฒดํฌ๋ฐ•์Šค ํ•ญ๋ชฉ ๋“ฑ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์‚ฌ์ด์˜ ์ƒํ˜ธ๋™์ž‘์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ์œ„ํ‚ค๋ฐฑ๊ณผ

MVC ํŒจํ„ด์ด๋ž€??

  • M(Model/ ๋ชจ๋ธ)

    ์„œ๋น„์Šค์— ํ•„์š”ํ•œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋ธ์—์„œ ์ •์˜๋ฉ๋‹ˆ๋‹ค.
    ์˜ค๋กœ์ง€ Model ๋ ˆ์ด์–ด์— ์ •์˜๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค schema๋ฅผ ํ†ตํ•ด์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด CRUD ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • V(View/ ๋ทฐ)

    ํด๋ผ์ด์–ธํŠธ์™€ ์ƒํ˜ธ์ž‘์šฉ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
    ํ™”๋ฉด์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

  • C(Controller / ์ปจํŠธ๋กค๋Ÿฌ)

    ์œ ์ €์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ด์„œ ์‘๋‹ตํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    Controller๋Š” Model๊ณผ ์†Œํ†ตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

MVC ํŒจํ„ด์˜ ์žฅ์ 

  • ๊ฐ ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์˜ค๋ฅ˜์˜ ๋ฐœ๊ฒฌ, ์ฝ”๋“œ ์ˆ˜์ •์„ ํ•˜๊ธฐ ์ข‹๊ฒŒ ํ•ด์ค€๋‹ค
  • ๋™์‹œ์ ์ธ ๊ฐœ๋ฐœ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค( ๊ฐ ์—ญํ™œ์ด ๋‚˜๋‰˜์–ด์ ธ ์žˆ์–ด, ๋™์‹œ ๋‹ค๋ฐœ์ ์ธ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.)
  • ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ์ ˆ๊ฐํ•  ์ˆ˜ ์žˆ๋‹ค
  • ํ…Œ์ŠคํŠธ-์ฃผ๋„๊ฐœ๋ฐœ (๊ฐ๊ฐ์˜ ๋ ˆ์ด์–ด, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๋ ˆ์ด์–ด ์†์— ์†ํ•œ ๊ฐ๊ฐ์˜ ๋ชจ๋“ˆ์„ ํ…Œ์ŠคํŠธ ํ•˜๊ธฐ ์ข‹๋‹ค.)

MVC ํŒจํ„ด์˜ ๋‹จ์ 

  • ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ๋“ค๋กœ ๊ตฌ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žก๋„๊ฐ€ ๋†’์•„์ง„๋‹ค
  • ์„ค๊ณ„์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์ˆ™๋ จ๋œ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•„์š”ํ•˜๋‹ค

MVC ํŒจํ„ด์˜ ํ•œ๊ณ„

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ปค์ง€๊ณ  ๊ธฐ๋Šฅ ๋ฐ ํ™”๋ฉด, ๋ฐ์ดํ„ฐ ๋“ฑ์ด ๋‹ค์–‘ํ•ด์ง€๋ฉด MVC ํŒจํ„ด์€ Controller๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ์˜ Model๊ณผ View๊ฐ€ ํ˜•์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ Controller์— ๋‹ค์ˆ˜์˜ Model๊ณผ View๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด๋ฒ„๋ฆฌ๊ณ , ๋šฑ๋šฑํ•œ Controller, Massice ViewContoller ๊ผด์ด ๋งŒ๋“ค์–ด์ ธ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.
  • ์ด๋Ÿด ๊ฒฝ์šฐ MVC ํŒจํ„ด ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋ณต์žกํ•ด์ง€๊ณ  ์ปค์ ธ๋ฒ„๋ ค์„œ, ์ƒˆ ๊ธฐ๋Šฅ(ํ˜น์€ ๋ฐ์ดํ„ฐ) ๋“ฑ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋งˆ๋‹ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ ๊ฐ€๋…์„ฑ์ด๋‚˜ ํšจ์œจ์„ฑ๋„ ๋–จ์–ด์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํ–ˆ๋˜ controller๊ฐ€ ์ ์  ๋งŽ์€ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๊ผฌ์—ฌ๋ฒ„๋ฆฌ๋Š” ํ˜•ํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ์ฆ‰, ๋ทฐ์™€ ๋ชจ๋ธ์ด ์˜์กด์„ฑ์„ ๋„๊ฒŒ ๋˜์–ด ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์—†๊ณ , ์—ฌ๋Ÿฌ side-effect๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์—๋Ÿฌ ๋“ฑ์ด ๋ฐœ์ƒ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด์„œ MVP, MVVM, Flux, Redux ๋“ฑ๋“ฑ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ํŒจํ„ด ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

profile
๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅ์ค‘......
post-custom-banner

0๊ฐœ์˜ ๋Œ“๊ธ€