๐ DispatcherServlet ์๋ธ๋ฆฟ
- DispatcherServlet ๋ ๋ถ๋ชจ ํด๋์ค์์ HttpServlet์ ์์ ๋ฐ์์ ์ฌ์ฉํ๊ณ , ์๋ธ๋ฆฟ์ผ๋ก ๋์ํ๋ค.
- DispatcherServlet -> FrameworkServlet -> HttpServletBean -> HttpServlet
- ์คํ๋ง ๋ถํธ๋ DispatcherServlet์ ์๋ธ๋ฆฟ์ผ๋ก ์๋์ผ๋ก ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก(urlPatterns="/")์ ๋ํด์ ๋งคํํ๋ค.
์ฐธ๊ณ : ๋ ์์ธํ ๊ฒฝ๋ก๊ฐ ์ฐ์ ์์๊ฐ ๋๋ค.
์์ฒญ ํ๋ฆ
- ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ฉด HttpServlet์ด ์ ๊ณตํ๋ service()๊ฐ ํธ์ถ๋๋ค.
- ์คํ๋ง MVC๋ DispatcherServlet์ ๋ถ๋ชจ์ธ FrameworkServlet์์ service()๋ฅผ ์ค๋ฒ๋ผ์ด๋ ํด๋์๋ค.
- FrameworkServlet.service()๋ฅผ ์์์ผ๋ก ์ฌ๋ฌ ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด์ DispatcherServlet.doDispatch()๊ฐ ํธ์ถ๋๋ค.
๋์ ์์
1. ํธ๋ค๋ฌ ์กฐํ : ํธ๋ค๋ฌ ๋งคํ์ ํตํด ์์ฒญ URL์ ๋งคํ๋ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ์กฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ : ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์กฐํํ๋ค.
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์คํํ๋ค.
4. ํธ๋ค๋ฌ ์คํ : ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ค์ ํธ๋ค๋ฌ๋ฅผ ์คํํ๋ค.
5. ModelAndView ๋ฐํ : ํธ๋ค๋ฌ ์ด๋ํฐ๋ ํธ๋ค๋ฌ๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView๋ก ๋ณํํด์ ๋ฐํํ๋ค.
6. viewResolver ํธ์ถ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ฐพ๊ณ ์คํํ๋ค.
7. View ๋ฐํ : ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ๋ทฐ์ ๋ ผ๋ฆฌ ์ด๋ฆ์ ๋ฌผ๋ฆฌ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ณ , ๋๋๋ง ์ญํ ์ ๋ด๋นํ๋ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
8. ๋ทฐ ๋ ๋๋ง : ๋ทฐ๋ฅผ ํตํด์ ๋ทฐ๋ฅผ ๋ ๋๋ง ํ๋ค.
์ธํฐํ์ด์ค ์ดํด๋ณด๊ธฐ
- ์คํ๋ง MVC์ ํฐ ๊ฐ์ ์ DispatcherServlet ์ฝ๋์ ๋ณ๊ฒฝ ์์ด, ์ํ๋ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ํ์ฅํ ์ ์๋ค๋ ์ ์ด๋ค.
- ์ฃผ์ ์ธํฐํ์ด์ค ๋ชฉ๋ก
- ํธ๋ค๋ฌ ๋งคํ : org.springframework.web.servlet.HandlerMapping
- ํธ๋ค๋ฌ ์ด๋ํฐ : org.springframework.web.servlet.HandlerAdapter
- ๋ทฐ ๋ฆฌ์กธ๋ฒ : org.springframework.web.servlet.ViewResolver
- ๋ทฐ : org.springframework.web.servlet.View
๐ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ
Controller ์ธํฐํ์ด์ค
๊ณผ๊ฑฐ ๋ฒ์ ์คํ๋ง ์ปจํธ๋กค๋ฌ org.springframework.web.servlet.mvc.Controller
public interface Controller {
ModelAndView handlerRequest (HttpServletRequest request, HttpServletResponse response) throws Exception;
}
๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- @Component : ์ด ์ปจํธ๋กค๋ฌ๋ /springmvc/old-controller ๋ผ๋ ์ด๋ฆ์ ์คํ๋ง ๋น์ผ๋ก ๋ฑ๋ก๋์๋ค.
- ๋น์ ์ด๋ฆ์ผ๋ก URL ๋งคํํ ๊ฒ์ด๋ค.
ํด๋น ์ปจํธ๋กค๋ฌ๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ํธ์ถ๋๋๊ฑธ๊น?
์ด ์ปจํธ๋กค๋ฌ๊ฐ ํธ์ถ๋๋ ค๋ฉด ๋ค์ 2๊ฐ์ง๊ฐ ํผ๋ฃกํ๋ค.
- HandlerMapping(ํธ๋ค๋ฌ ๋งคํ)
- ํธ๋ค๋ฌ ๋งคํ์์ ์ด ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์ ์์ด์ผํ๋ค.
- ์ ) ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์ ์ ์๋ ํธ๋ค๋ฌ ๋งคํ์ด ํ์ํ๋ค.
- HandlerAdapter(ํธ๋ค๋ฌ ์ด๋ํฐ)
- ํธ๋ค๋ฌ ๋งคํ์ ํตํด์ ์ฐพ์ ํธ๋ค๋ฌ๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ํ์ํ๋ค.
- ์ ) Controller ์ธํฐํ์ด์ค๋ฅผ ์คํํ ์ ์๋ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ฐพ๊ณ ์คํํด์ผํ๋ค.
์คํ๋ง์ ์ด๋ฏธ ํ์ํ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๋๋ถ๋ถ ๊ตฌํํด๋์๋ค. ๊ฐ๋ฐ์๊ฐ ์ง์ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ๋ง๋๋ ์ผ์ ๊ฑฐ์ ์๋ค.
์คํ๋ง๋ถํธ๊ฐ ์๋ ๋ฑ๋กํ๋ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ (*์ค์ ๋ถ๋ถ ์์ฃผ๋ก๋ง ์ค๋ช )
HandlerMapping
0 = RequestMappingHandlerMapping : ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ
1 = BeanNameUrlHandlerMapping : ์คํ๋ง ๋น์ ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
HandlerAdapter
0 = RequestMappingHandlerAdapter : ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ์ธ @RequestMapping์์ ์ฌ์ฉ
1 = HttpRequestHandlerAdapter : HttpRequestHandler ์ฒ๋ฆฌ
2 = SimpleControllerHandlerAdapter : Controller ์ธํฐํ์ด์ค (์ ๋ ธํ ์ด์ X, ๊ณผ๊ฑฐ์ ์ฌ์ฉ)
ํธ๋ค๋ฌ ๋งคํ๋, ํธ๋ค๋ฌ ์ด๋ํฐ๋ ๋ชจ๋ ์์๋๋ก ์ฐพ๊ณ ๋ง์ฝ ์์ผ๋ฉด ๋ค์ ์์๋ก ๋์ด๊ฐ๋ค.
1. ํธ๋ค๋ฌ ๋งคํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
1. HandlerMapping ์ ์์๋๋ก ์คํํด์ ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
2. ์ด ๊ฒฝ์ฐ ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ๊ทธ๋๋ก ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping ๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ OldController๋ฅผ ๋ฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
1. HandlerAdapter์ supports()๋ฅผ ์์๋๋ก ํธ์ถํ๋ค.
2. SimpleControllerHandlerAdapter ๊ฐ Controller ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด๋๋ค.
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
1. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์กฐํํ SimpleControllerHandlerAdapter๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค๋ค.
2. SimpleControllerHandlerAdapter ๋ ํธ๋ค๋ฌ์ธ OldController๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์ ๋ฆฌ OldController ํธ๋ค๋ฌ ๋งคํ, ์ด๋ํฐ
OldController๋ฅผ ์คํํ๋ฉด์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ ๋ค์๊ณผ๊ฐ๋ค.
- HandlerMapping = BeanNameUrlHandlerMapping
- HandlerAdapter = SimpleControllerHandlerAdapter
๊ทธ๋ ๋ค๋ฉด !!
์ ๊ธฐ์ HttpRequestHandler๋ ๋ญ๊น?
๊ฒฐ๋ก ๋ถํฐ ๋งํ๋ฉด HttpRequestHandler ๋ Controller์ธํฐํ์ด์ค๊ฐ ์๋ ๋ค๋ฅธ ํธ๋ค๋ฌ์ธ๋ฐ, ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ฅ ์ ์ฌํ ํํ์ ํธ๋ค๋ฌ ์ด๋ค.
public interface HttpRequestHandler {
void handlerRequest (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
}
๊ฐ๋จํ๊ฒ ๊ตฌํํด๋ณด์.
1. ํธ๋ค๋ฌ ๋งคํ์ผ๋ก ํธ๋ค๋ฌ ์กฐํ
1. HandlerMapping ์ ์์๋๋ก ์คํํด์ ํธ๋ค๋ฌ๋ฅผ ์ฐพ๋๋ค.
2. ์ด ๊ฒฝ์ฐ ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฆ ๊ทธ๋๋ก ๋น ์ด๋ฆ์ผ๋ก ํธ๋ค๋ฌ๋ฅผ ์ฐพ์์ฃผ๋ BeanNameUrlHandlerMapping ๊ฐ ์คํ์ ์ฑ๊ณตํ๊ณ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler๋ฅผ ๋ฐํํ๋ค.
2. ํธ๋ค๋ฌ ์ด๋ํฐ ์กฐํ
1. HandlerAdapter์ supports()๋ฅผ ์์๋๋ก ํธ์ถํ๋ค.
2. HttpRequestHandlerAdapter ๊ฐ Controller ์ธํฐํ์ด์ค๋ฅผ ์ง์ํ๋ฏ๋ก ๋์์ด๋๋ค.
3. ํธ๋ค๋ฌ ์ด๋ํฐ ์คํ
1. ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ์กฐํํ HttpRequestHandlerAdapter ๋ฅผ ์คํํ๋ฉด์ ํธ๋ค๋ฌ ์ ๋ณด๋ ํจ๊ป ๋๊ฒจ์ค๋ค.
2. HttpRequestHandlerAdapter ๋ ํธ๋ค๋ฌ์ธ MyHttpRequestHandler๋ฅผ ๋ด๋ถ์์ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
์ ๋ฆฌ MyHttpRequestHandler ํธ๋ค๋ฌ ๋งคํ, ์ด๋ํฐ
OldController๋ฅผ ์คํํ๋ฉด์ ์ฌ์ฉ๋ ๊ฐ์ฒด๋ ๋ค์๊ณผ๊ฐ๋ค.
- HandlerMapping = BeanNameUrlHandlerMapping
- HandlerAdapter = HttpRequestHandlerAdapter
์ฐธ๊ณ : @RequestMapping
๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ํธ๋ค๋ฌ ๋งคํ๊ณผ ํธ๋ค๋ฌ ์ด๋ํฐ๋
RequestMappingHanlderMapping,
RequestMappingHandlerAdapter์ด๋ค.
@RequestMapping์ ์๊ธ์๋ฅผ ๋ฐ์ ๋ง๋ ์ด๋ฆ์ธ๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ์ง๊ธ ์คํ๋ง์์ ์ฃผ๋ก ์ฌ์ฉํ๋ ์ ๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ํ๋ ๋งคํ๊ณผ ์ด๋ํฐ์ด๋ค. ์ค๋ฌด์์๋ ๋๋ถ๋ถ ์ด ๋ฐฉ์์ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ๋ค.
'์ด๋ก > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TEST] ์คํ๋ง์์์ TEST, ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ์ TEST (0) | 2021.10.29 |
---|---|
[Spring Boot] Spring Security (0) | 2021.08.15 |
[Spring] ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์์กด๊ด๊ณ ์๋ ์ฃผ์ ์์ํ๊ธฐ (0) | 2021.08.01 |
[Spring] @Configuration๊ณผ ๋ฐ์ดํธ์ฝ๋ ์กฐ์ (0) | 2021.07.26 |
[Spring] BeanFactory์ ApplicationContext / ์คํ๋ง ์ปจํ ์ด๋ (0) | 2021.07.25 |