mvc

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด

img.png
img_1.png

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด ํŠน์ง•

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ์„œ๋ธ”๋ฆฟ ํ•˜๋‚˜๋กœ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๋Š”๋‹ค.

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์š”์ฒญ์— ๋งž๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ์•„์„œ ํ˜ธ์ถœํ•œ๋‹ค.

  • ์ž…๊ตฌ๋ฅผ ํ•˜๋‚˜๋กœ ๋งŒ๋“ค์–ด์„œ ๊ณตํ†ต ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์„œ๋ธ”๋ฆฟ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

img_7.png

์Šคํ”„๋ง ์›น MVC์˜ ํ•ต์‹ฌ๋„ FrontController์ด๋‹ค. ์Šคํ”„๋ง ์›น MVC์˜ DispatchServlet์ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V1

img_2.png
  • ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค

๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์ผ๊ด€์„ฑ์„ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  • ํšŒ์› ๋“ฑ๋ก ์ปจํŠธ๋กค๋Ÿฌ

  • ํšŒ์› ์ €์žฅ ์ปจํŠธ๋กค๋Ÿฌ

  • ํšŒ์› ๋ชฉ๋ก ์ปจํŠธ๋กค๋Ÿฌ

๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋‚ด๋ถ€ ๋กœ์ง์€ ๊ธฐ์กด ์„œ๋ธ”๋ฆฟ๊ณผ ๊ฑฐ์˜ ๋˜‘๊ฐ™๋‹ค.

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

  • controllerMap

    • key : ๋งคํ•‘ URL

    • value : ํ˜ธ์ถœ๋  ์ปจํŠธ๋กค๋Ÿฌ

  • service()

    • requestURI๋ฅผ ์กฐํšŒํ•ด์„œ ํ˜ธ์ถœํ•  ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ controllerMap์—์„œ ์ฐพ๊ณ  ์—†๋‹ค๋ฉด 404 ๋ฐ˜ํ™˜

    • ์ฐพ์€ ์ปจํŠธ๋กค๋Ÿฌ์˜ process(request, response)๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ทฐ๋กœ ์ด๋™ํ•˜๋Š” ๋ถ€๋ถ„์— ์ค‘๋ณต์ด ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„๋กœ ๋ทฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V2

img_3.png
  • MyView

  • ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค(๋ทฐ๋ฅผ ๋ฐ˜ํ™˜)

  • ํšŒ์› ๋“ฑ๋ก ํผ ์ปจํŠธ๋กค๋Ÿฌ

์ง€๊ธˆ์ฒ˜๋Ÿผ ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์ด์ œ ๋‹จ์ˆœํžˆ MyView ๊ฐ์ฒด์— ๋ทฐ ์ด๋ฆ„๋งŒ ๋„ฃ์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค.

  • ํšŒ์› ์ €์žฅ ์ปจํŠธ๋กค๋Ÿฌ

  • ํšŒ์› ๋ชฉ๋ก ์ปจํŠธ๋กค๋Ÿฌ

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์™€ MyView ๊ฐ์ฒด๋กœ ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋Š” MyView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด MyView์˜ render()๋กœ ์ผ๊ด€๋˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.


ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V3

์ปจํŠธ๋กค๋Ÿฌ ์ž…์žฅ์—์„œ HttpServletRequest, HttpServletResponse๋Š” ๊ผญ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

์š”์ฒญ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด๋ฅผ Map์œผ๋กœ ๋Œ€์‹  ๋„˜๊ธฐ๋ฉด ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์„ ๋ชฐ๋ผ๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  request ๊ฐ์ฒด๋ฅผ Model๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹ ์— ๋ณ„๋„์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๋ฉด ๋œ๋‹ค. ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•ด๋ณด์ž. ์ด๋Ÿฐ ๊ตฌ์กฐ๋Š” ๊ตฌํ˜„ ์ฝ”๋“œ๋„ ๋‹จ์ˆœํ•ด์ง€๊ณ  ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ๋„ ์‰ฌ์›Œ์ง„๋‹ค.

๋˜ํ•œ ๋ทฐ ์ด๋ฆ„์ด ์ค‘๋ณต์ด ์žˆ์œผ๋ฏ€๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ทฐ์˜ ๋…ผ๋ฆฌ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋ฌผ๋ฆฌ ์œ„์น˜ ์ด๋ฆ„์€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.

img_4.png
  • ModelView

    • ์ง€๊ธˆ๊นŒ์ง€ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ์„œ๋ธ”๋ฆฟ์— ์ข…์†์ ์ธ HtttpServletRequest๋ฅผ ์‚ฌ์šฉํ•ด ๋ชจ๋ธ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ทฐ๋ฅผ ์ „๋‹ฌํ–ˆ๋‹ค.

    • ์„œ๋ธ”๋ฆฟ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋ธ์„ ์ง์ ‘ ๋งŒ๋“ค๊ณ  ๋ทฐ ์ด๋ฆ„๊นŒ์ง€ ์ „๋‹ฌํ•˜๋Š” ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

    • ์ดํ›„ ๋ฒ„์ „์—์„œ๋Š” HtttpServletRequest๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ์ด ๋ณ„๋„๋กœ ํ•„์š”ํ•˜๋‹ค.

  • ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค

์„œ๋ธ”๋ฆฟ ๊ธฐ์ˆ ์„ ์ „ํ˜€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ํšŒ์› ๋“ฑ๋ก ํผ ์ปจํŠธ๋กค๋Ÿฌ

