๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Spring

๋งŒ๋“ค๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller) ํŒจํ„ด

by ์ฃผ๋ฐœ2 2023. 8. 16.
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ธฐ์กด Servlet ๊ธฐ๋ฐ˜์˜ MVC ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์Šคํ”„๋ง์˜ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์„ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•˜๋Š” ๊ณผ์ • ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ์•„๋ž˜ ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค!

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

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

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ํ•„์š”ํ•œ ๋ชจ๋“  ์›น ๊ธฐ์ˆ ์„ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ดํ•ดํ•˜๊ณ , ์™„์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํ”„๋ง MVC์˜ ํ•ต์‹ฌ ์›๋ฆฌ์™€ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋” ๊นŠ์ด์žˆ๋Š” ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋กœ ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., ์›

www.inflearn.com

 

 

์Šคํ”„๋ง์—์„œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ํŒจํ„ด์€ ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ ํ•ฉํ•œ ์ปจํŠธ๋กค๋Ÿฌ์— ์œ„์ž„ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š”๋ฐ์š”, ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ๋Œ€ํ•ด ์ž์„ธํ•œ ๊ฑด ํ•ด๋‹น ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”.

https://docs.spring.io/spring-framework/docs/3.0.0.M4/spring-framework-reference/html/ch15s02.html

 

 

Servlet, JSP ๊ธฐ๋ฐ˜ MVC ๊ธฐ์กด ์ฝ”๋“œ

๊ธฐ์กด ์ฝ”๋“œ๋Š” ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ HttpServlet ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•„์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • View๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•œ dispatcher, forward ์ฝ”๋“œ์˜ ์ค‘๋ณต
  • HttpServletRequest, HttpServletResponse ๋“ฑ์˜ ๋ฏธ์‚ฌ์šฉ ์ฝ”๋“œ
  • ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ํ•„์š”ํ•œ ๊ณตํ†ต ์ฒ˜๋ฆฌ์˜ ์–ด๋ ค์›€

์œ„์™€ ๊ฐ™์€ ๋‹จ์ ๋“ค์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์œ„ ์ˆ˜๋ฌธ์žฅ ์—ญํ• ์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์ธ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ(Front Controller) ํŒจํ„ด์„ ๋งŒ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

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

์ฒ˜์Œ์— ์‚ดํŽด๋ดค๋“ฏ์ด ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋จผ์ € ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

 

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

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ V1 ๋ฒ„์ „์—์„œ๋Š” ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›๋Š” FrontController ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ URI๋ฅผ ํ†ตํ•ด Controller์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ ํ›„ Controller๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

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

์œ„ ์ฝ”๋“œ๋Š” ๊ธฐ์กด Servlet, jsp๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ฝ”๋“œ๋Š” ์œ ์ง€ํ•œ ์ฑ„ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋งŒ ๋„์ž…ํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

 

์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ๋•Œ ๋‹คํ˜•์„ฑ์„ ์ ์šฉํ•˜๋„๋ก ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ ์–ธํ•˜๊ณ , ๊ฐ ์ปจํŠธ๋กค๋Ÿฌ๋งˆ๋‹ค ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ์„ ์–ธํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋„์ž…ํ•จ์œผ๋กœ์จ ๋ชจ๋“  ์š”์ฒญ์€ FrontControllerServletV1 ํด๋ž˜์Šค๊ฐ€ ๋จผ์ € ๋ฐ›๊ณ , ๊ณตํ†ต ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ ํ˜ธ์ถœ๋  ์ปจํŠธ๋กค๋Ÿฌ์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ URL๋กœ๋ถ€ํ„ฐ ์ฐพ์•„์„œ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, V1 ๊ตฌ์กฐ์—์„œ๋Š” View์™€ ๊ด€๋ จ๋œ ์ฝ”๋“œ์—์„œ ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋งŽ์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”, V2 ๊ตฌ์กฐ์—์„œ๋Š” ์ด๋ฅผ ๊ฐœ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

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

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ V1 ๋ฒ„์ „์€ ๋ชจ๋“  HTTP ์š”์ฒญ์„ ๋ฐ›๋Š” FrontController ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ํด๋ž˜์Šค์—์„œ URI๋ฅผ ํ†ตํ•ด Controller์˜ ๋งคํ•‘ ์ •๋ณด๋ฅผ ์กฐํšŒํ•œ ํ›„ Controller๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ V2 ๋ฒ„์ „์—์„œ๋Š” V1๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ณ„๋„๋กœ View๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” MyView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ ๋ฐ•์Šค ๋ถ€๋ถ„์ด V1 ๊ตฌ์กฐ์—์„œ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.)

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

