๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
MVC

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

by HTT 2022. 11. 27.

MVC



 

๐Ÿ’ก ๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ(model–view–controller, MVC)

: ์†Œํ”„ํŠธ์›จ์–ด ๊ณตํ•™์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธํŒจํ„ด

 

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

 

MODEL

์ •๋ณด๋“ค์˜ ๊ฐ€๊ณต์„ ์ฑ…์ž„์ง€๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ๋ชจ๋ธ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ์— ์ „๋‹ฌํ•œ๋‹ค. ํ‘œ์‹œ ํ˜•์‹์— ์˜์กดํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ผ์ง€์— ๋Œ€ํ•ด ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

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

 

VIEW

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„, ์ฆ‰ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค(User interface)๋ฅผ ์˜๋ฏธํ•œ๋‹ค. MVC์—์„œ ๋ชจ๋ธ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ทฐ(view)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ณด์—ฌ์ค„ ๊ฐ’(๋ชจ๋ธ)์„ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์™€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค.

 

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

 

CONTROLLER

๋ชจ๋ธ๊ณผ ๋ทฐ ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ๋‹ค๋ฆฌ์—ญํ• ์„ ํ•œ๋‹ค. ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , ๋ชจ๋ธ์— ๊ทธ ์ž…๋ ฅ์„ ์ „๋‹ฌํ•˜๋ฉฐ, ๋ชจ๋ธ๋กœ๋ถ€ํ„ฐ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ ๋ทฐ์— ์ „๋‹ฌํ•œ๋‹ค.

 

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

 

 

๐Ÿ’ก MVCํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ (์žฅ์ )

: ๋ชจ๋“ˆ์˜ ๊ฒฐํ•ฉ๋„(Coupling)๋Š” ๋‚ฎ์ถ”๊ณ  ์‘์ง‘๋„(Cohesion)๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’๋‹ค๋Š” ๊ฒƒ์€ ์˜์กด์„ฑ์ด ๋†’๋‹ค๋Š” ๊ฒƒ์ด๊ณ , ์˜์กด์„ฑ์ด ๋†’์„์ˆ˜๋ก ์ฝ”๋“œ ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๊ทธ์™€ ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ์ฝ”๋“œ๋“ค๋„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค. MVC ํŒจํ„ด์„ ๊ฐ€์ง„ ์‹œ์Šคํ…œ์˜ ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ์ž์‹ ์ด ๋งก์€ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•œ ํ›„ ๋‹ค๋ฅธ ์ปดํฌ๋„ŒํŠธ๋กœ ๊ฒฐ๊ณผ๋งŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค.

 

์‘์ง‘๋„๋Š” ๋…๋ฆฝ์„ฑ๊ณผ ๋ฐ€์ ‘ํ•œ ์—ฐ๊ด€์ด ์žˆ๋‹ค. '์‘์ง‘'์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” "ํ•œ๊ตฐ๋ฐ์— ์—‰๊ฒจ์„œ ๋ชจ์ด๋Š” ๊ฒƒ"์œผ๋กœ  ์„œ๋กœ ๊ด€๋ จ์žˆ๋Š” ์š”์†Œ๋“ค์„ ์‘์ง‘๋„์™€ ๋…๋ฆฝ์„ฑ์ด ๋†’์•„์ง€๋„๋ก ์•Œ๋งž๊ฒŒ ๋‚˜๋ˆ„์–ด์•ผ ํ•œ๋‹ค. ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ, ๊ทธ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ๊ณณ์—์„œ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ”ผํ•ด๊ฐ€ ์ตœ์†Œํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ณณ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋…๋ฆฝ์„ฑ์ด ๋†’์„์ˆ˜๋ก ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ๊ฐ€ ์‰ฌ์›Œ์ง„๋‹ค. 

 

 

 

 

 

์ถœ์ฒ˜

wikipedia

https://junhyunny.github.io/information/design-pattern/mvc-pattern/

๋Œ“๊ธ€