MVC

Hunter Joeยท2025๋…„ 4์›” 28์ผ
post-thumbnail

React์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ์ค‘ ์ด MVC ๋ชจ๋ธ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ง์„ ๋“ค์—ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‚˜๋Š” React ์ด์ „์˜ ๊ฐœ๋ฐœ (jQuery, ๋ฐ”๋‹๋ผ.js)์„ ์ž˜ ํ•˜์ง€ ์•Š์•˜๋˜ ํƒ“์— ์ด๋Ÿฐ ํŒจํ„ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค.
๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—๋Š” MVC ํŒจํ„ด์„ ํ•œ๋ฒˆ ์ดํ•ดํ•ด๋ณด๊ณ ์ž ๊ธ€์„ ์ž‘์„ฑํ–ˆ๋‹ค.

๐Ÿ“Œ MVC Model-View-Controller

MVC๋Š” ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค, ๋ฐ์ดํ„ฐ ๋ฐ ๋…ผ๋ฆฌ ์ œ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” S/W ๋””์ž์ธ ํŒจํ„ด
S/W์˜ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ํ™”๋ฉด์„ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ ์ค‘์ ์„ ๋‘๊ณ  ์žˆ๋‹ค.
"๊ด€์‹ฌ์‚ฌ ๋ถ„๋ฆฌ"(๋กœ์ง ๋ถ„๋ฆฌ)๋Š” ๋” ๋‚˜์€ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ์ œ๊ณตํ•œ๋‹ค.

S/W๋ฅผ Model, View, Controller๋ผ๋Š” 3๊ฐ€์ง€ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ๋ถ„ํ•œ ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก 

MVC์— ๊ธฐ๋ฐ˜์„ ๋‘” ๋‹ค๋ฅธ ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ๋Š” MVVM, MVP, MVW๊ฐ€ ์žˆ๋‹ค.

Model : ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ด€๋ฆฌ
View : ๋ ˆ์ด์•„์›ƒ๊ณผ ํ™”๋ฉด์„ ์ฒ˜๋ฆฌ
Controller : ๋ชจ๋ธ๊ณผ ๋ทฐ๋กœ ๋ช…๋ น์„ ์ „๋‹ฌ

Model

  • Model์€ App์ด ํฌํ•จํ•ด์•ผํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์ •์˜
  • ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ผ๋ฐ˜์ ์œผ๋กœ Model โ†’ View์—๊ฒŒ ์•Œ๋ฆผ(ํ•„์š”ํ•œ ๋Œ€๋กœ ํ™”๋ฉด ๋ณ€๊ฒฝ)
  • ๊ฐ€๋” Controller์—๊ฒŒ๋„ ์•Œ๋ฆผ (์—…๋ฐ์ดํŠธ ๋œ View๋ฅผ ์กฐ์ ˆํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ๋กœ์ง์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ)

Model์—๋Š” App์˜ ์ •๋ณด, ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ ์ฒ˜์Œ์˜ ์ •์˜ํ•˜๋Š” ์ƒ์ˆ˜, ์ดˆ๊ธฐํ™”๊ฐ’, ๋ณ€์ˆ˜ ๋“ฑ์„ ๋งํ•œ๋‹ค.
Model์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1. ์‚ฌ์šฉ์ž๊ฐ€ ํŽธ์ง‘ํ•˜๊ธธ ์›ํ•˜๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
โ†’ ๊ธ€์ž๋‚ด์šฉ, ๊ธ€์ž์˜ ์œ„์น˜, ๊ธ€์ž์˜ ํฌ๋ฉง ์ •๋ณด, ํ™”๋ฉด์˜ ์œ„์น˜์ •๋ณด ๋“ฑ

2. View๋‚˜ Controller์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ๋ฉด ์•ˆ๋œ๋‹ค.
โ†’ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ UI๋ฅผ ์ง์ ‘ ์กฐ์ •ํ•ด์„œ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก View๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋‚ด๋ถ€ ์†์„ฑ๊ฐ’์„ ๊ฐ€์ง€๋ฉด ์•ˆ๋œ๋‹ค.

3. ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉด ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
โ†’ ๋ชจ๋ธ์˜ ์†์„ฑ ์ค‘ ํ…์ŠคํŠธ ์ •๋ณด๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ์ „๋‹ฌํ•ด์•ผํ•˜๋ฉฐ ๋ˆ„๊ตฐ๊ฐ€ Model์„ ๋ณ€๊ฒฝํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋ƒˆ์„ ๋•Œ ์ด๋ฅผ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. ์ด๋Š” ๋ชจ๋ธ์ด ๋ณ€๊ฒฝ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฅธ ๊ตฌ์„ฑ์š”์†Œ๋“ค์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•

View

  • View๋Š” App์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐฉ์‹์„ ์ •์˜ : ํ™”๋ฉด์— ํ‘œ์‹œ๋˜๋Š” ๊ธ€์ž, ์ฒดํฌ๋ฐ•์Šค, ์œˆ๋„์šฐ์™€ ๊ฐ™์€ UI๋ผ๋Š” ์‹œ๊ฐ์  ์š”์†Œ๋ฅผ ์ง€์นญ