๊ธฐ์กด V1์˜ ์ปจํŠธ๋กค๋Ÿฌ์— ์กด์žฌํ•˜๋Š” View ๊ด€๋ จ ๋กœ์ง์„ MyView ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

V2 Controller๋Š” ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•œ ํ›„ MyView ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , Servlet์—์„œ ์ด๋ฅผ ๋ฐ›์•„ render() ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด MyView ๊ฐ์ฒด๊ฐ€ JSP๋ฅผ forwardํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

V2 ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ด V1์—์„œ View์™€ ๊ด€๋ จ๋œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ V2 ๊ตฌ์กฐ ๋˜ํ•œ Controller์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” request, response ๋“ฑ์ด ์กด์žฌํ•œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ V3 ๊ตฌ์กฐ์—์„œ๋Š” ์œ„ ์„œ๋ธ”๋ฆฟ ์˜์กด ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , Model์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐœ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

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

V2 ๋ฒ„์ „์—์„œ๋Š” View๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” MyView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์—ˆ๋Š”๋ฐ์š”, V3 ๋ฒ„์ „์—์„œ๋Š” ์กฐ๊ธˆ ๋” ๋‚˜์•„๊ฐ€์„œ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„œ๋ธ”๋ฆฟ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , View ์ด๋ฆ„์˜ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ ๋ฐ•์Šค ๋ถ€๋ถ„์ด V1 ๊ตฌ์กฐ์—์„œ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.)

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

viewName๊ณผ model์„ ํ•„๋“œ๋กœ ๊ฐ€์ง€๋Š” ModelView ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

V3 Controller๋Š” ํ•„์š”ํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ณ  V2 Controller์™€๋Š” ๋‹ฌ๋ฆฌ Servlet์— ์˜์กด์ ์ด์ง€ ์•Š์œผ๋ฉฐ view์˜ prefix ๋˜ํ•œ ์ œ๊ฑฐํ•ด ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

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

์œ„์—์„œ๋Š” ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ์˜ V1 ๋ฒ„์ „๋ถ€ํ„ฐ V3 ๋ฒ„์ „๊นŒ์ง€ ๊ฐœ์„ ์„ ํ–ˆ์—ˆ๋Š”๋ฐ์š”, ๊ฐ ๋ฒ„์ „๋งˆ๋‹ค ์–ด๋– ํ•œ ๋ถ€๋ถ„์ด ๊ฐœ์„ ๋˜์—ˆ๋Š”์ง€ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

FrontControllerServlet

 

Controller

 

Controller ๊ตฌํ˜„์ฒด

์œ„ ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ V1 -> V2 -> V3 ๋ฒ„์ „์œผ๋กœ ๊ฐˆ์ˆ˜๋ก ์ค‘๋ณต๋œ ์ฝ”๋“œ๋Š” ์ œ๊ฑฐํ•˜๊ณ (View, prefix, JSP forward ๋“ฑ), ์„œ๋ธ”๋ฆฟ์— ์˜์กด์ ์ธ ์ฝ”๋“œ(HttpServletRequest, HttpServletResponse)๋Š” ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ฐœ์„ ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V4 ๊ตฌ์กฐ

V3 ๊ตฌ์กฐ์—์„œ๋Š” ์ปจํŠธ๋กค๋Ÿฌ์— ModelView ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”, ์ด๋Š” ๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์—์„œ๋Š” ๋ถˆํ•„์š”ํ•œ ๋ถ€๋ถ„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ๊ธˆ ๋” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ํ•˜๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก V4 ๋ฒ„์ „์„ ํ†ตํ•ด ๊ฐœ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ ๋ฐ•์Šค ๋ถ€๋ถ„์ด V1 ๊ตฌ์กฐ์—์„œ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.)

V3 ๊ตฌ์กฐ์™€ ๋™์ผํ•˜์ง€๋งŒ 3๋ฒˆ์—์„œ ๊ธฐ์กด์—๋Š” ModelView๋ฅผ ๋ฐ˜ํ™˜ํ–ˆ๋‹ค๋ฉด V4์—์„œ๋Š” ViewName๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V4 ์ฝ”๋“œ

V3์™€๋Š” ๋‹ฌ๋ฆฌ Controller์—์„œ ModelView๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ViewName์ธ String๋งŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งŽ์€ ๊ฐœ์„ ์€ ์•„๋‹ˆ์ง€๋งŒ ์ด์ „ ๋ฒ„์ „๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ปจํŠธ๋กค๋Ÿฌ์—์„œ ModelView ๊ฐ์ฒด์— ๋Œ€ํ•ด ์•Œ ํ•„์š”๊ฐ€ ์—†๊ณ , View์˜ ์ด๋ฆ„๋งŒ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋‹จ์ˆœํ•˜๊ณ  ์‹ค์šฉ์ ์œผ๋กœ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

