๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Back-end

MVC (Model - View - Controller) pattern ๊ฐœ๋… ๊ณต๋ถ€ ๋ฐ ์ •๋ฆฌ

by kkkdh 2022. 9. 22.
728x90

๐ŸŽจ MVC pattern์ด๋ž€?

๋ชจ๋ธ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ (model-view-controller, MVC) ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. 

๋””์ž์ธ ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์˜ ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ์—์„œ ํŠน์ • ๋ฌธ๋งฅ์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์˜๋ฏธํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

์ €๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์Œ“์•„์˜จ ์„ค๊ณ„ ๋…ธํ•˜์šฐ๋ฅผ ์ถ•์ ํ•ด ์ด๋ฆ„์„ ๋ถ™์—ฌ์„œ ์ƒˆ๋กœ์ด ์ด๋ฆ„์„ ๋ถ™์—ฌ ์ดํ›„์—๋„ ์žฌ์‚ฌ์šฉ ํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•œ ๊ทœ์•ฝ์ด๋ผ๊ณ  ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ฆ‰, ํŠน์ •ํ•œ ์ฝ”๋“œ๋‚˜ ํ”„๋กœ๊ทธ๋žจ์ด ์•„๋‹ˆ๋ผ ํšจ์œจ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ๊ณผ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•๋ก ์„ ๋””์ž์ธ ํŒจํ„ด์ด๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

 

์˜ค๋Š˜ ์ •๋ฆฌํ•  MVC pattern์€ ์ด๋Ÿฌํ•œ ๋””์ž์ธ ํŒจํ„ด์˜ ํ•œ ์ข…๋ฅ˜๋กœ Model, View, Controller ์„ธ ๊ฐœ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๋‚˜๋ˆ„์–ด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ MDN web docs

Model, View, Controller์˜ ์—ญํ• ์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.


๐Ÿ’ฝ ๋ชจ๋ธ (Model)

๋ฐ์ดํ„ฐ ์ž์ฒด ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฐ์ฒด ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋‹ค๋ฃจ๋Š” ์š”์†Œ๋“ค์„ ๊ฐœ๋…์ ์œผ๋กœ ์ •์˜ํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. Domain์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

๋ชจ๋ธ์˜ ๊ทœ์น™

  1. ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘ํ•˜๊ธฐ๋ฅผ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ๋ทฐ๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด์„œ ์–ด๋– ํ•œ ์ •๋ณด๋„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค.
  3. ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด, ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.

๐Ÿ’ป ๋ทฐ (View)

๋ทฐ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ฒŒ ๋˜๋Š” ๋ ˆ์ด์•„์›ƒ๊ณผ ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ, ๋‹ค์–‘ํ•œ ์‚ฌ์šฉ์ž ์ž…์ถœ๋ ฅ์˜ ๊ณผ์ • ๋ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ฐœ๋…์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

์š”์•ฝํ•˜๋ฉด, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์งˆ์ง€ ์ •์˜ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ฐ ๊ฐ์ฒด์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ฐ์–ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

 

๋ทฐ์˜ ๊ทœ์น™

  1. ๋ชจ๋ธ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
  2. ๋ชจ๋ธ์ด๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์–ด๋– ํ•œ ์ •๋ณด๋„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค.
  3. ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด, ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด ๊ตฌํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.

๐ŸŽฎ ์ปจํŠธ๋กค๋Ÿฌ (Controller)

๋ฐ์ดํ„ฐ์™€ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI, user interface) ์ฆ‰, ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ๋‹ค๋ฆฌ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 

๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จํ•˜๊ณ  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ƒˆ๋กญ๊ฒŒ ๋ฐ›์€ ์ž…๋ ฅ์— ๋Œ€์‘ํ•˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.

 

์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ทœ์น™

  1. ๋ชจ๋ธ์ด๋‚˜ ๋ทฐ์— ๋Œ€ํ•ด ์•Œ๊ณ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  2. ๋ชจ๋ธ์ด๋‚˜ ๋ทฐ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ด์•ผ ํ•œ๋‹ค.

MVC pattern์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ?

MVC pattern์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ๋ฅผ 3๊ฐ€์ง€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ ๋ถ„์—…์„ ํšจ์œจ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์–ด ๊ฐ์ž ๋งก์€ ๋ฐ”์—๋งŒ ์ถฉ์‹คํ•˜๊ฒŒ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ์— ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์œ ์ง€/๋ณด์ˆ˜์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๊ณ , ํ™•์žฅ์„ฑ ๋ฐ ์œ ์—ฐ์„ฑ ๋˜ํ•œ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๊ณ , ์ด๋Ÿฌํ•œ ์žฅ์ ๋“ค๋กœ ์ธํ•ด์„œ MVC pattern์„ ์ฑ„ํƒํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.


MVC pattern์˜ ์žฅ์ 

์—ญํ• ๋ณ„๋กœ ๋ถ„๋ฆฌ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์—, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํŽธ๋ฆฌํ•˜๊ณ  ํ™•์žฅ์„ฑ์ด ์ฆ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Model ํŒŒํŠธ๋ฅผ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.


MVC pattern์˜ ๋‹จ์ 

Controller๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ตญ ์„ธ ๊ฐœ์˜ ํŒŒํŠธ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„ํ•˜์ง€๋งŒ, Model๊ณผ View๋Š” ์—ฐ๊ด€๋˜์–ด์žˆ๊ณ 
  • ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ ์  ๋ณต์žกํ•ด์ ธ, domain(Model)์ด ์ฆ๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋Š” Controller๊ฐ€ ๋น„๋Œ€ํ•ด์งˆ ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค.
  • ์ด๋Š” Model, View ์–ด๋Š ์ชฝ์— ๊ตฌํ˜„ํ•ด์•ผ ํ• ์ง€ ์• ๋งคํ•œ ๋ถ€๋ถ„์„ ๋ชจ๋‘ Controller์— ๊ตฌํ˜„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

์ œ๊ฐ€ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ๋Š” nodejs์˜ express web framework ๋˜ํ•œ MVC pattern์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์˜ˆ์‹œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒธ์‚ฌ๊ฒธ์‚ฌ ์ •๋ฆฌํ•ด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ถ”ํ›„์— ๊ณต๋ถ€ํ•˜๋Š” ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ด ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜€


References

https://velog.io/@ljinsk3/MVC-%ED%8C%A8%ED%84%B4

 

MVC ํŒจํ„ด

๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(Model–View–Controller, MVC)๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค. ์ด ํŒจํ„ด์„ ์„ฑ๊ณต์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ๋ถ€ํ„ฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜์—ฌ

velog.io

 

728x90

๋Œ“๊ธ€