2022 01 14 - oneso123456789/2022 GitHub Wiki

์นดํŽ˜์—์„œ ๊ณต๋ถ€ํ•จ

๋‚ด์šฉ์ด ๋„ˆ๋ฌด ๋งŽ์„์‹œ ์ง‘์—๊ฐ€์„œ ๊ฐ„์ถ”๋ ค์„œ ํŽธ์ง‘ํ•ด์•ผ๊ฒ ์Œ

์Šคํ”„๋ง MVC ๊ธฐ๋ณธ์‚ฌ์ƒ

Java๋ฅผ ์ด์šฉํ•˜๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ œ์ž‘ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด Servlet/JSP ๊ธฐ์ˆ ์„ ํ™œ์šฉํ•ด์„œ ์ œ์ž‘ํ•˜๋Š” ๋ฐฉ์‹์„ ๋จผ์ € ๋ฐฐ์›€.
์ดํ›„ ๋ชจ๋ธ2๋ผ๋Š” ๋ฐฉ์‹์„ ํ•™์Šตํ•จ ์Šคํ”„๋ง MVC์˜ ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ๋ถ€๋ถ„์„
๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๊ณ , ๊ฐœ๋ฐœ์ž๋“ค์€ ์ž์‹ ์ด ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋งŒ๋“ค์–ด์ง.

๊ธฐ์กด๋ฐฉ์‹

์›นํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋ฐฐ์›Œ๋ณธ ์ ์ด ์žˆ๋‹ค๋ฉด ๊ฐ€์žฅ ์ต์ˆ™ํ•œ ๋‹จ์–ด๋“ค์ค‘ ํ•˜๋‚˜๋Š” Request/Response์ด๋ฉฐ Servlet/JSP์—์„  HttpServletRequest/HttpServletResponse๋ผ๋Š”
ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•ด์„œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ „์†กํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌ

์Šคํ”„๋ง MVC์˜ ๋ฐฉ์‹

์Šคํ”„๋ง MVC์˜ ๊ฒฝ์šฐ ์ด ์œ„์— ํ•˜๋‚˜์˜ ๊ณ„์ธต์„ ๋”ํ•œ ํ˜•ํƒœ์ž„
์Šคํ”„๋ง MVC๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๊ฐœ๋ฐœ์ž๋“ค์€ ์ง์ ‘์ ์œผ๋กœ HttpServletRequest/HttpServletResponse๋“ฑ
Sevlet/JSP์˜ API๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”์„ฑ์ด ์ค„์–ด๋“ฌ.
**์Šคํ”„๋ง์€ ์ค‘๊ฐ„์— ์—ฐ๊ฒฐ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ **

๊ฐœ๋ฐœ์ž์˜ ์ฝ”๋“œ๋Š” ์Šคํ”„๋ง MVC์—์„œ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์Šคํ”„๋ง 2.5๋ฒ„์ „ ์ „์—๋Š”
ํŠน์ •ํ•œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ–ˆ์ง€๋งŒ,
2.5๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ๋“ฑ์žฅํ•œ ์–ด๋…ธํ…Œ์ด์…˜๋ฐฉ์‹์œผ๋กœ ์ธํ•ด
์ตœ๊ทผ ๊ฐœ๋ฐœ์—๋Š” ์–ด๋…ธํ…Œ์ด์…˜๊ณผ XML๋“ฑ์˜ ์„ค์ •๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•˜์ง

๋ชจ๋ธ 2์™€ ์Šคํ”„๋ง MVC

์œ„ ๋‚ด์šฉ์—์„œ ๋ณด์—ฌ์ฃผ๋“ฏ์ด ์Šคํ”„๋ง MVC ์—ญ์‹œ ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” Servlet API๋ฅผ ํ™œ์šฉํ•จ. ์Šคํ”„๋ง MVC๋Š” ๋ชจ๋ธ 2๋ผ๋Š” ๋ฐฉ์‹์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ตฌ์กฐ์ด๋ฏ€๋กœ
๋ชจ๋ธ 2๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์‚ดํŽด๋ณผ ํ•„์š”๊ฐ€์žˆ์Œ

๋ชจ๋ธ 2(Model 2)

๋ชจ๋ธ 2๋ฐฉ์‹์€ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋กœ์ง๊ณผ ํ™”๋ฉด์„ ๋ถ„๋ฆฌํ•˜๋Š” ์Šคํƒ€์ผ์˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์ž„

๋ชจ๋ธ 2๋ฐฉ์‹์—์„œ ์‚ฌ์šฉ์ž์˜ Request๋Š” ํŠน๋ณ„ํ•œ ์ƒํ™ฉ์ด ์•„๋‹Œ ์ด์ƒ ๋จผ์ € Controller๋ฅผ ํ˜ธ์ถœ
์ด๋ ‡๊ฒŒ ์„ค๊ณ„ํ•˜๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ด์œ ๋Š”
๋‚˜์ค‘์— View๋ฅผ ๊ต์ฒดํ•˜๋”๋ผ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” URL์ž์ฒด์— ๋ณ€ํ™”๊ฐ€ ์—†๊ฒŒ ๋งŒ๋“ค์–ด ์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž„.
์ปจํŠธ๋กค๋Ÿฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์กด์žฌ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํƒ€(Model)์„ ์ฒ˜๋ฆฌํ•˜๊ณ  Response
ํ•  ๋•Œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(Model)๋ฅผ View ์ชฝ์œผ๋กœ ์ „๋‹ฌํ•˜๊ฒŒ ๋จ.
Servlet์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐœ๋ฐœ์ž๋“ค์€ Servlet API์˜ RequestDispatcher๋“ฑ์„ ์ด์šฉํ•ด์„œ
์ด๋ฅผ ์ง์ ‘ ์ฒ˜๋ฆฌํ•ด ์™”์ง€๋งŒ ์Šคํ”„๋ง MVC๋Š” ๋‚ด๋ถ€์—์„œ ์ด๋Ÿฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ณ ,
๊ฐœ๋ฐœ์ž๋“ค์€ ์Šคํ”„๋ง API๋ฅผ ์ด์šฉํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ๋จ.