1. Model์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋”ฐ๋กœ ์ €์žฅํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.
โ†’ ํ™”๋ฉด์— ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ ์ •๋ณด๋ฅผ ์ „๋‹ฌ ๋ฐ›์„ ๋•Œ ๊ทธ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ž„์˜๋กœ View ๋‚ด๋ถ€์— ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์•ˆ๋œ๋‹ค. ๋‹จ์ˆœํžˆ ํ…์ŠคํŠธ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ์—ญํ• ๋งŒํ•˜๊ณ  ํ™”๋ฉด์„ ๊ทธ๋ฆด ๋•Œ ํ•„์š”ํ•œ ์ •๋ณด๋“ค์„ ์ €์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.

2. Model์ด๋‚˜ Controller์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์•Œ ํ•„์š”๊ฐ€ ์—†๋‹ค.
โ†’ Model๊ณผ ๊ฐ™์ด ์ž๊ธฐ ์ž์‹ ์„ ๋นผ๊ณ ๋Š” ๋‹ค๋ฅธ ์š”์†Œ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๊ฑฐ๋‚˜ ์ฐธ์กฐํ•˜๋Š”์ง€ ์•Œ์•„์„œ๋Š” ์•ˆ๋œ๋‹ค.

3. ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚  ๊ฒฝ์šฐ ๋ณ€๊ฒฝ ํ†ต์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ๋งŒ ํ•œ๋‹ค.
โ†’ Modle๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚ฌ์„ ๋•Œ ์ด์— ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋ณ€๊ฒฝ์„ ์•Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
View์—์„œ๋Š” ํ™”๋ฉด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ํ™”๋ฉด์— ํ‘œ์‹œ๋œ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜๋ฉด ์ด๋ฅผ Model์—๊ฒŒ ์ „๋‹ฌํ•ด Model์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๊ฒƒ์ธ๋ฐ ๊ทธ ์ž‘์—…์„ ์œ„ํ•œ ๋ณ€๊ฒฝ ํ†ต์ง€๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

Controller

  • Controller๋Š” App์˜ ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ์˜ ์ž…๋ ฅ์— ๋Œ€ํ•œ ์‘๋‹ต์œผ๋กœ Model/View๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋กœ์ง์„ ํฌํ•จ
  • ์ฃผ๋กœ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„

Controller๋Š” ๋‹ค์Œ ๊ทœ์น™์„ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.
1. Model์ด๋‚˜ View์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.
โ†’ Model์ด๋‚˜ View๋Š” ๋ณ€๊ฒฝ์„ ์™ธ๋ถ€๋กœ ์•Œ๋ฆฌ๊ณ  ์ˆ˜์‹ ํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ์„ ์•Œ๊ณ  ์„œ๋กœ์˜ ์กด์žฌ๋Š” ๋ชจ๋ฅธ๋‹ค.
์„œ๋กœ ๋ชจ๋ฅด๋Š” ๋‘˜์„ Controller๊ฐ€ ์ค‘์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— Controller๋Š” Model๊ณผ View์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

2. Model์ด๋‚˜ View์˜ ๋ณ€๊ฒฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•ด์•ผํ•œ๋‹ค.
โ†’ Model๊ณผ View์˜ ๋ณ€๊ฒฝ์„ ํ†ต์ง€ ๋ฐ›์œผ๋ฉด ์ด๋ฅผ ํ•ด์„ํ•ด ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ์—๊ฒŒ ํ†ต์ง€๋ฅผ ํ•ด์•ผ ํ•˜๊ธฐ์—
๋‘˜์„ ์ถ”์ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋‹จํŽธ์ ์ธ MVC ํ๋ฆ„

  1. User๊ฐ€ Controller ์กฐ์ž‘
  2. Controller๋Š” Model์„ ์กฐ์ž‘
  3. ์กฐ์ž‘๋œ Model์„ View์— ์—…๋ฐ์ดํŠธ
  4. ์—…๋ฐ์ดํŠธ ๋œ View๋ฅผ User์—๊ฒŒ ์ „๋‹ฌ

๊ตฌ์ฒดํ™”๋œ MVC ํ๋ฆ„

๋” ๊ตฌ์ฒด์ ์ธ MVC ํŒจํ„ด์˜ ๊ตฌ์กฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๋‹จํŽธ์  MVC์˜ ํ๋ฆ„์—์„œ๋Š” Controller๊ฐ€ View์—๊ฒŒ ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์•˜์ง€๋งŒ
์ด ๋‘ ๊ทธ๋ฆผ์—์„œ๋Š” View์—๊ฒŒ ์˜ํ–ฅ์„ ๋ผ์น˜๊ณ  ์žˆ๋‹ค.

์ฐธ๊ณ ์ž๋ฃŒ

profile
Async FE ์ทจ์—… ์ค€๋น„์ค‘.. Await .. (์ทจ์—…์™„๋ฃŒ ๋Œ€๊ธฐ์ค‘) ..

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