MVC ๋””์ž์ธ ํŒจํ„ด

  • Model-View-Controller
  • ์†Œํ”„ํŠธ์›จ์–ด ๋””์ž์ธ ํŒจํ„ด

Model

  • ๋ฐ์ดํ„ฐ์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๋‹ด๋‹น
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์—ฐ๋™ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—… ์ˆ˜ํ–‰

View

  • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค ๋‹ด๋‹น
  • ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๋Š” ํ™”๋ฉด์„ ๋””์ž์ธํ•˜๊ณ  ๊ตฌํ˜„

Controller

  • Model๊ณผ View ์‚ฌ์ด์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ์กฐ์ •ํ•˜๊ณ  ์ œ์–ด
  • ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„ Model์— ์ „๋‹ฌํ•˜๊ณ  Model์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ View ์—…๋ฐ์ดํŠธ

Spring MVC

  • Servlet API๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌ์ถ•๋œ ๋…์ฐฝ์ ์ธ ์›น ํ”„๋ ˆ์ž„์›Œํฌ
  • ์ค‘์•™์— ์žˆ๋Š” DispatcherServlet์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ณต์œ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ œ๊ณตํ•˜๋Š” Front Controller ํŒจํ„ด์„ ์ค‘์‹ฌ์œผ๋กœ ์„ค๊ณ„
  • Spring์—์„œ MVC ๋””์ž์ธ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ HTTP ์š”์ฒญ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Œ

Servlet

  • ์ž๋ฐ”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋Š” ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ ํ˜น์€ ๊ทธ ์‚ฌ์–‘
  1. ์‚ฌ์šฉ์ž๊ฐ€ Client(๋ธŒ๋ผ์šฐ์ €)๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์— **HTTP Request(API ์š”์ฒญ)**์„ ํ•จ
  2. ์š”์ฒญ์„ ๋ฐ›์€ Servlet ์ปจํ…Œ์ด๋„ˆ๋Š” HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•จ
  3. ์„ค์ •๋œ ์ •๋ณด๋ฅผ ํ†ตํ•ด ์–ด๋– ํ•œ Servlet์— ๋Œ€ํ•œ ์š”์ฒญ์ธ์ง€ ์ฐพ์Œ
  4. ํ•ด๋‹น Servlet์—์„œ service ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๋’ค ๋ธŒ๋ผ์šฐ์ €์˜ ์š”์ฒญ Method์— ๋”ฐ๋ผ doGet ํ˜น์€ doPost ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•จ
  5. ํ˜ธ์ถœํ•œ ๋ฉ”์„œ๋“œ๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋™์  ํŽ˜์ด์ง€๋ฅผ ์ƒ์„ฑํ•œ ๋’ค HttpServletResponse ๊ฐ์ฒด์— ์‘๋‹ต์„ ๋‹ด์•„ Client์— ๋ฐ˜ํ™˜
  6. ์‘๋‹ต์ด ์™„๋ฃŒ๋˜๋ฉด ์ƒ์„ฑํ•œ HttpServletRequest, HttpServletResponse ์†Œ๋ฉธ

Front Controller

  • ๋ชจ๋“  API ์š”์ฒญ์„ ์„œ๋ธ”๋ฆฟ ๋™์ž‘ ๋ฐฉ์‹์— ๋งž์ถฐ ์ฝ”๋“œ ๊ตฌํ˜„ โ†’ ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ Servlet ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • Spring์€ DispatcherServlet์„ ์‚ฌ์šฉํ•˜์—ฌ Front Controller ํŒจํ„ด ๋ฐฉ์‹์œผ๋กœ API ์š”์ฒญ ์ฒ˜๋ฆฌ
  1. Client(๋ธŒ๋ผ์šฐ์ €)์—์„œ HTTP ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด DispatcherServlet ๊ฐ์ฒด๊ฐ€ ์š”์ฒญ ๋ถ„์„
  2. DispatcherServlet ๊ฐ์ฒด๋Š” ๋ถ„์„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ† ๋Œ€๋กœ Handler mapping์„ ํ†ตํ•ด Controller๋ฅผ ์ฐพ์•„ ์š”์ฒญ ์ „๋‹ฌ
  3. ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์™„๋ฃŒ ํ›„ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ**(Controller โ†’ DispatcherServlet)**
  4. ViewResolver๋ฅผ ํ†ตํ•ด View์— Model์„ ์ ์šฉํ•˜์—ฌ View๋ฅผ Client์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ์ „๋‹ฌ**(DispatcherServlet โ†’ Client)**

@Controller

  • ์œ ์‚ฌํ•œ ์„ฑ๊ฒฉ์˜ API๋ฅผ ํ•˜๋‚˜์˜ Controller๋กœ ๊ด€๋ฆฌ
  • ํ•ด๋‹น ํด๋ž˜์Šค๊ฐ€ Controller์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋“ฑ๋กํ•ด์ค„ ์ˆ˜ ์žˆ์Œ

์ •์  ํŽ˜์ด์ง€์™€ ๋™์  ํŽ˜์ด์ง€

์ •์  ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ

  • static ํด๋”์— ์žˆ๋Š” ํŒŒ์ผ๋“ค์„ ์ฐพ์•„์„œ ๋ฐ˜ํ™˜
  • thymeleaf : ๋™์  ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ…œํ”Œ๋ฆฟ ์—”์ง„, ์ž๋™์œผ๋กœ controller์—์„œ html ํŒŒ์ผ ์ฐพ๋Š” ๊ฒฝ๋กœ๋ฅผ /resources/templates๋กœ ์„ค์ •