Amenable 2023. 4. 19. 21:44

1. ๊ฐœ๋… ๐ŸŒป

  ์Šคํ”„๋ง MVC์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— MVC ํŒจํ„ด์„ ๋จผ์ € ์„ค๋ช…ํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. MVC ํŒจํ„ด์ด๋ž€ ModelViewController๋ผ๋Š” ์˜์—ญ์œผ๋กœ ์„œ๋กœ ์—ญํ• ์„ ๋‚˜๋ˆˆ ๊ฒƒ์„ ๋งํ•œ๋‹ค.

  1. Controller
    HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ , ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.
    ๊ทธ๋ฆฌ๊ณ  ๋ทฐ์— ์ „๋‹ฌํ•  ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ด์„œ ๋ชจ๋ธ์— ๋‹ด๋Š”๋‹ค.
  2. Model
    ๋ทฐ์— ์ถœ๋ ฅํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘”๋‹ค.
    ๋ทฐ๊ฐ€ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋ชจ๋ธ์— ๋‹ด์•„์„œ ์ „๋‹ฌํ•ด ์ฃผ๋Š” ๋•๋ถ„์— ๋ทฐ๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด๋‚˜ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ์„ ๋ชฐ๋ผ๋„ ๋˜๊ณ , ํ™”๋ฉด์„ ๋ Œ๋”๋ง ํ•˜๋Š” ์ผ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  3. View
    ๋ชจ๋ธ์— ๋‹ด๊ฒจ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ™”๋ฉด์„ ๊ทธ๋ฆฐ๋‹ค.

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

  ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํ˜ธ์ถœ ์ „์— ๋จผ์ € ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller) ํŒจํ„ด์ด๋‹ค. ์Šคํ”„๋ง MVC๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋งŒ๋“  MVC ํŒจํ„ด์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. (์Šคํ”„๋ง MVC์—์„œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” DispatcherServlet์ด๋‹ค.)

 

2. ์Šคํ”„๋ง MVC ๊ตฌ์กฐ ๐ŸŒผ

  1. Dispatcher Servlet
    ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ „๋‹ฌ๋ฐ›๋Š”๋‹ค.
    ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ HttpServlet์„ ์ƒ์†๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ณ , ์„œ๋ธ”๋ฆฟ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.
    ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” DispatcherServlet์„ ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•˜๋ฉด์„œ ๋ชจ๋“  ๊ฒฝ๋กœ(urlPatterns="/")์— ๋Œ€ํ•ด์„œ ๋งคํ•‘ํ•œ๋‹ค.
  2. ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘
    ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ URL์„ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ(Controller)๊ฐ€ ์ฒ˜๋ฆฌํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
    URL๊ณผ ์š”์ฒญ ์ •๋ณด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ํ•ธ๋“ค๋Ÿฌ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค.
    DispatcherServlet์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  3. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ๋ชฉ๋ก
  4. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ
    ํ•ธ๋“ค๋Ÿฌ์–ด๋Œ‘ํ„ฐ๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด์„œ ์ฐพ์€ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
  5. ํ•ธ๋“ค๋Ÿฌ(์ปจํŠธ๋กค๋Ÿฌ)
    ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋” ๋„“์€ ๋ฒ”์œ„๋ฅผ ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ผญ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ฐœ๋…๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์–ด๋– ํ•œ ๊ฒƒ์ด๋“  ํ•ด๋‹น ์ข…๋ฅ˜์˜ ์–ด๋Œ‘ํ„ฐ๋งŒ ์žˆ์œผ๋ฉด ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•ธ๋“ค๋Ÿฌ๋ผ๊ณ  ๋ช…์‹œํ•˜์˜€๋‹ค.
  6. ViewResolver
    ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋…ผ๋ฆฌ ๋ทฐ ์ด๋ฆ„์„ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ทฐ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.
  7. View

 

3. ์Šคํ”„๋ง MVC ๋™์ž‘์ˆœ์„œ ๐ŸŒท

  1. ํ•ธ๋“ค๋Ÿฌ ์กฐํšŒ
    ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘์„ ํ†ตํ•ด ์š”์ฒญ URL์ด ๋งตํ•‘๋œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  2. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์กฐํšŒ
    ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์กฐํšŒํ•œ๋‹ค.
  3. ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ์‹คํ–‰
    ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  4. ํ•ธ๋“ค๋Ÿฌ ์‹คํ–‰
    ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์‹ค์ œ ํ•ธ๋“ค๋Ÿฌ(Controller)๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  5. ModelAndView ๋ฐ˜ํ™˜
    ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋Š” ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ •๋ณด๋ฅผ ModelAndView๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  6. ViewResolver ํ˜ธ์ถœ
    ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋ฅผ ์ฐพ๊ณ  ์‹คํ–‰ํ•œ๋‹ค.
  7. View ๋ฐ˜ํ™˜
    ๋ทฐ ๋ฆฌ์กธ๋ฒ„๋Š” ๋ทฐ์˜ ๋…ผ๋ฆฌ ์ด๋ฆ„์„ ๋ฌผ๋ฆฌ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊พธ๊ณ , ๋žœ๋”๋ง ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  8. ๋ทฐ ๋žœ๋”๋ง
    ๋ทฐ๋ฅผ ํ†ตํ•ด์„œ ๋ทฐ๋ฅผ ๋žœ๋”๋ง ํ•œ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€ ๊น€์˜ํ•œ ๋‹˜์˜ '์Šคํ”„๋ง MVC 1ํŽธ - ๋ฐฑ์—”๋“œ ์›น ๊ฐœ๋ฐœ ํ•ต์‹ฌ ๊ธฐ์ˆ '์„ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.