
๐ DispatcherServlet ๊ธฐ๋ฐ MVC ๊ตฌ์กฐ ์ต์ข ์์ฝ ๐
DispatcherServlet ๊ธฐ๋ฐ์ MVC ๊ตฌ์กฐ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ์ ์ค์ ์ง์ค์์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ญํ ๋ถ๋ด์ ํตํด ๊ฐ๋ฐ ํจ์จ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ๋์ด๋ ๋์์ธ ํจํด์ด์ผ. ํต์ฌ ๊ตฌ์ฑ ์์์ ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์.
ํด๋ผ์ด์ธํธ ์์ฒญ (View โ DispatcherServlet): ์ฌ์ฉ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ํน์ URL์ ์์ฒญํ๊ฑฐ๋ ์ก์
์ ์ํํ๋ฉด, ์ด ์์ฒญ์ ์น ์๋ฒ๋ฅผ ๊ฑฐ์ณ DispatcherServlet์๊ฒ ์ ๋ฌ๋ผ. @WebServlet("/") ๋๋ ํน์ ํจํด์ผ๋ก ๋งคํ๋์ด ๋ชจ๋ ์์ฒญ์ Front Controller๋ก์ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํด.
Handler Mapping (DispatcherServlet โ Handler): DispatcherServlet์ ๋ฐ์ ์์ฒญ์ URL์ด๋ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ์ด ์์ฒญ์ ์ฒ๋ฆฌํ Handler (์ผ๋ฐ์ ์ผ๋ก Controller)๋ฅผ ์ฐพ์. ์ด ๊ณผ์ ์ ์ค์ ํ์ผ (actionMapping.properties, XML ์ค์ , ์ด๋
ธํ
์ด์
๋ฑ)์ ์ ์๋ ๋งคํ ์ ๋ณด๋ฅผ ํ์ฉํด ์ด๋ฃจ์ด์ ธ. (์ด์ ๊ฐ์ ๋
ธํธ์์ HandlerMappingListener๊ฐ ๋ฏธ๋ฆฌ ์ค๋นํด๋ map์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋ฐ๋ก ์ด ์ญํ ์ ํ ์์์ผ!)
Controller ์คํ (DispatcherServlet โ Controller): DispatcherServlet์ Handler Mapping์ ํตํด ์ฐพ์ Controller์ ํน์ ๋ฉ์๋๋ฅผ ์คํํ๋ฉด์, ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด (HttpServletRequest)์ ์๋ต ์ ๋ณด (HttpServletResponse)๋ฅผ ํจ๊ป ์ ๋ฌํด.
๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ (Controller โ Service โ Model): Controller๋ ์ ๋ฌ๋ฐ์ ์์ฒญ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ํ์ํ Model ๋ฐ์ดํฐ๋ฅผ ์ป๊ธฐ ์ํด Service ๊ณ์ธต์ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํด. Service๋ DAO (Data Access Object)๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ํธ์์ฉํ๊ธฐ๋ ํด.
ModelAndView ๋ฐํ (Controller โ DispatcherServlet): Controller๋ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ธ Model ๋ฐ์ดํฐ์ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค View์ ์ด๋ฆ์ ํจ๊ป ๋ด์ ModelAndView ๊ฐ์ฒด๋ฅผ DispatcherServlet์๊ฒ ๋ฐํํด.
View Resolver (DispatcherServlet โ View): DispatcherServlet์ ModelAndView๋ก๋ถํฐ ๋ฐ์ View ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์ค์ View ๊ฐ์ฒด (JSP, Thymeleaf ๋ฑ)๋ฅผ ์ฐพ์. View Resolver๋ ์ค์ ๋ ๊ท์น์ ๋ฐ๋ผ View ์ด๋ฆ์ ์ ๋์ฌ, ์ ๋ฏธ์ฌ๋ฅผ ๋ถ์ฌ ์ค์ ํ์ผ ๊ฒฝ๋ก๋ฅผ ๊ฒฐ์ ํ๋ ์ญํ ์ ํด.
View ๋ ๋๋ง (DispatcherServlet โ View โ Client): DispatcherServlet์ ์ฐพ์ View์๊ฒ Model ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ , View๋ ์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ต์ข ์ ์ธ ์๋ต (HTML, JSON ๋ฑ)์ ์์ฑํ๊ณ ์น ๋ธ๋ผ์ฐ์ ๋ก ์๋ต์ ์ ์กํด.
๐จ DispatcherServlet์ ์ข ๋ ๊น์ ๊ธฐ๋ฅ๋ค (๋ด๊ฐ ์๋ ์ ์์!) ๐จ
์ค์ DispatcherServlet์ ๋จ์ํ ์์ฒญ์ ๋ฐ๊ณ Controller๋ฅผ ์คํํ๋ ๊ฒ ์ธ์๋ ๋ค์ํ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํจ์ฌ ํธ๋ฆฌํ๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด ์ค. ๋ช ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ์๋ ค์ค๊ฒ.
Handler Interceptor: ์์ฒญ ์ฒ๋ฆฌ ์ ํ์ ํน์ ์์ ์ ์ํํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์ผ. ๋ง์น ์์ฒญ์ด Controller์ ๋์ฐฉํ๊ธฐ ์ ์ด๋ Controller๊ฐ ์๋ต์ ๋ณด๋ด๊ธฐ ์ ์ "๊ฐ๋ก์ฑ์" ๊ณตํต์ ์ธ ๋ก๊น , ์ธ์ฆ, ๊ถํ ๊ฒ์ฌ ๋ฑ์ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ง. ์ฌ๋ฌ ๊ฐ์ Interceptor๋ฅผ ๋ฑ๋กํด์ ์์๋๋ก ์คํํ ์๋ ์์ด.
Exception Resolver: ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ค์ ๋ฐ์ํ๋ ์์ธ๋ฅผ ์ค์ ์ง์ค์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์ผ. Controller๋ Service ๊ณ์ธต์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด DispatcherServlet์ ๋ฑ๋ก๋ Exception Resolver๋ค์๊ฒ ์ด ์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋์ง ๋ฌผ์ด๋ณด๊ณ , ์ฒ๋ฆฌ ๊ฐ๋ฅํ Resolver๊ฐ ์์ผ๋ฉด ํด๋น Resolver์๊ฒ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋งก๊ฒจ. ์ด๋ฅผ ํตํด ์๋ฌ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ฑฐ๋, API ์๋ต์ ์ผ๊ด๋ ํ์์ผ๋ก ๋ฐํํ๋ ๋ฑ์ ์์ ์ ํ ์ ์์ด.
Locale Resolver & Theme Resolver: ๋ค๊ตญ์ด ์ง์์ด๋ ์น ํ์ด์ง์ ํ ๋ง๋ฅผ ์ผ๊ด์ฑ ์๊ฒ ์ ์ฉํ๋ ๋ฐ ๋์์ ์ฃผ๋ ๊ธฐ๋ฅ์ด์ผ. Locale Resolver๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ํค๋ ๋ฑ์ ๋ถ์ํด์ ์ฌ์ฉ์์ ์ธ์ด ์ค์ ์ ํ์ ํ๊ณ , Theme Resolver๋ ์ค์ ๋ ํ ๋ง ์ ๋ณด๋ฅผ ์ ๊ณตํด์ View์์ ์ผ๊ด๋ ๋์์ธ์ ์ ์ฉํ ์ ์๋๋ก ๋์์ค.
Multipart Resolver: ํ์ผ ์ ๋ก๋์ ๊ด๋ จ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํ ๊ธฐ๋ฅ์ด์ผ. ํด๋ผ์ด์ธํธ๊ฐ ํผ์ ํตํด ํ์ผ์ ์ ๋ก๋ํ๋ฉด, Multipart Resolver๊ฐ ์ด ์์ฒญ์ ๋ถ์ํด์ ํ์ผ ๋ฐ์ดํฐ์ ์ผ๋ฐ ํผ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฆฌํ๊ณ , Controller์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ณํํด ์ค.
Data Binding & Validation: ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ ์ก๋ ํ๋ผ๋ฏธํฐ๋ค์ Controller์ ๋ฉ์๋ ํ๋ผ๋ฏธํฐ๋ ๊ฐ์ฒด์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉ(๋งคํ)ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์ผ. ๋ํ, ๋ฐ์ธ๋ฉ๋ ๋ฐ์ดํฐ์ ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๊ธฐ๋ฅ๋ ์ ๊ณตํด์, ์ฌ์ฉ์์ ์
๋ ฅ ์ค๋ฅ๋ฅผ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ค. @RequestParam, @ModelAttribute ๋ฑ์ ์ด๋
ธํ
์ด์
์ด ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ํ์ฉ๋ผ.
Flash Attributes: Redirect ์ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ์ด์ผ. Redirect๋ฅผ ํ๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ ์ค์ฝํ์ ๋ฐ์ดํฐ๋ ์ฌ๋ผ์ง๋๋ฐ, Flash Attribute๋ฅผ ์ฌ์ฉํ๋ฉด Redirect ์ง์ ์ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ์์ฒญ๊น์ง ์ ์งํ ์ ์์ด์, ์ผํ์ฑ ๋ฉ์์ง (์ฑ๊ณต/์คํจ ๋ฉ์์ง ๋ฑ)๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ ์ฉํด.
์ด ์ธ์๋ DispatcherServlet์ ๋ค์ํ ํ์ฅ ํฌ์ธํธ๋ฅผ ์ ๊ณตํด์ ๊ฐ๋ฐ์๊ฐ ํ์ํ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ปค์คํฐ๋ง์ด์งํ ์ ์๋๋ก ์ง์ํด. Spring MVC์ ๊ฐ์ ํ๋ ์์ํฌ๋ ์ด๋ฌํ DispatcherServlet์ ๊ธฐ๋ฅ์ ๊ธฐ๋ฐ์ผ๋ก ๋ ํธ๋ฆฌํ๊ณ ๊ฐ๋ ฅํ ์น ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ๊ณตํ๋ ๊ฑฐ์ง.
1. ServletContextListener ๊ตฌํ์ฒด (HandlerMapping ์ญํ ):
HandlerMappingListener ํด๋์ค: ServletContextListener ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๋ ์ด ํด๋์ค๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋ (Tomcat ๊ฐ์ ์น ์๋ฒ)๊ฐ ์์๋ ๋ (contextInitialized ๋ฉ์๋)์ ์ข
๋ฃ๋ ๋ (contextDestroyed ๋ฉ์๋) ํน์ ์์
์ ์ํํ ์ ์๋๋ก ํด์ค.contextInitialized ๋ฉ์๋ ์์ ๋ณด๋ฉด ์ฃผ์์ผ๋ก "//ํ์ํ XxxController๋ฅผ ๋ฏธ๋ฆฌ ์์ฑํ๋ค."๋ผ๊ณ ๋์ด ์๊ณ , ๊ทธ ์๋ actionMapping.properties ํ์ผ์์ ์ ๋ณด๋ฅผ ์ฝ์ด์์ Controller๋ค์ ๋ฏธ๋ฆฌ ์์ฑํ๊ณ Map<String, Controller>์ ์ ์ฅํ๋ ๋ก์ง์ด ๋ด๊ฒจ ์์ ๊ฒ์ผ๋ก ์ถ์ธก๋ผ.actionMapping.properties ํ์ผ์๋ ์์ฒญ ํค (key)์ ๊ทธ ํค์ ํด๋นํ๋ Controller ํด๋์ค ์ด๋ฆ (value)์ด ์์ผ๋ก ์ ์๋์ด ์์ ๊ฑฐ์ผ. ์๋ฅผ ๋ค์ด, "select=SelectionController", "insert=InsertController" ์ฒ๋ผ ๋ง์ด์ง.Properties ํ์ผ์ ์ฝ์ด์ ๊ฐ ํค-๊ฐ ์์ ๋ถ๋ฆฌํ๊ณ , Reflection์ด๋ผ๋ Java ๊ธฐ๋ฅ์ ์ด์ฉํด์ ๋ฌธ์์ด๋ก ๋ ํด๋์ค ์ด๋ฆ์ ๊ฐ์ง๊ณ ์ค์ Controller ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฑฐ์ผ. (์ด๋ฏธ์ง์ (String--->๊ฐ์ฒด์์ฑ=reflection๊ฐ๋
) ์ด๋ผ๊ณ ์น์ ํ๊ฒ ์ ํ ์๋ค!)Map<String, Controller>์ธ map์ ํค์ ๊ฐ์ผ๋ก ์ ์ฅ๋ผ. ์ฌ๊ธฐ์ ํค๋ actionMapping.properties์ ์ ์๋ ์์ฒญ ํค๊ฐ ๋๊ณ , ๊ฐ์ ์์ฑ๋ Controller ๊ฐ์ฒด๊ฐ ๋๋ ๊ฑฐ์ง.map์ Application ์์ญ์ ์ ์ฅ: ๋ง์ง๋ง์ผ๋ก application.setAttribute("map", map); ์ฝ๋๋ฅผ ํตํด์ ์์ฑ๋ map ๊ฐ์ฒด๋ฅผ ServletContext (Application ์์ญ)์ ์ ์ฅํด. ์ด๋ ๊ฒ ํ๋ฉด DispatcherServlet์ ํฌํจํ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ชจ๋ ์๋ธ๋ฆฟ๊ณผ JSP์์ ์ด map์ ์ ๊ทผํด์ ํ์ํ Controller๋ฅผ ๊บผ๋ด ์ธ ์ ์๊ฒ ๋๋ ๊ฑฐ์ผ.ํต์ฌ: ์ด HandlerMappingListener๋ ์์ฒญ ํค์ ์ค์ Controller ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ์ฐ๊ฒฐํด๋๋ ์ญํ ์ ํด. ๋ง์น ์ ํ๋ฒํธ๋ถ์ฒ๋ผ, ํน์ ์์ฒญ ํค๋ฅผ ์
๋ ฅํ๋ฉด ์ด๋ค Controller๊ฐ ์ฒ๋ฆฌํด์ผ ํ๋์ง ๋ฐ๋ก ์ฐพ์ ์ ์๋๋ก ์ค๋นํด๋๋ ๊ฑฐ์ง.
2. DispatcherServlet ํด๋์ค:
@WebServlet("/front"): ์ด ์ด๋
ธํ
์ด์
์ /front๋ก ์์ํ๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ด DispatcherServlet์ด ๋ฐ์์ ์ฒ๋ฆฌํ๋๋ก ์ค์ ํ๋ ๊ฑฐ์ผ. ์์ ์ค๋ช
ํ๋ Front Controller ํจํด์ ํต์ฌ ์ญํ ์ ํ๋ ๊ฑฐ์ง.Map<String, Controller> map = null;: DispatcherServlet ๋ด๋ถ์ Controller๋ค์ ์ ์ฅํ map ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ด๊ธฐํํด.init(ServletConfig config) ๋ฉ์๋: ์๋ธ๋ฆฟ์ด ์ฒ์ ์์ฑ๋ ๋ ๋ฑ ํ ๋ฒ ํธ์ถ๋๋ ๋ฉ์๋์ผ.map = (Map<String, Controller>) application.getAttribute("map"); ์ฝ๋๋ฅผ ํตํด์ HandlerMappingListener๊ฐ Application ์์ญ์ ์ ์ฅํด๋ map ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ DispatcherServlet์ map ๋ณ์์ ํ ๋นํด. ์ด์ DispatcherServlet์ ์ด๋ค ์์ฒญ ํค์ ์ด๋ค Controller๊ฐ ์ฐ๊ฒฐ๋์ด ์๋์ง ์ ์ ์๊ฒ ๋ ๊ฑฐ์ผ.service(HttpServletRequest request, HttpServletResponse response) ๋ฉ์๋: ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ค์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ํธ์ถ๋๋ ๋ฉ์๋์ผ. ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํต์ฌ ๋ก์ง์ด ์ฌ๊ธฐ์ ๋ด๊ฒจ ์์ด.request.getParameter("key"); ์ฝ๋๋ฅผ ์ด์ฉํด์ ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ์์ฒญ ํ๋ผ๋ฏธํฐ ์ค์์ "key"๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ๊ฐ์ ์ฝ์ด์. ์ด ๊ฐ์ด ๋ฐ๋ก actionMapping.properties์ ์ ์๋ ์์ฒญ ํค๊ฐ ๋๋ ๊ฑฐ์ผ. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ "๊ฒ์" ๋ฒํผ์ ๋๋ ๋ค๋ฉด "select"๋ผ๋ ๊ฐ์ด ๋์ด์ฌ ์ ์๊ฒ ์ง.Controller con = map.get(key); ์ฝ๋๋ฅผ ์ด์ฉํด์ DispatcherServlet์ด ๊ฐ์ง๊ณ ์๋ map์์ ์ฝ์ด์จ ์์ฒญ ํค์ ํด๋นํ๋ Controller ๊ฐ์ฒด๋ฅผ ์ฐพ์. ์ ํ๋ฒํธ๋ถ์์ ์ด๋ฆ์ ์ฐพ์์ ์ค์ ์ ํ๋ฒํธ๋ฅผ ์ป๋ ๊ฒ๊ณผ ๋น์ทํด.ModelAndView andView = con.handleRequest(); (์ด๋ฏธ์ง 1) ๋๋ ModelAndView andView = con.process(request, response); (์ด๋ฏธ์ง 2) ์ฝ๋๋ฅผ ํตํด์ ์ฐพ์ Controller ๊ฐ์ฒด์ ํน์ ๋ฉ์๋ (handleRequest ๋๋ process)๋ฅผ ํธ์ถํด์ ์ค์ ์์ฒญ ์ฒ๋ฆฌ๋ฅผ ์์ํด. ์ด๋ HttpServletRequest์ HttpServletResponse ๊ฐ์ฒด๋ฅผ ํจ๊ป ๋๊ฒจ์ค์ Controller๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด๋ฅผ ํ์ฉํ๊ณ ์๋ต์ ๋ง๋ค ์ ์๋๋ก ํ๋ ๊ฑฐ์ผ. ์ด ๋ฉ์๋๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ณด์ฌ์ค View ์ ๋ณด๋ฅผ ๋ด์ ModelAndView ๊ฐ์ฒด๋ฅผ ๋ฐํํ ๊ฒ์ผ๋ก ์์๋ผ.ํต์ฌ: DispatcherServlet์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์์ฒญ ํค๋ฅผ ๋ถ์ํด์ ๋ฏธ๋ฆฌ ์ค๋น๋ map์์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ Controller๋ฅผ ์ฐพ๊ณ , ๊ทธ Controller์๊ฒ ์ค์ ์์
์ ๋งก๊ธฐ๋ ์ญํ ์ ํด.
์ด๋ฏธ์ง 1๊ณผ 2์ ์ฐจ์ด์ :
๋ ์ด๋ฏธ์ง์ DispatcherServlet ์ฝ๋๋ฅผ ๋ณด๋ฉด Controller์ ๋ฉ์๋ ์ด๋ฆ์ด ์ฝ๊ฐ ๋ค๋ฅธ ๊ฒ์ ํ์ธํ ์ ์์ด. ์ด๋ฏธ์ง 1์์๋ con.handleRequest() ๋ผ๊ณ ๋์ด ์๊ณ , ์ด๋ฏธ์ง 2์์๋ con.process(request, response) ๋ผ๊ณ ๋์ด ์์ง. ์ด๋ ๊ฐ์ ๋ด์ฉ์ด ์
๋ฐ์ดํธ๋๊ฑฐ๋ ๋ค๋ฅธ ํจํด์ ์ค๋ช
ํ๊ธฐ ์ํ ์ฐจ์ด์ผ ์ ์์ด. ์ค์ํ ๊ฑด DispatcherServlet์ด ์์ฒญ์ ๋ง๋ Controller๋ฅผ ์ฐพ์์ ํน์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ค์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ฒ ํ๋ค๋ ์ ์ ๋์ผํด.
๊ฒฐ๋ก ์ ์ผ๋ก, ์ด ๊ฐ์ ๋ ธํธ๋ DispatcherServlet ๊ธฐ๋ฐ MVC ํ๋ ์์ํฌ์ ํต์ฌ์ ์ธ ๋์ ๋ฐฉ์์ ์์ฃผ ์ ๋ณด์ฌ์ฃผ๊ณ ์์ด.
HandlerMappingListener): ์์ฒญ ํค์ Controller ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋งคํํด์ Application ์์ญ์ ์ ์ฅํด ๋๋ค.DispatcherServlet): ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ๋ฐ์ผ๋ฉด ์์ฒญ ํค๋ฅผ ์ด์ฉํด์ ๋ฏธ๋ฆฌ ๋งคํํด๋ Controller๋ฅผ ์ฐพ์์ ์ค์ ์ฒ๋ฆฌ๋ฅผ ์์ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์๋ต์ ์์ฑํ๋ค.์ด ๊ณผ์ ์ ํตํด ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์ค์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๊ฐ ์์ฒญ์ ๋ง๋ Controller์๊ฒ ์ฑ ์์ ๋ถ๋ดํ๋ ๊น๋ํ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์๋ ๊ฑฐ์ผ.