[Spring] MVC

DevelopHeoยท2024๋…„ 12์›” 27์ผ
post-thumbnail

๐Ÿ“™ 1. MVC Pattern

MVC(Model-View-Controller) Pattern

  • Model
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ์˜ ์บก์Аํ™”
    • ์ƒํƒœ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์‘๋‹ต
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธฐ๋Šฅ ํ‘œํ˜„
    • ๋ณ€๊ฒฝ์„ view์— ํ†ต์ง€
  • View
    • ๋ชจ๋ธ์„ ํ™”๋ฉด์— ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œํ˜„
    • ๋ชจ๋ธ์—๊ฒŒ ์—…๋ฐ์ดํŠธ ์š”์ฒญ
    • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌ
    • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ view๋ฅผ ์„ ํƒํ•˜๋„๋ก ํ—ˆ์šฉ
  • Controller
    • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ–‰์œ„ ์ •์˜
    • ์‚ฌ์šฉ์ž ์•ก์…˜์„ ๋ชจ๋ธ ์—…๋ฐ์ดํŠธ์™€ mapping
    • ์‘๋‹ต์— ๋Œ€ํ•œ view ์„ ํƒ

MVC Pattern ๊ฐœ๋…

  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ™•์žฅ์„ ์œ„ํ•ด Model, View, Controller ์„ธ๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋ถ„๋ฆฌ
  • ์ปดํฌ๋„ŒํŠธ์˜ ๋ณ€๊ฒฝ์ด ๋‹ค๋ฅธ ์˜์—ญ ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Œ(์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด)
  • ์ปดํฌ๋„ŒํŠธ ๊ฐ„์˜ ๊ฒฐํ•ฉ์„ฑ์ด ๋‚ฎ์•„ ํ”„๋กœ๊ทธ๋žจ ์ˆ˜์ •์ด ์šฉ์ด(ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚จ)
  • ์žฅ์ 
    • ํ™”๋ฉด๊ณผ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ด์„œ ์ž‘์—… ๊ฐ€๋Šฅ
    • ์˜์—ญ๋ณ„ ๊ฐœ๋ฐœ๋กœ ์ธํ•˜์—ฌ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚จ(Servlet์—์„œ Spring์œผ๋กœ ํ™•์žฅ)
    • ํ‘œ์ค€ํ™”๋œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ณต๋™์ž‘์—…์ด ์šฉ์ดํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ์ข‹์Œ
  • ๋‹จ์ 
    • ๊ฐœ๋ฐœ๊ณผ์ •์ด ๋ณต์žกํ•ด ์ดˆ๊ธฐ ๊ฐœ๋ฐœ์†๋„๊ฐ€ ๋Šฆ์Œ
    • ์ดˆ๋ณด์ž๊ฐ€ ์ดํ•ดํ•˜๊ณ  ๊ฐœ๋ฐœํ•˜๊ธฐ์— ๋‹ค์†Œ ์–ด๋ ค์›€

๐Ÿ“™ 2. Spring MVC

Spring MVC ํŠน์ง•

  • Spring์€ DI๋‚˜ AOP๊ฐ™์€ ๊ธฐ๋Šฅ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Servlet ๊ธฐ๋ฐ˜์˜ WEB ๊ฐœ๋ฐœ์œผ ์œ„ํ•œ MVC Framework๋ฅผ ์ œ๊ณต
  • Spring MVC๋Š” Model2 Architecture์™€ Front Controller Pattern์„ Framework ์ฐจ์›์—์„œ ์ œ๊ณต
  • Spring MVC Framework๋Š” Spring์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Spring์ด ์ œ๊ณตํ•˜๋Š” Transaction ์ฒ˜๋ฆฌ๋‚˜ DI ๋ฐ AOP ๋“ฑ์„ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉ

Spring MVC ๊ตฌ์„ฑ์š”์†Œ 1

  • DispatcherServlet (Front Controller)
    • ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌ๋ฐ›์Œ
    • Controller์—๊ฒŒ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ , Controller๊ฐ€ ๋ฆฌํ„ด ํ•œ ๊ฒฐ๊ณผ๊ฐ’์„ View์—๊ฒŒ ์ „๋‹ฌํ•˜์—ฌ ์•Œ๋งž์€ ์‘๋‹ต์„ ์ƒ์„ฑ(forward๊ฐ€ ๋””ํดํŠธ๋กœ ์ „๋‹ฌ๋จ)
    • ์–˜๋Š” ํ†ฐ์ผ“๊บผ๋‹ค. ํ†ฐ์ผ“์—๋‹ค ์„ค์ •ํ•ด์•ผํ•œ๋‹ค.
    • ํ†ฐ์ผ“ ์„ค์ • = web.xml
  • HandlerMapping
    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL์„ ์–ด๋–ค Controller๊ฐ€ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ๊ฒฐ์ •
    • URL๊ณผ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ์ฒด์ด๋ฉฐ, DispatcherServlet์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • Controller
    • ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ๋’ค, Model์„ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ DispatcherServlet์— ์•Œ๋ ค์คŒ

