1. DispatcherServlet์ด๋ ๋ญ์๋? (๋ณต์ต)
๋ณธ๋ ํ๋์ ์๋ธ๋ฆฟ์ ์ ๋ ฅ ์ฒ๋ฆฌ ์ถ๋ ฅ ๊ณผ์ ์ด ๋ค ๋ด๊ฒจ ์์๋ค. ์ฌ๊ธฐ์ ๋ชจ๋ ์๋ธ๋ฆฟ์ ๊ณตํต์ ์ด๊ณ ๋์๊ฐ๋ ์๋ฆฌ์ ์ฐจ์ด๊ฐ ์๋ ์ ๋ ฅ ๋ถ๋ถ์ ์์ผ๋ก ๋นผ์, ํ๋์ ์๋ธ๋ฆฟ์ผ๋ก ๋ง๋ค์๋ค. (์ฒ๋ฆฌ๋ ์ถ๋ ฅ์ ์๋ธ๋ฆฟ๋ง๋ค ๊ธฐ๋ฅ์ด ๋ค๋ฅผ ์ ์์ง๋ง, ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ ์ ๋ ฅ๋ถ๋ถ์ ๊ฑฐ์ ๋ชจ๋ ์๋ธ๋ฆฟ์ด ๊ณตํต์ ์ผ๋ก ๊ฐ๋ค.) ์ด๊ฒ์ด ๋์คํจ์ณ ์๋ธ๋ฆฟ์ด๋ค. ์คํ๋ง์ ์๋ธ๋ฆฟ์ ์ ์ฒ๋ฆฌ ์ ๋ดํ๋ DispatcherServlet๊ณผ ์ฒ๋ฆฌ๋ด๋น Controller, ์ถ๋ ฅ๋ด๋น View๋ก ๋๋์ด์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ค.
(๊ด์ฌ์ฌ๋ ์ฌ์ฉ์๊ฐ ๊ด์ฌ์ ๊ฐ์ง๊ณ ํด๊ฒฐํด์ผํ ์์ ์ ๋งํ๋ค. MVC ํจํด์ ํด๊ฒฐํด์ผํ ๋ถ์ผ๋ฅผ ๊ฐ๊ฐ DisPatcherServlet, Controller, view๋ก ๋๋์ด์ ๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ๋ฅผ ์คํํ๋ค.)
MVC์ ์๋๊ณผ์ ์ ๋จ์ํ๊ฒ ๋ณด๋ฉด
(1) DispatcerServlet์ด ์์ฒญ์ ๋ฐ๋๋ค.
(2) ๊ทธ๋ฆฌ๊ณ ์์ฒญ์ ํด๊ฒฐํ ์ ์๋ ๋งค์๋๊ฐ ๋ฌด์์ธ์ง ์ฐพ๊ณ , ๊ทธ ๋งค์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ปจํธ๋กค๋ฌ์๊ฒ ์์ฒญ์ ์ ๋ฌํ๋ค.
(3) ์ปจํธ๋กค๋ฌ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ํด๋ผ์ด์ธํธ ํ๋ฉด์ ๋ณด์ฌ์ผํ view๊ฐ ๋ฌด์์ธ์ง ๋ฐํํ๋ค.
(4) DispatcherServlet์ ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ(๋ชจ๋ธ์ ๋ด๊ฒจ์๋ ๊ฒ)๋ฅผ ํด๋น View์๊ฒ ์ ๋ฌํ๋ค.
(5) View๋ ๋ชจ๋ธ์ ๋ด๊ฒจ์๋ ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํด ์์ฒญ์ ๋ํ ์๋ต์ ๋ง๋ค์ด ๋ธ๋ผ์ฐ์ ์๊ฒ ๋ณด๋ธ๋ค.
2. MVC ์๋ ๊ณผ์ (100% ์์ธํ)
์์ ๊ณผ์ ์์๋ ๋ง์ ๋ถ์ผ๊ฐ ์๋ต๋์ด ์๋ค. ์ด์ MVC ์๋ฆฌ๊ฐ ๋๋ต์ ์ผ๋ก ์ต์ํด์ก์ผ๋ ์๋ตํ๋ ์ ์ฐจ๋ค๋ ๋์ง์ด๋ณด์.
(1) ์์ฒญ์ ๋ฐ์ผ๋ฉด DispatcerServlet์ HandlerMapping์๊ฒ ํด๋น URL๊ณผ ๋งคํ๋ ๋งค์๋๊ฐ ๋ฌด์์ธ์ง ๋ฌผ์ด๋ณธ๋ค.
(2) HandlerMapping์ URL (key) , Mapping๋ ๋งค์๋(Value)๋ก ํ๋ Map์ ๊ฐ์ง๊ณ ์๋ค.
HandlerMapping์ ํด๋น ํ๋ฅผ ๋ณด๊ณ ์์ฒญ ๋ฐ์ URL์ด ์ด๋ค ๋งค์๋์ ๋งคํ๋์ด ์๋์ง ์ฐพ๊ณ , ๋งคํ๋ ๋งค์๋์ ์ ๋ณด๋ฅผ
๋ค์ ์๋ธ๋ฆฟ์๊ฒ ๋ฐํํ๋ค.
(3) DispatcherServlet์ ํด๋น ๋งค์๋๋ฅผ ๊ฐ์ง HandlerAdapter๊ฐ ๋ฌด์์ธ์ง ์์๋ธ๋ค.
(๊ทธ๋ฆผ๊ณผ ๋ค๋ฅด๊ฒ HandlerAdapter๋ ์ฌ๋ฌ ๊ฐ ์๋ค. ๊ทธ๋์ DS๊ฐ ์ ๋ถํํ ๋๊ฐ ๊ฐ์ง๊ณ ์๋? ๋ผ๊ณ ๋ฌผ์ด๋ณธ๋ค.)
(4) ํด๋น ๋งค์๋๋ฅผ ๊ฐ์ง HandlerAdapter๋ฅผ ์ฐพ์ผ๋ฉด ๊ทธ ๋ ์ํํ ์์ฒญ์ ์ ๋ฌํ๊ณ , HandlerAdapter๋ ๊ทธ ์์ฒญ์ ๋ค์ ์ปจํธ๋กค๋ฌํํ ์ ๋ฌํ๋ค.
(5) ๋ค์ HandlerAdapter๊ฐ ์ปจํธ๋กค๋ฌ์ ์ฒ๋ฆฌ๊ฒฐ๊ณผ(๋ชจ๋ธ์ ๋ด์์)์ ์๋ต์ ์ธ view์ ์ด๋ฆ์ ๋ฐ์์ DS์๊ฒ ์ ๋ฌํ๋ค.
(6) DS๋ ๋จ์ง view์ ์ด๋ฆ๋ง ๋ณด๊ณ ํด๋น view๊ฐ ์ด๋์ ์๊ณ ๋ฌด์์ธ์ง ์ ์ ๊ฐ ์๋ค. ์๋ํ๋ฉด view์ ์ด๋ฆ์๋ ๊ฒฝ๋ก์ฃผ์์ ํ์ฅ์๊ฐ ์ฐ์ฌ์์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ DS๋ ๋ค์ ViewResolverํํ ํด๋น ์ด๋ฆ์ ๊ฐ์ง view์ ๊ฒฝ๋ก์ฃผ์์ ํ์ฅ์๊ฐ ๋ฌด์์ธ์ง ์๋ ค๋ฌ๋ผ๊ณ ํ๋ค.
(7) ViewResolver๋ ๊ฒฝ๋ก์ฃผ์์ ํ์ฅ์๊น์ง ์ฐ์ธ view์ ์์ ํ ์ด๋ฆ์ ๋ค์ DS์๊ฒ ๋ฐํํ๋ค.
(8) DS๋ ์ด๊ฑธ JstlView๋ผ๋ ์ธํฐํ์ด์ค์๊ฒ ์ ๋ฌํ๋ค. JstlView๋ ์ผ์ข ์ ํ์๊ธฐ ๊ฐ์ ๋ ์์ผ๋ก ํด๋น view๋ฅผ ์ฐพ์์ค๋ค.
(9) view๊ฐ ๋ชจ๋ธ์ ๋ด๊ธด ์ฒ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํ์ฉํด ์๋ต์ ๋ง๋ค์ด๋ด์ ๋ธ๋ผ์ฐ์ ์ ๋ฐํํ๋ค.
**๊ตณ์ด Controller์ Dispatcher ์ฌ์ด์ HandlerAdaptor๋ฅผ ์ฐ๋ ์ด์ ๊ฐ ๋ฌด์์ธ๊ฐ?
ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ฌ์ฉํ๋ฉด Dispatcher์ Controller ์ฌ์ด์ ๋์จํ ์ฐ๊ฒฐ์ด ๊ฐ๋ฅํด์ง๋ค. ๋์จํ ์ฐ๊ฒฐ์ด๋ ๋ณ๊ฒฝ์ด ์ ๋ฆฌํ ์ค๊ณ์ ํ ์ข ๋ฅ์ด๋ค. ๋ง์ฝ์ DS๊ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ์ง์ ํธ์ถํ๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ๋ง์ฝ ํธ์ถํด์ผํ ์ปจํธ๋กค๋ฌ ์์ฒด๊ฐ ๋ฐ๋์์ ๋, DS๋ฅผ ์์ ํด์ผํ๋ค.
ํ์ง๋ง ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ค๊ฐ์ ์ฐ๋ฉด ๊ต์ฒด๊ฐ ์ฌ์์ง๋ค. ์ฌ๋ฌ ์ข ๋ฅ์ ํธ๋ค๋ฌ ์ด๋ํฐ ์ค ์ฐ๋ฆฌ๊ฐ ๊ต์ฒดํ๊ณ ํ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ฐ์ง ๋ ์์ผ๋ก ๊ฐ์๋ผ์ฐ๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค. DS ๋ด๋ถ๋ฅผ ๋ฏ์ด ๊ณ ์น ํ์๊ฐ ์๋ค.
๋ํ ํ ๊ฐ์ง ์ฅ์ ์ด ๋ ์๋ค๋ฉด HandlerAdapter๋ ์ปจํธ๋กค๋ฌ ์ด์ธ์ ๋ค๋ฅธ ๊ฐ์ฒด๋ ํ์ํ๋ค๋ฉด ํธ์ถํ ์ ์๊ฒ ๋์๋ค. ๊ทธ ์ ์์๋ ์ปจํธ๋กค๋ฌ ์ง์ ํธ์ถ๋ณด๋ค ์ ์ฐ์ฑ์ด ๋๋ค.
** ์ฐ๋ฆฌ๋ viewResolver ์ค InternalResourceViewResolver๋ผ๋ ๋ ์์ ์ด๋ค.
3. ์ฝ๋ ๊น๋ณด๊ธฐ
์์์ ์ค๋ช ํ ๋ด์ฉ๋ค์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๊ตฌํ๋๊ณ ์๋์ง ๋ฏธ์ฝํ๊ฒ ๋จ์ ์์๋ณด๊ฒ ๋ค.
์ค๋ช ํ ๋ด์ฉ์ด ์ด๋ ต์ง๋ง, ์ ์ฒด ๊ณผ์ ์ MVC ๋์๊ฐ๋ ์๋ฆฌ์ ์ผ์นํ๋ค.
Debug๋ก ๋ณด๋ฉด ์ค์ ์์ฒญ๋ค์ด ์ด๋ค ์์๋ก ์ปจํธ๋กค๋ฌ๋ก ๋์ด์ค๋์ง ๋ณผ ์ ์๋ค.
๋จผ์ Method.invoke๋ ์์ฒญ์ด ๋ค์ด์จ ์ํฉ์ด๋ค. ์ฌ๊ธฐ์ HandlerMethod๋ HandlerMapping์ ์ด์ฉํ๋ ๊ฒ์ ๋งํ๋ค.
HandlerMapping์ผ๋ก ์์ฒญ์ด ์จ URL์ ๋ฃ์ด์ ๊ทธ์ ๋งคํ๋ ๋งค์๋ ์ ๋ณด๋ฅผ ๋ฐํ ๋ฐ๋๋ค.
๊ทธ ํ์๋ HandlerAdapter๊ฐ ๊ฐ๋ ์ค์์ ์ ์ ์๋ค.
doPatch๋ ํด๋น ๋งค์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ด๋ค.
/login/login ์์ฒญ์ ์๋ก ๋ค์ด์ ์คํํ๋๋ฐ, ์ด๊ฑด Get ์์ฒญ์ด๋ผ doGet์ด ํธ์ถ๋์์์ ์ ์ ์๋ค.
๋ ์์ธํ๋ ์์ง ์ ๋ชจ๋ฅด๊ฒ ์ด์ ๋ค์ ๋ณต์ต ๋ ๋ง์ ํ๊ฒ ๋ค.