๋ฐ˜์‘ํ˜•

MVC ํŒจํ„ด์˜ ํ•„์š”์„ฑ

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

ํ•˜์ง€๋งŒ MVC ํŒจํ„ด์ด ์ ์šฉ๋˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์šฐ์„  MVC ํŒจํ„ด์— ๋Œ€ํ•ด ๊ฐ„๋‹จํžˆ ์š”์•ฝํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Model: ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ, ์ž๋ฃŒ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
View: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ๋ถ€๋ถ„, ์ฆ‰ ์œ ์ € ์ธํ„ฐํŽ˜์ด์Šค(User interface)๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
Controller: Model๊ณผ View์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ๋ธŒ๋ฆฟ์ง€(Bridge)์—ญํ• ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์—ญํ• ์— ๋”ฐ๋ผ ํ™•์‹คํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์šฉ์ดํ•˜๊ฒŒ ๊ทธ๋ฆฌ๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ํ™•์žฅ์„ฑ๊ณผ ์œ ์—ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด Model ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•˜๊ณ , UI๊ฐ€ ์ˆ˜์ •๋˜๋ฉด View ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  Controller๋Š” ๋‘ ๋ถ€๋ถ„์„ ๊ด€์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ถ€ ์ˆ˜์ •์ด ํ•„์š”ํ•˜๊ธด ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์กด์ฒ˜๋Ÿผ ๋ฉ”์ธ ๋‹ค์ด์–ผ๋กœ๊ทธ/ํผ์—์„œ์˜ ๋ฌด๋ถ„๋ณ„ํ•œ ํ•˜๋“œ ์ฝ”๋”ฉ์ด ํ•„์š” ์—†๋‹ค๋Š” ๊ฒƒ์ด์ฃ .

์ผ๋‹จ, MVC ํŒจํ„ด์€ ์ด๋ ‡์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜๋„ ๊ฐ์ด ์•ˆ์˜ค์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ œ ์„ค๋ช…์ด ๋ถ€์กฑํ•˜๊ธฐ๋„ ํ•˜๊ณ , ์‚ฌ์‹ค ๊ธ€๋ณด๋‹ค๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๋Š”๊ฒƒ์ด ์ œ์ผ ์ข‹์€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋ณธ๋ฌธ์— ์ด์–ด ์˜ˆ์ œ ์ฝ”๋“œ๋„ ๋‹ค๋ฃฐ ์˜ˆ์ •์ด๋‹ˆ, ๊ฐ™์ด ์ฝ์–ด์ฃผ์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Model-View-Controller

๋ชจ๋ธ-๋ทฐ-์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด ์ข€ ๋” ์ž์„ธํžˆ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋ธ(Model)

ํ”„๋กœ๊ทธ๋žจ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB), ์ƒ์ˆ˜, ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ๋ณ€์ˆ˜๋“ค, ๋น„์ „ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด ์นด๋ฉ”๋ผ ์ •๋ณด์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ์—๋Š” ๋ทฐ๋‚˜ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ •๋ณด๊ฐ€ ์ „ํ˜€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹จ์ง€, ์ •๋ณด๋งŒ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ทฐ(View)

๋‹ค์ด์–ผ๋กœ๊ทธ์— ์กด์žฌํ•˜๋Š” ํ…์ŠคํŠธ๋ฐ•์Šค, ๋ผ๋ฒจ, ๋ฒ„ํŠผ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(User interface) ์š”์†Œ๋“ค์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ œ์–ดํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์ž…๋‹ˆ๋‹ค. ๋ทฐ์—์„œ๋Š” ๋ณ„๋„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ทฐ์—์„œ ์ž…๋ ฅ๋ฐ›๊ณ  ์ถœ๋ ฅํ•ด์ฃผ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

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

์œ„ MVC๋ฅผ ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

MVC ํŒจํ„ด ๋‹ค์ด์–ด๊ทธ๋žจ

 

๋ฐ˜์‘ํ˜•