Spring MVC์ ํต์ฌ์ DispatcherServlet์ด๋ค.
๋ฐ๋ผ์ DispatcherServlet์ ๋ถ๋ชจ์ธ Servlet๋ถํฐ ์์๋ณผ ๊ฒ์ด๋ค.
Servlet
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ์๋ธ๋ฆฟ(Servlet)์ด๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ํ ์ธํฐํ์ด์ค์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์๋ธ๋ฆฟ์ ์ ์๊ธฐ๊ฒ ๋์์๊น?
์ ์ ํ์ด์ง๋ง ๋ฐํํ๋ ์ด๊ธฐ ์น ์๋ฒ

์ด๊ธฐ ์น ์๋ฒ๋ ์ด๋ค ์ฌ์ฉ์๊ฐ ์์ฒญํ๋ ๋ณํจ์ด ์๋ ์ ์ ์ธ ํ์ด์ง(์ด๋ฏธ์ง, html, css)๋ง ๋ฐํํ๋ค.
ํ์ง๋ง ์ ์ฐจ ์ฌ์ฉ์๋ ๋ง์ถคํ ํ์ด์ง(ex. ๋ก๊ทธ์ธ ํ ์ฌ์ฉ์๋ฅผ ์ธ์ง)์ ์ํธ ์์ฉ์ ์ธ ์์(ex. ์จ๋ผ์ธ ์ผํ ์ฌ์ดํธ์์ ์ฌ์ฉ์๊ฐ ์ ํ์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ณ ์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๋ ํ์)๋ฅผ ์ํ๊ฒ ๋์๊ณ , ์ด๋ฅผ ๋ง์กฑ์ํค๊ธฐ ์ํด WAS๊ฐ ๋์ค๊ฒ ๋์๋ค.
์ธ์์ ๋ด์ฉ์ ๋ง๊ฒ ๋์ ์ธ ํ์ด์ง๋ฅผ ๋ฐํํ๋ Web Application Server

WAS๋ Web Server์ Web Container์ ๊ธฐ๋ฅ์ ํตํฉ์ ์ผ๋ก ์ ๊ณตํ๋ ์ํํธ์จ์ด์ด๋ค.
WAS์ ๋ฑ์ฅ ์ดํ ์น ์๋ฒ๋ ์ ์ ์ธ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๊ณ , ๋์ ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋(์น ์ปจํ ์ด๋)๋ก ์์ฒญ์ ์ ๋ฌํ๊ฒ ๋๋ค.
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋, ๋ง ๊ทธ๋๋ก ์๋ธ๋ฆฟ ๊ตฌํ์ฒด๋ค์ ๋ด๊ณ ์๋ '์ปจํ ์ด๋'์ด๋ค.
์์ธํ ๋ด์ฉ์ ์๋์์ ์ดํด๋ณด์.
Servlet์ ๋์ ๊ณผ์ ๊ณผ ์๋ช ์ฃผ๊ธฐ

1. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ค์ ํ์ผ(Web.xml)์ ์ฐธ๊ณ ํ์ฌ ์ด๋ค ์๋ธ๋ฆฟ์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ค.
2. ํด๋น ์๋ธ๋ฆฟ ์ธ์คํด์ค์ ์กด์ฌ ์ ๋ฌด๋ฅผ ํ์ธํ์ฌ ์์ผ๋ฉด init() ๋ฉ์๋๋ฅผ ํธ์ถํด ์๋ธ๋ฆฟ์ ์ด๊ธฐํํ๊ณ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
3. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ๊ทธ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ์๋ก์ด ์ค๋ ๋๋ฅผ ํ๋์ฉ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ์ค๋ ๋์์ service() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค. (์ฆ, ํ๋์ ์ค๋ ๋๊ฐ ํ๋์ ๋ฆฌํ์คํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ค.)
3-1. service() ๋ฉ์๋ ๋ด์์๋ HTTP ๋ฉ์๋์ ๋ฐ๋ผ doGet(), doPost() ๋ฑ ์ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ก ๋ถ๊ธฐ๋๋ค.
3-2. ๊ฐ๋ฐ์๋ ์ด ๋ฉ์๋ ๋ด๋ถ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค.
4. ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋์ ๋ค๋ผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ Servlet Request, Servlet Response ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ค.
5. ์๋ต ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด destroy() ๋ฉ์๋๋ฅผ ํธ์ถํด ์๋ธ๋ฆฟ ์ธ์คํด์ค๋ฅผ ์๋ฉธ์ํจ๋ค.
servlet์ ์ค์ ํ์ผ