Spring MVC ๊ตฌ์„ฑ์š”์†Œ 2

  • ModelAndView
    • Controller๊ฐ€ ์ฒ˜๋ฆฌํ•œ ๋ฐ์ดํ„ฐ ๋ฐ ํ™”๋ฉด์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋ณด์œ ํ•œ ๊ฐ์ฒด
    • ์Šคํ”„๋ง์€ request, response ์•ˆ์”€. ๊ทธ๋ ‡๊ธฐ์— ์ด๊ฒŒ request์— ๋‹ด๋Š” ์—ญํ• 
    • ๋ชจ๋ธ๊ณผ ๋ทฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด์ด๋‹ค.
  • ViewResolver
    • Controller๊ฐ€ ๋ฆฌํ„ด ํ•œ ๋ทฐ ์ด๋ฆ„์œผ๋กœ ๊ธฐ๋ฐ˜์œผ๋กœ Controller์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ View๋ฅผ ๊ฒฐ์ •(list.jsp๋ฉด list๋งŒ ์ „๋‹ฌํ•ด์ฃผ๋ฉด ์•ž๋’ค ์•Œ์•„์„œ ๋ถ™์—ฌ์คŒ)
  • View
    • Controller์˜ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค„ ์‘๋‹ตํ™”๋ฉด์„ ์ƒ์„ฑ

Spring MVC ์š”์ฒญ ํ๋ฆ„

  • MVC ํŒจํ„ด์€ ์›น๊ป˜ ์•„๋‹ˆ๋‹ค.
  • Service์™€ DAO๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์—์„œ ์ผ๋ฐ˜ ์ž๋ฐ”์—์„œ๋„ ์“ธ ์ˆ˜ ์žˆ๋‹ค(non-web)
  • ๊ทธ๋ ‡๊ธฐ์— Web-MVC๋Š” servlet-context.xml, root-context.xml, web.xml ์ด 3๊ฐœ์˜ xml์„ ์‚ฌ์šฉ

Spring MVC ์‹คํ–‰ ์ˆœ์„œ


์Šคํ”„๋ง MVC๋Š” ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์‘๋‹ต์„ ํ•˜๊ธฐ๊นŒ์ง€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ๋ถ€ํ„ฐ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์š”์ฒญ์„ DispatcherServlet์ด ๋ฐ›๋Š”๋‹ค.
  2. DispatcherServlet์€ HandlerMapping์„ ํ†ตํ•ด์„œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  Controller๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
  3. DispatcherServlet์€ ๊ฒ€์ƒ‰๋œ Controller๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  4. Controller๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋กœ ์–ป์–ด๋‚ธ Model ์ •๋ณด์™€ Model์„ ๋ณด์—ฌ์ค„ View ์ •๋ณด๋ฅผ ModelAndView ๊ฐ์ฒด์— ์ €์žฅํ•˜์—ฌ return ํ•œ๋‹ค.
  5. DispatcherServlet์€ ViewResolver๋กœ๋ถ€ํ„ฐ View ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ณ , ViewResolver๋ฅผ ์ด์šฉํ•˜์—ฌ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉํ•  View๋ฅผ ์–ป์–ด๋‚ธ๋‹ค.
  6. DispatcherServlet์€ ViewResolver๋ฅผ ํ†ตํ•ด ์ฐพ์•„๋‚ธ View๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ ์ „์†กํ•œ๋‹ค.

Spring Web MVC ๋™์ž‘์›๋ฆฌ ์ •๋ฆฌ


1~4: ํ†ฐ์บฃ์ด ์‹คํ–‰๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ๋‹จ๊ณ„
1. web.xml์ด ์ฝํ˜€์ง„๋‹ค
2. Servlet Container ์ƒ์„ฑ
3. applicationContext(root-context) ์ฝํ˜€์ง„๋‹ค
4. 3๋ฒˆ์— ์˜ํ•ด์„œ DB๊ด€๋ จ ๊ฐ์ฒด๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ๋‹ค.
5. ์‚ฌ์šฉ์ž์— ์˜ํ•ด ์š”์ฒญ์ด ๋“ค์–ด์˜จ๋‹ค
6. DispatcherServlet์ด ์ƒ์„ฑ. ๋ชจ๋“  ์†Œ์ŠคํŒŒ์ผ๋“ค์„ ์Šค์บ” ํ›„ ํ•„์š”ํ•œ ํด๋ž˜์Šค๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ.
7. presentation-layer(servlet-context) ์ฝ์–ด์„œ FrontController ํŒจํ„ด ์„ค์ •.
8. FrontController ํŒจํ„ด์— ํ•ด๋‹นํ•˜๋Š” ์š”์ฒญ์€ ๋”ฐ๋กœ ๊ฐ€์ ธ์™€์„œ ํ•„์š”ํ•œ ํด๋ž˜์Šค์— ๋งคํ•‘ํ•˜์—ฌ ๋ณด๋‚ธ ํ›„ response.

์ถœ์ฒ˜ : https://velog.io/@alkwen0996/Spring-Spring-Web-MVC-%EB%8F%99%EC%9E%91%EC%9B%90%EB%A6%AC-%EC%A0%95%EB%A6%AC

๐Ÿ“™ 3. Spring MVC ๊ตฌํ˜„

Spring MVC Project์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ

๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€ ์ž๋ฃŒ๋“ค๋กœ ํ™•์ธํ•ด๋ณด์ž

  • ์ฒซ๋ฒˆ์งธ ์˜ˆ์‹œ

  • ๋‘๋ฒˆ์งธ ์˜ˆ์‹œ

  • ์„ธ๋ฒˆ์งธ ์˜ˆ์‹œ

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