"ํ”„๋ ˆ์ž„์›Œํฌ๋‚˜ ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ์ˆ˜๊ณ ๋กœ์›Œ์•ผ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํŽธ๋ฆฌํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค."

 

 

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V5 ๊ตฌ์กฐ

์ง€๊ธˆ๊ป ๊ฐœ๋ฐœํ•ด์˜จ V1 ~ V4 ๊ตฌ์กฐ์—์„œ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๋Š” ํ•˜๋‚˜์˜ ์ปจํŠธ๋กค๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ ๋ฒ„์ „ ๊ฐ„ ํ˜ธํ™˜์ด ๋ถˆ๊ฐ€๋Šฅํ•œ๋ฐ์š”, ๋งŒ์•ฝ ๋ˆ„๊ตฐ๊ฐ€๋Š” ControllerV3๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ˆ„๊ตฐ๊ฐ€๋Š” ControllerV4 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์ด๋Ÿฌํ•œ ์ƒํ™ฉ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

 

V5 ๋ฒ„์ „์—์„œ๋Š” ์–ด๋Œ‘ํ„ฐ ํŒจํ„ด์„ ์ ์šฉํ•˜์—ฌ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜ ๋นจ๊ฐ„์ƒ‰ ๋„ค๋ชจ ๋ฐ•์Šค ๋ถ€๋ถ„์ด V1 ๊ตฌ์กฐ์—์„œ ์ถ”๊ฐ€๋œ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.)

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

ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ - V5 ์ฝ”๋“œ

HandlerAdapter

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

 

ControllerV3HandlerAdapter

  • supports(): ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ControllerV3๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.
  • handle(): ํ•ธ๋“ค๋Ÿฌ๋ฅผ ControllerV3์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ์‹ค์ œ ํ˜ธ์ถœํ•˜๊ณ , ModelView๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

V5 FrontController

V5 FrontController์—์„œ๋Š” ํ•ธ๋“ค๋Ÿฌ ๋งคํ•‘ ์ •๋ณด(handlerMappingMap)์—์„œ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์กฐํšŒํ•˜๊ณ , ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ ๋ชฉ๋ก(handlerAdapters)์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•ธ๋“ค๋Ÿฌ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ฐพ์€ ํ›„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž๋Š” ๋ฒ„์ „์— ๊ด€๊ณ„์—†์ด V5์—์„œ ๋„์ž…๋œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ํ†ตํ•ด ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์กฐ๊ธˆ ๋” ์œ ์—ฐํ•˜๊ณ  ํ™•์žฅ์„ฑ์žˆ๊ฒŒ ์„ค๊ณ„๋ฅผ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

V1 ~ V5 ๋ฒ„์ „์—์„œ๋Š” ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋กœ์ง์„ ๋ถ„๋ฆฌํ•˜๋ฉฐ ์„œ๋ธ”๋ฆฟ์— ์˜์กด์ ์ธ ๋ถ€๋ถ„์„ ์ œ๊ฑฐํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๊ฐ€ ์กฐ๊ธˆ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง์„ ๊ฐ„๋‹จํžˆ ํ•˜๊ณ , ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋„์ž…ํ•˜์—ฌ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™•์žฅ์„ฑ์žˆ๊ฒŒ ๊ฐœ์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

์ง์ ‘ ๋งŒ๋“ค์–ด๋ณธ FrontController ํŒจํ„ด์ด ์Šคํ”„๋ง์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹  ๋ถ„์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์…”๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณธ ํ”„๋ก ํŠธ ์ปจํŠธ๋กค๋Ÿฌ ํŒจํ„ด์€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—๋„ ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ผํ•˜๊ฒŒ ๊ตฌํ˜„์ด ๋˜์–ด ์žˆ๋Š”๋ฐ์š”, ์‚ฌ์šฉํ•œ ๊ฐ์ฒด๋“ค (HandlerAdapter, ModelView ๋“ฑ) ๋˜ํ•œ ์Šคํ”„๋ง์— ๋น„์Šทํ•œ ๋„ค์ด๋ฐ์˜ ๊ฐ์ฒด๊ฐ€ ์กด์žฌ ํ•ฉ๋‹ˆ๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•˜์‹  ๋ถ„์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜์…”๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€