MVC ํŒจํ„ด ๋ฐ Spring MVC ๐ŸŒฑ

Doridamยท2023๋…„ 6์›” 5์ผ
0

Spring๐ŸŒฑ & Boot ๐ŸŒผ

๋ชฉ๋ก ๋ณด๊ธฐ
8/12


MVC ํŒจํ„ด

MVC ํŒจํ„ด์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๋””์ž์ธ ํŒจํ„ด์ค‘ ํ•˜๋‚˜๋กœ Model, View, Controller๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„์–ด ๊ฐœ๋ฐœํ•˜๋Š” ํŒจํ„ด์ด๋‹ค.
๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ํ”Œ๋กœ์šฐ์˜ ๊ทœ์น™์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ง€๋ณด์ˆ˜์™€ ํ™•์žฅ, ์žฌ์‚ฌ์šฉ์„ฑ์— ์šฉ์ดํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. Web Application์—๋Š” Spring MVC, ASP.NET MVC ๋“ฑ ์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

Model

MVC ์ค‘ Model์€ Application์˜ ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•œ๋‹ค. Controller์˜ ์š”์ฒญ์— ๋”ฐ๋ฅธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ DB์™€์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•œ๋‹ค.

VIEW

MVC ์ค‘ View๋Š” Aplication์˜ ์ƒํƒœ ๋ฐ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•œ๋‹ค. UI๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. HTML, CSS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ฃผ๊ณ  ์š”์ฒญ์„ ๋ฐ›์œผ๋ฉฐ, Front Framework์ธ React, Vue, Angular๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๊ฑฐ๋‚˜ Template Engine์ธ JSP, Thymeleaf ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Controller

MVC ์ค‘ Controller๋Š” Model ๊ณผ View๋ฅผ ์ด์–ด์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค. View์—์„œ ์ „๋‹ฌ๋œ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ Model๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ณ  Model์—์„œ ์ฒ˜๋ฆฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ View๋กœ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

MVC ํŒจํ„ด์˜ ์›์น™

MVC ํŒจํ„ด์˜ 5๊ฐ€์ง€ ์›์น™์€ ์ปดํฌ๋„ŒํŠธ๋“ค์˜ ๋…๋ฆฝ์„ฑ์„ ์œ ์ง€์‹œํ‚ค๊ณ  ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š”๊ฒƒ์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ๋‹ค.

  • Model์€ View์™€ Controller์— ์˜์กดํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.
    Model์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” DTO์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” Service, DB์™€์˜ ์—ฐ๊ฒฐ ๊ฐ์ฒด์ธ DAO๋กœ ๋‚˜๋‰˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด๋•Œ DTO, DAO, Service์—๋Š” View ์™€ Controller์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ๊ฐ€ ์—†์–ด์•ผํ•œ๋‹ค. ์ด๋Š” ์˜์กด์„ฑ์„ ์ตœ์†Œํ™” ํ•˜์—ฌ ์ฝ”๋“œ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์„ ์ค„์ด๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

  • View๋Š” Model์—๋งŒ ์˜์กดํ•ด์•ผํ•˜๊ณ , Controller์—๋Š” ์˜์กดํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    View๋Š” Model์—๋งŒ ์˜์กดํ•จ์œผ๋กœ์จ ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ๋กœ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์šฉ์ดํ•ด์ง„๋‹ค. ๋˜ํ•œ Model์— ๋Œ€ํ•œ ์˜์กด์„ฑ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ๊ณผ ๋‹ค๋ฅธ ๋ชจ๋ธ๋กœ์˜ ์ด์‹์ด ๊ฐ„ํŽธํ•ด์ง„๋‹ค.

  • View ๊ฐ€ Model ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ์–ด์•ผํ•˜๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ๋“ค์–ด ๋„ค์ด๊ฒŒ์ดํ„ฐ๋‚˜ UI์™€ ๊ฐ™์€ ๊ณตํ†ต์ ์œผ๋กœ ๋ณด์ด๋Š” ๋ถ€๋ถ„์€ Model๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ View์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒƒ์ด ์„ฑ๋Šฅ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ํ–ฅ์ƒ์— ์ด์ ์ด ์žˆ๋‹ค.

  • Controller๋Š” Model๊ณผ View์— ์˜์กดํ•ด๋„ ๋œ๋‹ค.
    Controller๋Š” Model๊ณผ View๋ฅผ ์ด์–ด์ฃผ๋ฏ€๋กœ ํ•ด๋‹น ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์–ด๋„ ๋œ๋‹ค.

  • View๊ฐ€ Model๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ๋•Œ, ๋ฐ˜๋“œ์‹œ Controller๋ฅผ ํ†ตํ•ด์„œ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.
    View์— Model๋กœ๋ถ€ํ„ฐ ์ง์ ‘์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์ง€ ์•Š์Œ์œผ๋กœ ์ธํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  Model๊ณผ View์˜ ์˜์กด๊ด€๊ณ„ ํ˜•์„ฑ์„ ์˜ˆ๋ฐฉํ•œ๋‹ค.

