์คํ๋ง MVC ์ ์ฒด ๊ตฌ์กฐ
์ง๊ธ๊ป ๋ง๋ค์๋ ํ๋ ์ ์ํฌ <-> ์คํ๋ง MVC
- FrontController - DispatcherServlet
- HandlerMappingMap - HandlerMapping
- MyHandlerAdapter - HandlerAdapter
- ModelView - ModelAndView
- ViewResolver - ViewResolver
- MyView - View
DispatcherServlet
DispacherServlet ๋ ๋ถ๋ชจ ํด๋์ค์์ HttpServlet ์ ์์ ๋ฐ์์ ์ฌ์ฉํ๊ณ , ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค.
์คํ๋ง ๋ถํธ๋ DispatcherServlet๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก์ ๋ํด์ ๋งคํํ๋ค.
์์ฒญ์ ํ๋ฆ
DispatcherServlet์ด ํธ์ถ๋๋ฉด service()
๊ฐ ํธ์ถ๋๋ค.
์ต์ข
์ ์ผ๋ก๋ DispatcherServlet.doDispatch()` ๊ฐ ํธ์ถ๋๋ค.
doDispatch()
DispatcherServlet์ doDispatch()์ ์ฃผ์ ๋ถ๋ถ๋ค์ ์ดํด๋ณด์!
- ModelAndView
- getHandler() : ํธ๋ค๋ฌ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ํธ๋ค๋ฌ๊ฐ ์์ผ๋ฉด 404๋ก ์ ํ ์ ํ๋ค.
- getHandlerAdapter() : ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
- ํธ๋ค๋ฌ ์ด๋ํฐ๋ก ํธ๋ค๋ฌ ํธ์ถํ๊ณ ModelAndView ๋ฐํ
- view ๋ ๋๋ง ํธ์ถ
- ViewResolver๋ฅผ ํตํด์ view๋ฅผ ์ฐพ์ ๋ฐํ
- View ๋ ๋๋ง
์คํ๋ง MVC ๊ตฌ์กฐ
- ํธ๋ค๋ฌ ์กฐํ : ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์์ฒญ URL์ ๋งคํ๋ ํธ๋ค๋ฌ ์กฐํ
- ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ : ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
- ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
- ํธ๋ค๋ฌ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ ์คํ
- ModelAndView ๋ฐํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋ค๋ฌ๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView๋ก ๋ณํํด์ ๋ฐํ
- viewResolver ํธ์ถ : JSP์ ๊ฒฝ์ฐ
InternalResourceViewResolver
๊ฐ ์๋์ผ๋ก ๋ฑ๋ก๋๊ณ ์ฌ์ฉ๋จ - view ๋ฐํ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ ๋ทฐ์ ๋
ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ ๋ ๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด ๋ฐํ
- JSP์ ๊ฒฝ์ฐ InternalResourceViewResolver(JstlView) ๋ฅผ ๋ฐํํ๊ณ ๋ด๋ถ์ forward() ๋ก์ง์ด ์๋ค.
- ๋ทฐ ๋ ๋๋ง : ๋ทฐ๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ค.
๊ฐ์ฅ ํฐ ์ฅ์ ์ DispatcherServlet ์ฝ๋์ ๋ณ๊ฒฝ ์์ด ์ํ๋ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅํ ์ ์๋ค.
๋๋ถ๋ถ ํ์ฅ ๊ฐ๋ฅํ๋๋ก ์ธํฐํ์ด์ค๋ก ์ ๊ณตํ๋ค.
ํ์ง๋ง ์ฌ์ค ์ฐ๋ฆฌ๊ฐ ํ์ฅํ ์ปจํธ๋กค๋ฌ๋ ๊ฑฐ์ ์๋ค.
ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ
๊ณผ๊ฑฐ Controller ์ธํฐํ์ด์ค
public interface Controller {
ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}
@Component
: โโ/springmvc/old-controller: ๋ผ๋ ์ด๋ฆ์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก- ๋น์ ์ด๋ฆ์ผ๋กURL์ ๋งคํ
์ ์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถ๋๋ ๋ฐฉ์
- HandlerMapping(ํธ๋ค๋ฌ ๋งคํ)
- ํธ๋ค๋ฌ ๋งคํ์์ ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์ ์์ด์ผ ํจ ex) ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ์ ์๋ ํธ๋ค๋ฌ ๋งคํ ํ์
- HandlerAdapter(ํธ๋ค๋ฌ ์ด๋ํฐ)
- ํธ๋ค๋ฌ ๋งคํ์ ํตํด์ ์ฐพ์ ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ํ์ ex) Controller ์ธํฐํ์ด์ค๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ฐพ๊ณ ์คํํด์ผ ํจ
- ์คํ๋ง์ ์ด๋ฏธ ํ์ํ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๋๋ถ๋ถ ๊ตฌํํด๋์๋ค.
์คํ๋ง ๋ถํธ๊ฐ ์๋์ผ๋ก ๋ฑ๋กํ๋ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ
- HandlerMapping
- RequestMappingHandlerMapping : ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ - ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์
- BeanNameUrlHandlerMapping : ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค. (์ ์์ ์ @Component)
- HandlerAdapter
- RequestMappingHandlerAdapter : ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ - ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์
- HttpRequestHandlerAdapter : HttpRequestHandler ์ฒ๋ฆฌ
- SimpleControllerHandlerAdapter : Controller ์ธํฐํ์ด์ค(์ ๋ ธํ ์ด์ X, ๊ณผ๊ฑฐ์ ์ฌ์ฉ) ์ฒ๋ฆฌ
1. ํธ๋ค๋ฌ ๋งคํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
HandlerMapping ์ ์์๋๋ก ์คํํด์, ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
๋น์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ ๋น์ด๋ฆ์ผ๋กํธ๋ค๋ฌ๋ฅผ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ OldController ๋ฅผ ๋ฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
HandlerAdapter ์ supports() ๋ฅผ ์์๋๋ก ํธ์ถํ๋ค. SimpleControllerHandlerAdapter ๊ฐ Controller ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด ๋๋ค.
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
DispatcherServlet์ด ์กฐํํ SimpleControllerHandlerAdapter ๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค๋ค.
SimpleControllerHandlerAdapter ๋ ํธ๋ค๋ฌ์ธ OldController ๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
HttpRequestHandler
public interface HttpRequestHandler {
void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
- ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ฅ ์ ์ฌํ ํํ์ ํธ๋ค๋ฌ
1. ํธ๋ค๋ฌ ๋งคํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
HandlerMapping ์ ์์๋๋ก ์คํํด์, ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
๋น์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ผํ๊ธฐ ๋๋ฌธ์ ๋น์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping ๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler ๋ฅผ ๋ฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
HandlerAdapter ์ supports() ๋ฅผ ์์๋๋ก ํธ์ถํ๋ค. HttpRequestHandlerAdapter ๊ฐ HttpRequestHandler ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด ๋๋ค.
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
DispatcherServlet์ด ์กฐํํ HttpRequestHandlerAdapter ๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค๋ค.
HttpRequestHandlerAdapter ๋ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler ๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
๋ทฐ ๋ฆฌ์กธ๋ฒ
application-properties
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
์คํ๋ง ๋ถํธ๋ InternalResourceViewResolver
๋ผ๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์๋์ผ๋ก ๋ฑ๋กํ๋ค.
์ด๋ application.properties
์ ๋ฑ๋กํ spring.mvc.view.prefix
, spring.mvc.view.suffix
์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํด์ ๋ฑ๋กํ๋ค.
์คํ๋ง ๋ถํธ๊ฐ ์๋์ผ๋ก ๋ฑ๋กํ๋ ๋ทฐ ๋ฆฌ์กธ๋ฒ
- BeanNameViewResolver : ๋น ์ด๋ฆ์ผ๋ก ๋ทฐ๋ฅผ ์ฐพ์์ ๋ฐํ
- InternalResourceViewResolver : JSP๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ทฐ๋ฅผ ๋ฐํ
1. ํธ๋ค๋ฌ ์ด๋ํฐ ํธ์ถ
ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ํตํด ๋
ผ๋ฆฌ ๋ทฐ ์ด๋ฆ์ ํ๋
2. ViewResolver ํธ์ถ
new-form ์ด๋ผ๋ ๋ทฐ ์ด๋ฆ์ผ๋ก viewResolver๋ฅผ ์์๋๋ก ํธ์ถ InternalResourceViewResolver ๊ฐ ํธ์ถ๋จ
3. InternalResourceViewResolver
๋ด๋ถ์์ ์์์ ์ฐพ์ ์ ์์์ ์๋ฏธํ๋ค.
์ด ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ InternalResourceView ๋ฅผ ๋ฐํ
4. ๋ทฐ - InternalResourceView
InternalResourceView ๋ JSP์ฒ๋ผ ํฌ์๋ forward() ๋ฅผ ํธ์ถํด์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ
5. view.render()
view.render() ๊ฐ ํธ์ถ๋๊ณ InternalResourceView ๋ forward() ๋ฅผ ์ฌ์ฉํด์ JSP๋ฅผ ์คํํ๋ค
Thymeleaf ๋ทฐ ํ
ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ThymeleafViewResolver ๋ฅผ ๋ฑ๋กํด์ผ ํ๋ค.
์ต๊ทผ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ถ๊ฐํ๋ฉด ์คํ๋ง ๋ถํธ๊ฐ ์ด๋ฐ ์์
๋ ๋ชจ๋ ์๋ํํด์ค๋ค.