์๋ธ๋ฆฟ์ ๋ฑ๋กํ๊ธฐ ์ํด์๋ ๋ฑ๋กํ ์๋ธ๋ฆฟ์ ์ค์ ํ์ผ์ ๋ช ์ํด์ผ ํ๋ค.
์ค์ ํ์ผ์ ์ ์ฌ์ง์ฒ๋ผ ์๊ฒผ๋๋ฐ, ๊ฐ ์์์ ์๋ฏธ๋ ์๋์ ๊ฐ๋ค.
- <servlet> ์๋ฆฌ๋จผํธ: ์๋ธ๋ฆฟ์ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค
- ์ด ์๋ธ๋ฆฟ์ ์ด๋ฆ์ HelloServlet์ด๋ค.
- ์ด ์๋ธ๋ฆฟ์ ๋ํ ๊ตฌํ์ servlet ํจํค์ง ๋ด์ ์๋ HelloServlet ํด๋์ค์ด๋ค.
- <servlet-mapping> ์๋ฆฌ๋จผํธ: ์๋ธ๋ฆฟ๊ณผ URL ๋งคํ ๊ด๊ณ๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
- /hello ๋ก ์์ํ๋ ๋ชจ๋ ์์ฒญ์
- HelloServlet ์ด๋ผ๋ ์๋ธ๋ฆฟ์ผ๋ก ๋ผ์ฐํ ํ๊ฒ ๋ค.
Servlet์ ์ฌ์ฉํ ์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์กฐ

๋ฐ๋ผ์ ์๋ธ๋ฆฟ ๊ธฐ๋ฐ์ ์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋,
url ๋งคํ์ ์ํด ๋ชจ๋ ์๋ธ๋ฆฟ์ web.xml์ ์ง์ ๋ฑ๋กํด์ผ ํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ์ฌ๋ฌ servlet ๊ตฌํ์ฒด๊ฐ ์ธ์คํด์คํ ๋์๋ค.
(์ดํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์ธ์คํด์คํ๋ ์๋ธ๋ฆฟ ์ค ์ ์ ํ ์๋ธ๋ฆฟ์ด ์ ํ๋์ด ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.)
ํ์ง๋ง ์ด๋ฌํ ๋ฐฉ์์, ๋ชจ๋ ์๋ธ๋ฆฟ์ด ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ ์ ์ธ์คํด์คํ๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ฏ๋ก, ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ด ๋ฐ์ํ ์ ์๋ค.
์์ ์๋ธ๋ฆฟ์ "์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ๋ ํ์ํ ์ธํฐํ์ด์ค"๋ผ๊ณ ํ๋ค.
์ด ๋ง๋ก ๋ฏธ๋ฃจ์ด ๋ณด์์ ๋ Spring MVC๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ ๊ฑฐ๋ผ๋ ์ง์์ ํ ์ ์์ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด Spring MVC๋ Servlet์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
DispatcherServlet
Spring MVC๋ Dispatcher Servlet ์ด๋ผ๋ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ค.


์ผ์ชฝ์ด Spring MVC๊ฐ ์ฌ์ฉํ๋ DispatcherServlet์ด๊ณ , ์ค๋ฅธ์ชฝ์ด Servlet์ด๋ค.
Dispatcher Servlet์ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ์ค์์์ ๋จ์ผ ์ง์ ์ ์ผ๋ก ๋ฐ์๋ค์ด๊ณ , ์์ฒญ์ ์ ์ ํ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ก ๋ผ์ฐํ ํ๋ค.
(Servlet์ ๊ฐ ์๋ธ๋ฆฟ์ด ์์ฒด์ ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ง์ ์ ์ ๊ฐ์ก๋ค.)
์ด๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ผ๋ก FrontController ํจํด์ ์ฌ์ฉํ๋ค.

๋ฐ๋ผ์ ์ค๋ณต ์ฝ๋๋ฅผ ๋ฐฉ์งํ๊ณ , ๋งค ์์ฒญ๋ง๋ค ์๋ก์ด ์๋ธ๋ฆฟ ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ ์ด๊ธฐํํ๋ ์ค๋ฒํค๋๋ฅผ ๊ฐ์์ํจ๋ค.
DispatcherServlet์ ๋ถ๋ชจ

DispatcherServlet์ ๋ถ๋ชจ ํด๋์ค์์ HttpServlet์ ์์ ๋ฐ์์ ์ฌ์ฉํ๋ค.
์ด ๋ง์ DispatcherServlet๋ Servlet์ด๋ผ๋ ๋ง์ด๋ค.
๋ฐ๋ผ์ ์๋ธ๋ฆฟ์ผ๋ก ๋ฑ๋กํ๋ ค๋ฉด ์ค์ ํ์ผ(Web.xml)์ ๋ฑ๋กํด์ผํ๋๋ฐ, ์คํ๋ง ๋ถํธ๋ ์๋์ผ๋ก DispatcherServlet์ ๋ฑ๋กํ๋ฉด์ ๋ชจ๋ ๊ฒฝ๋ก("/")์ ๋ํด์ ๋งคํํ๋ค.

Spring MVC์ ๊ตฌ์กฐ์ ์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ
Spring MVC์ ํต์ฌ์ธ DispatcherServlet์ ๋ํด ๋จผ์ ์ดํด๋ณด์์ผ๋, ์ด์ ์ ์ฒด์ ์ธ ๊ตฌ์กฐ์ ํ๋ฆ์ ๋ํด ํ์ตํ์.

1. ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ํด DispatcherServlet์ด ์์ ํ๋ค.
2. HandlerMapping์ ํตํด ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ ํํ๋ค.
3. ์ ํํ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํ ์ ์๋ HandlerAdapter๋ฅผ ์ ํํ๋ค.
4. ์ ํํ HandlerAdapter๊ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์คํํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ModelAndView ํํ๋ก ๋ฐํํ๋ค.
5. ViewResolver๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ ํํ ๋ทฐ ์ด๋ฆ์ ๋ฐ์์ ์ค์ ๋ทฐ๋ฅผ ์ ํํ๋ค.
6. ์ ํ๋ ๋ทฐ๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๊ณตํ model ๋ฐ์ดํฐ์ ํจ๊ป ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก๋๋ค.
HandlerMapping
HandlerMapping์ ํด๋ผ์ด์ธํธ์ ์์ฒญ URL์ ์ด๋ค ์ปจํธ๋กค๋ฌ๊ฐ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ค.
HandlerMapping์๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์๋๋ฐ, ๊ฐ๊ฐ์ ํน์ ํ ๋งคํ ์ ๋ต์ ์ฌ์ฉํ์ฌ URL๊ณผ ์ปจํธ๋กค๋ฌ๋ฅผ ๋งคํํ๋ค.
1) RequestMappingHandlerMapping: Spring 3.1 ๋ฒ์ ์ดํ๋ถํฐ ์ฌ์ฉ๋๋ ์ฃผ์ HandlerMapping ์ค ํ๋๋ก @RequestMapping ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํ ๋งคํ์ ์ฒ๋ฆฌํ๋ค.
2) BeanNameUrlHandlerMapping: ์คํ๋ง ๋น์ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก URL ํจํด์ ๋งคํํ๋ค.
HandlerAdapter
HandlerMapping์ ํตํด ์ฐพ์ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๋ฅผ ์คํํ๋ค.
๊ทธ๋ฆฌ๊ณ ํธ๋ค๋ฌ(์ปจํธ๋กค๋ฌ)๊ฐ ๋ฐํํ๋ ์ ๋ณด๋ฅผ ModelAndView๋ก ๋ณํํด์ ๋ฐํํ๋ค.
ViewResolver
๋ทฐ์ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ์ค์ ๋ทฐ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.
๋ทฐ ๋ฆฌ์กธ๋ฒ๊ฐ ๊ฒฐ์ ํ ๋ทฐ ๊ฐ์ฒด๋ ์ปจํธ๋กค๋ฌ๊ฐ ์ ๋ฌํ ๋ชจ๋ธ ๋ฐ์ดํฐ์ ํจ๊ป ๋ ๋๋ง๋์ด ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ๋๋ค.
1) InternalResourceViewResolver: JSP๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ ๋ทฐ๋ฅผ ๋ฐํํ๋ค.
์๋์ฒ๋ผ application.properties์ JSP ํ์ผ์ ์์น(prefix)์ ํ์ฅ์(suffix) ์ ๋ณด๋ฅผ ๋ฑ๋กํ ๋ค, jsp ํ์ผ์ ์์ฑํ๋ฉด InternalResourceViewResolver๊ฐ ํด๋น ๋ทฐ๋ฅผ ๋ฐํํ ์ ์๋ค.

๊ฐ๋ฐ์์ ์ญํ ๊ณผ ์ฑ ์
์๋ ์ฌ์ง์์ ์ด๋ก์์ผ๋ก ํ์ํ ๋ถ๋ถ์ Spring์์ ๋์ ๊ตฌํํด์ฃผ๋ ๋ถ๋ถ์ด๋ค.
DispatcherServlet์ ์ฌ์ฉํจ์ผ๋ก์จ ๊ฐ๋ฐ์๋ ์ปจํธ๋กค๋ฌ ๋ก์ง์๋ง ์ง์คํ ์ ์๋ค.

์ฐธ๊ณ ์๋ฃ
https://www.youtube.com/watch?v=calGCwG_B4Y
https://www.youtube.com/watch?v=2pBsXI01J6M
Spring) Spring MVC ๋์ ๊ตฌ์กฐ
์๋ธ๋ฆฟ ์ปจํ ์ด๋(Servlet Container)๋?
[Web] Web Server์ WAS์ ์ฐจ์ด์ ์น ์๋น์ค ๊ตฌ์กฐ
[Spring] Dispatcher Servlet ์ดํดํ๊ธฐ
Spring MVC HandlerAdapter ๋ถ์ํ๊ธฐ
'๐ฑ JAVA & SPRING > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [spring-test] standaloneSetup() vs webAppContextSetup() (0) | 2023.11.24 |
|---|---|
| [spring-test] JUnit5 Test ์ ๋ฆฌ (0) | 2023.11.24 |
| ๐ค ๋ง์ ๊ฐ๋ฐ์๋ค์ "์" ์คํ๋ง์ ์ฌ์ฉํ ๊น? (0) | 2023.09.22 |
| ์๋ธ๋ฆฟ ํํฐ & ์คํ๋ง ์ธํฐ์ ํฐ (0) | 2023.09.13 |