MVC1๊ณผ MVC2

ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ์— ๋”ฐ๋ผ ํšจ์œจ์  ์„ค๊ณ„๋ฅผ ์œ„ํ•œ MVC1๊ณผ MVC2๋กœ ๋‚˜๋‰˜๊ฒŒ ๋œ๋‹ค.

  • MVC1
    View๊ฐ€ Controller์˜ ์—ญํ• ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•œ๋‹ค. View + Controller, Model ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๋‘๊ฐœ์˜ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•˜์—ฌ ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ ์ฆ๊ฐ€์™€ ๊ฐ™์€ ๋‹จ์ ์ด ์žˆ๊ณ , ์†Œ๊ทœ๋ชจ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์‹œ ๊ตฌํ˜„์ด ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
  • MVC2
    Model, View, Controller๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ง„ ํ˜•ํƒœ. ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑํ•จ์— ๋”ฐ๋ผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”ํ•ด์ง€๊ณ  ํ™•์žฅ์—๋„ ์œ ์—ฐํ•ด์ง„๋‹ค. ์ƒ๋Œ€์ ์œผ๋กœ ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”„๋กœ์ ํŠธ์— ์‚ฌ์šฉ๋˜๋ฉฐ ๊ฐœ๋ฐœ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

Spring MVC

Spring์—์„œ ์ง€์›ํ•˜๋Š” Web Application ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋‹ค.
Front Controller ํŒจํ„ด ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ DispatcherServlet, ViewResolver์™€ ๊ฐ™์€ Web Application ๊ตฌํ˜„์— ๋„์›€์ด ๋˜๋Š” ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

Front Controller ํŒจํ„ด ์•„ํ‚คํ…์ฒ˜.

SprimgMVC๋Š” Front Controller ํŒจํ„ด์˜ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํƒ‘์žฌํ•˜๊ณ  ์žˆ๋‹ค.
Front Controller ํŒจํ„ด์˜ ์•„ํ‚คํ…์ฒ˜๋ž€ ํด๋ผ์ด์–ธํŠธ์™€ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ Controller๊ฐ€ ์ง์ ‘ ์—ฐ๊ฒฐ๋˜๋Š”๊ฒŒ ์•„๋‹Œ Front Controller๊ฐ€ ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›๊ณ  ํ•ด๋‹น ์š”์ฒญ์— ๋งž๋Š” Controller์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์ค‘์•™์ง‘์ค‘ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๊ฒŒ ์„ค๊ณ„ ๋˜์–ด์žˆ๋‹ค.
๊ณผ๊ฑฐ์—๋Š” JAVA ๋งŒ์œผ๋กœ ๊ตฌ์„ฑ๋œ Web Application์€ Servlet์„ ํ†ตํ•ด Front Controller๋ฅผ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ Spring์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ํƒ‘์žฌ๋œ DispatcherServlet์„ ํ†ตํ•ด ๋ชจ๋“  ์š”์ฒญ์„ ๋ฐ›๊ณ  HandlerMapping์„ ํ†ตํ•ด Controller๋กœ ๋ถ„๋ฐฐํ•˜๋ฉฐ ViewResolver๋กœ ์ ์ ˆํ•œ View๋ฅผ ์„ ํƒํ•œ๋‹ค.

SpringMVC์˜ ๋™์ž‘ ์ˆœ์„œ

  1. DispatcherServlet์—์„œ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.
  2. HandlerMapping์—์„œ URL๊ณผ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  Controller๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. ์„ ํƒ๋œ Controller๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌํ•œ๋‹ค.
  4. ์š”์ฒญ์ด ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ View์˜ ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ModelAndView๊ฐ์ฒด์— ๋‹ด์•„ DispatcherServlet์œผ๋กœ ์ „๋‹ฌํ•œ๋‹ค.
  5. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์€ DispatcherServlet์€ View์˜ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ViewResolver๋ฅผ ํ†ตํ•ด View ํŒŒ์ผ์„ ์ฐพ๋Š”๋‹ค.
  6. ์ฐพ์€ View ํŒŒ์ผ์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ๋กœ ๋ณด๋‚ด์ค€๋‹ค.
profile
๋„๋ฆฌ๋„๋ฆฌ๋‹ด๋‹ด ๐Ÿค๐Ÿฅ๐Ÿค๐Ÿฅ๐Ÿฃ๐Ÿฃ

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