STUDY ๐Ÿ“š/CS

[๋””์ž์ธ ํŒจํ„ด] MVC, MVP, MVVM ํŒจํ„ด

daxx0ne 2023. 4. 4. 17:11

MVC ํŒจํ„ด

: ๋ชจ๋ธ(Model), ๋ทฐ(view), ์ปจํŠธ๋กค๋Ÿฌ(Controller)๋กœ ์ด๋ฃจ์–ด์ง„ ๋””์ž์ธ ํŒจํ„ด

→ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์„ธ ๊ฐ€์ง€ ์—ญํ• ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์—์„œ ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ์—๋งŒ ์ง‘์ค‘ํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ

  • ์žฅ์ : ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํ™•์ •์„ฑ์ด ์šฉ์ดํ•จ
  • ๋‹จ์ : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ณต์žกํ•ด์งˆ์ˆ˜๋ก ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ๊ด€๊ณ„๋„ ๋ณต์žกํ•ด์ง

 

๋ชจ๋ธ

: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์ƒ์ˆ˜, ๋ณ€์ˆ˜ ๋“ฑ์„ ๋œปํ•จ

→ ๋ทฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐฑ์‹ ํ•จ

 

๋ทฐ

: ๋ชจ๋ธ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ™”๋ฉด(UI)์„ ๋œปํ•จ

→ inputbox, checkbox, textarea ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ„

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

 

์ปจํŠธ๋กค๋Ÿฌ

: ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ชจ๋ธ๊ณผ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ทฐ๋ฅผ ์ž‡๋Š” ๋‹ค๋ฆฌ ์—ญํ• ๊ณผ ์ด๋ฒคํŠธ ๋“ฑ ๋ฉ”์ธ ๋กœ์ง์„ ๋‹ด๋‹นํ•จ

์—ญํ• 

  • ๋ชจ๋ธ๊ณผ ๋ทฐ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌ
  • ๋ชจ๋ธ์ด๋‚˜ ๋ทฐ์˜ ๋ณ€๊ฒฝ ํ†ต์ง€๋ฅผ ๋ฐ›์œผ๋ฉด ์ด๋ฅผ ํ•ด์„ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ์— ํ•ด๋‹น ๋‚ด์šฉ์— ๋Œ€ํ•ด ์•Œ๋ ค์คŒ

 

Spring ์—์„œ์˜ MVC ํŒจํ„ด

: MVC ํŒจํ„ด์„ ์ด์šฉํ•œ ๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ๋Š” Spring์ด ์žˆ์Œ

 

Spring - web MVC

: ์›น ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๋งŽ์ด ์ œ๊ณตํ•จ

  • ์‚ฌ์šฉ์ž์˜ ์–ด๋– ํ•œ ์š”์ฒญ์ด ์œ ํšจํ•œ ์š”์ฒญ์ธ์ง€๋ฅผ ์‰ฝ๊ฒŒ ๊ฑฐ๋ฅผ ์ˆ˜ ์žˆ์Œ
    • ex) ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š” ์‚ฌ๋ก€
  • ์žฅ์ : ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅ, ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅ, ์‰ฝ๊ฒŒ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์Œ

 

Spring ์—์„œ์˜ MVC ํ๋ฆ„๋„

ํ๋ฆ„ ์ •๋ฆฌ

๋”๋ณด๊ธฐ

DispatcherServlet

  • web.xml์— ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, sevlet-context.xml ์„ค์ • ํŒŒ์ผ์„ ์ฝ์–ด ๊ตฌ๋™ํ•œ๋‹ค.
  • Front Controller๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ์˜ ๋ชจ๋“  Request๋ฅผ ๋ฐ›์•„ ์ œ์–ดํ•œ๋‹ค.
  • Controller์— ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ View์— ์ „๋‹ฌํ•œ๋‹ค.

HandlerMapping

  • ์š”์ฒญ URL์— ๋งคํ•‘๋˜๋Š” Controller๋ฅผ ์ฐพ์•„ DispatcherServlet์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

HandlerAdapter

  • HandlerMapping์„ ํ†ตํ•ด ๋ฐ›์€ Controller์— ๋งž๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค.

Controller

  • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ํ›„, ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง๊ณผ ์„œ๋น„์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ View์— ์ „๋‹ฌํ•  ๊ฐ์ฒด๋ฅผ Model์— ์ €์žฅํ•œ๋‹ค.

View Name

  • Controller์˜ ์ฒ˜๋ฆฌ ํ›„, View์— ํ•ด๋‹นํ•˜๋Š” View Name์„ ์ €์žฅํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Model

  • Controller์—์„œ ์ฒ˜๋ฆฌ ํ›„, View์— ์ „๋‹ฌํ•  ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ.

View Resolver

  • Controller๊ฐ€ ๋ฐ˜ํ™˜ํ•œ View Name์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งž๋Š” View๋ฅผ ์ฐพ์•„ DispatcherServlet์— ๋ฐ˜ํ™˜ํ•œ๋‹ค.

View

  • DispatcherServlet์ด ์ „๋‹ฌํ•œ View๋ฅผ ํ˜ธ์ถœํ•˜๊ณ , Model๊ฐ์ฒด์—์„œ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ ธ์™€ ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ตํ•œ๋‹ค.

์š”์•ฝ

์›น๋ธŒ๋ผ์šฐ์ € -> ์ปจํŠธ๋กค๋Ÿฌ๋กœ ์š”์ฒญ -> ๋ชจ๋ธ๋กœ ๊ตฌ์ฒดํ™” ์ž‘์—… -> JavaBean์—ญํ• ๋กœ ์ž์›์„ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐ›์Œ -> ๋ทฐ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ชจ๋ธ์—์„œ ์„œ๋กœ ์ฃผ๊ณ ๋ฐ›์Œ -> ๋ทฐ๊ฐ€ ์›น๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ต

  • ๋ชจ๋ธ, ๋ทฐ, ์ปจํŠธ๋กค๋Ÿฌ๋กœ ๋กœ์ง์ด ํ™•์‹คํ•˜๊ฒŒ ๋ถ„๋ฆฌ๋จ
    • ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง

MVP ํŒจํ„ด

: MVC ํŒจํ„ด์œผ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋จ

  • MVC์—์„œ C์— ํ•ด๋‹นํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ํ”„๋ ˆ์  ํ„ฐ๋กœ ๊ต์ฒด๋œ ํŒจํ„ด

 

๐Ÿ’ก ๋ทฐ์™€ ํ”„๋ ˆ์  ํ„ฐ๋Š” ์ผ๋Œ€์ผ ๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— MVC ํŒจํ„ด๋ณด๋‹ค ๋” ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ ์ง€๋‹Œ ํŒจํ„ด์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Œ

MVVM ํŒจํ„ด

: MVC ํŒจํ„ด์œผ๋กœ๋ถ€ํ„ฐ ํŒŒ์ƒ๋จ

  • MVC์—์„œ C์— ํ•ด๋‹นํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ทฐ ๋ชจ๋ธ๋กœ ๊ต์ฒด๋œ ํŒจํ„ด

 

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

 

๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ: ๋ทฐ(Vue.js)

→ ๋ฐ˜์‘ํ˜•์ด ํŠน์ง•์ธ ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ ˆ์ž„์›Œํฌ