์Šคํ”„๋ง MVC์˜ ๊ธฐ๋ณธ๊ตฌ์กฐ (๊ทธ๋ฆผ์€ ๊ฐœ์ •ํŒ 122p์ฐธ๊ณ )

  1. ์‚ฌ์šฉ์ž์˜ Request๋Š” Front-Controllerdls DispatcherServlet์„ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•จ.
    ์ƒ์„ฑ๋œ ํ”„๋กœ์ ํŠธ์˜ web.xml์„ ๋ณด๋ฉด ๋ชจ๋“  Request๋ฅผ DispatcherServlet์ด ๋ฐ›๋„๋ก ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Œ.

  2. (2&3)HandlerMapping์€ Request์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์กด์žฌํ•จ,
    HandlerMapping ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋“ค ์ค‘ RequestMappingHandlerMapping๊ฐ™์€
    ๊ฒฝ์šฐ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ @RequestMapping ์–ด๋…ธํ…Œ์ด์…˜์ด ์ ์šฉ๋œ ๊ฒƒ์„ ๊ธฐ์ค€์œผ๋กœ ํŒ๋‹จํ•จ.
    ์ ์ ˆํ•œ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ฐพ์•„์กŒ๋‹ค๋ฉด HandlerAdapter๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋™์ž‘์‹œํ‚ด.

  3. Controller๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•˜๋Š” ํด๋ž˜์Šค๋กœ ์‹ค์ œ Request๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋จ.
    ์ด๋•Œ View์— ์ „๋‹ฌํ•ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ฃผ๋กœ Model์ด๋ผ๋Š” ๊ฐ์ฒด์— ๋‹ด์•„์„œ ์ „๋‹ฌํ•จ.
    Controller๋Š” ๋‹ค์–‘ํ•œ ํƒ€์ž…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ ์ด์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ViewResolver๋ฅผ ์ด์šฉํ•จ.

  4. ViewResolver๋Š” Controller๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ค View๋ฅผ ํ†ตํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€
    ํ•ด์„ํ•˜๋Š” ์—ญํ• ์„ํ•จ
    ๊ฐ€์žฅ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ •์€ servlet-context.xml์— ์ •์˜๋œInternalResourceViewResolver์ž„

  5. (6&7)View๋Š” ์‹ค์ œ๋กœ ์‘๋‹ต ๋ณด๋‚ด์•ผ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Jsp๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ํ•จ
    ๋งŒ๋“ค์–ด์ง„ ์‘๋‹ต์€ DispatcherServlet์„ ํ†ตํ•ด์„œ ์ „์†ก๋จ.

Front-Controller ํŒจํ„ด

122p์˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๋ฉด
๋ชจ๋“  Request๋Š” DispatcherServlet์„ ํ†ตํ•ด์„œ ์„ค๊ณ„๋˜๋Š”๋ฐ, ์ด๋Ÿฐ๋ฐฉ์‹์„ Front-Controller ํŒจํ„ด์ด๋ผ๊ณ  ํ•จ. Front-Controller ํŒจํ„ด์„ ์ด์šฉํ•˜๋ฉด ์ „์ฒด ํ๋ฆ„์„ ๊ฐ•์ œ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Œ.

์˜ˆ๋ฅผ ๋“ค์–ด HttpServlet์„ ๊ทธ๋Œ€๋กœ ์ƒ์†ํ•ด์„œ ๋งŒ๋“  ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ ํŠน์ • ๊ฐœ๋ฐœ์ž๋Š”
์ด๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๋Š” ์ž์‹ ์ด ์›๋ž˜ ํ•˜๋˜ ๋ฐฉ์‹๋Œ€๋กœ HttpServlet์„
๊ทธ๋Œ€๋กœ ์ƒ์†ํ•ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜๋„ ์žˆ์Œ
Front-Controller ํŒจํ„ด์„ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ชจ๋“  Request์˜ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•œ ๋ถ„๋ฐฐ๊ฐ€
์ •ํ•ด์ง„ ๋ฐฉ์‹๋Œ€๋กœ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€ ๋” ์—„๊ฒฉํ•œ ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์ˆ˜์žˆ์Œ.

์Šคํ”„๋ง MVC์˜ Controller

  • ์Šคํ”„๋ง MVC Controller์˜ ํŠน์ง•
    • HttpServletRequest, HttpServletResponse๋ฅผ ๊ฑฐ์˜ ์‚ฌ์šฉํ•  ํ•„์š” ์—†์ด ํ•„์š”ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„