๋…ผ๋ฆฌ ์ด๋ฆ„๋งŒ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค.

  • ํšŒ์› ์ €์žฅ ์ปจํŠธ๋กค๋Ÿฌ

  • ํšŒ์› ๋ชฉ๋ก ์ปจํŠธ๋กค๋Ÿฌ

  • MyView ์ถ”๊ฐ€

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

  • createParamMap()

    • HttpServletRequest์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด๋ฅผ ๊บผ๋‚ด์„œ Map์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ํ•ด๋‹น Map์„ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•˜๋ฉด์„œ ํ˜ธ์ถœํ•œ๋‹ค.

  • viewResolver()

    • ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๋…ผ๋ฆฌ ๋ทฐ ์ด๋ฆ„์„ ์‹ค์ œ ๋ฌผ๋ฆฌ ๋ทฐ ๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ค์ œ ๋ฌผ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์žˆ๋Š” MyView๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • view.render()

    • ๋ทฐ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด์„œ HTML ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•œ๋‹ค.

    • ์ด ๋•Œ ๋ชจ๋ธ ์ •๋ณด๋„ ํ•จ๊ป˜ ๋ฐ›๋Š”๋‹ค.

    • JSP๋Š” request.getAttribute()๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ชจ๋ธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์„œ request.setAttribute()๋กœ ๋‹ด์•„๋‘”๋‹ค.

    • JSP๋กœ ํฌ์›Œ๋“œํ•ด์„œ JSP๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.


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

V3๋Š” ์„œ๋ธ”๋ฆฟ ์ข…์†์„ฑ๋„ ์ œ๊ฑฐํ•˜๊ณ  ๋ทฐ ๊ฒฝ๋กœ์˜ ์ค‘๋ณต๋„ ์ œ๊ฑฐํ•˜๋Š” ๋“ฑ ์ž˜ ์„ค๊ณ„๋๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ModelView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์ด ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

img_5.png
  • ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค

  • ํšŒ์› ๋“ฑ๋ก ํผ ์ปจํŠธ๋กค๋Ÿฌ

๋ทฐ์˜ ๋…ผ๋ฆฌ ์ด๋ฆ„๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

  • ํšŒ์› ์ €์žฅ ์ปจํŠธ๋กค๋Ÿฌ

model.put("member", member) : ๋ชจ๋ธ์ด ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋ธ์„ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

  • ํšŒ์› ๋ชฉ๋ก ์ปจํŠธ๋กค๋Ÿฌ

  • ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ

์ด์ „ ๋ฒ„์ „๊ณผ ๊ฑฐ์˜ ๊ฐ™๊ณ  ๋‹ค๋ฅธ ๊ฒƒ์€ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์„œ ์ปจํŠธ๋กค๋Ÿฌ์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋ฉด ๋กœ์ง ํ›„์— ๋ชจ๋ธ์—๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ด๊ธด ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.


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

์–ด๋Œ‘ํ„ฐ ํŒจํ„ด

์ง€๊ธˆ๊นŒ์ง€ ๊ฐœ๋ฐœํ•œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•ด๋‹น ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ๋ฒ„์ „๋ผ๋ฆฌ ํ˜ธํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด์„œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

img_6.png
  • ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ

    • ์ค‘๊ฐ„์—์„œ ์–ด๋Œ‘ํ„ฐ ์—ญํ• ์„ ํ•œ๋‹ค. ๋•๋ถ„์— ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

  • ํ•ธ๋“ค๋Ÿฌ

    • ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ด๋ฆ„์„ ๋” ๋„“์€ ๋ฒ”์œ„์ธ ํ•ธ๋“ค๋Ÿฌ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

    • ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปจํŠธ๋กค๋Ÿฌ์˜ ๊ฐœ๋… ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•ด๋‹นํ•˜๋Š” ์ข…๋ฅ˜์˜ ์–ด๋Œ‘ํ„ฐ๋งŒ ์žˆ์œผ๋ฉด ๋‹ค ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์–ด๋Œ‘ํ„ฐ์šฉ ์ธํ„ฐํŽ˜์ด์Šค

  • boolean supports()

    • handler == ์ปจํŠธ๋กค๋Ÿฌ

    • ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.

  • ModelView handle()

    • ์‹ค์ œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ModelView๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

    • ์‹ค์ œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ModelView๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๋ฉด ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ง์ ‘ ์ƒ์„ฑํ•ด์„œ๋ผ๋„ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

    • ์ด์ „์—๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์‹ค์ œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ์ด ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ํ˜ธ์ถœ๋œ๋‹ค.

V3 ์ง€์› ์–ด๋Œ‘ํ„ฐ

  • boolean supports()

    • ControllerV3๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•œ๋‹ค.

  • ModelView handle()

    • handler๋ฅผ V3๋กœ ๋ณ€ํ™˜ํ•œ ๋‹ค์Œ V3 ํ˜•์‹์— ๋งž๋„๋ก ํ˜ธ์ถœํ•œ๋‹ค.

    • ControllerV3๋Š” ModelView๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

V4 ์ง€์› ์–ด๋Œ‘ํ„ฐ

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

์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” ControllerV4๋Š” ๋ทฐ ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ ์–ด๋Œ‘ํ„ฐ๋Š” ModelView๋ฅผ ๋งŒ๋“ค์–ด์„œ ํ˜•์‹์„ ๋งž์ถฐ์„œ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด๊ฒƒ์ด ์–ด๋Œ‘ํ„ฐ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋‹ค.

Last updated