[Spring] Dispatcher Servlet
๐น Dispatcher Servlet ์ด๋ ?
Dispatcher Servlet์ dispatch๋ "๋ณด๋ด๋ค"๋ผ๋ ๋ป์ ๊ฐ์ง๊ณ ์๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ๋จ์ด๋ฅผ ํฌํจํ๋ Dispatcher Servlet์ HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๊ฐ์ฅ ๋จผ์ ๋ฐ์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ์์ํด ์ฃผ๋ ํ๋ฐํธ ์ปจํธ๋กค๋ฌ(Front Controller)๋ผ๊ณ ์ ์ํ ์ ์๋ค.
Dispatcher Servlet์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด URI์ ๋ง๋ ํธ๋ค๋ฌ์ ๋ทฐ๋ฅผ ์ฐพ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด "/posts/save"์ URI ์ฃผ์๋ก GET ์์ฒญ์ ๋ณด๋ด๋ฉด Dispatcher Servlet์ ์๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์์ ์ ์์ํ๋ค.
@GetMapping("posts/save")
public String save() {
return "posts-save";
}
์ด๋, ํ๋ฐํธ ์ปจํธ๋กค๋ฌ(Front Controller)๋ ์ฃผ๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ์์ฒญ์ ๋ฐ์์ ์ฒ๋ฆฌํด ์ฃผ๋ ์ปจํธ๋กค๋ฌ๋ก์, MVC ๊ตฌ์กฐ์์ ํจ๊ป ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ด๋ค.
๐น Dispatcher Servlet ์ฅ์
Spring MVC๋ Dispatcher Servlet์ด ๋ฑ์ฅํจ์ ๋ฐ๋ผ web.xml์ ์ญํ ์ ์๋นํ ์ถ์์์ผ์ฃผ์๋ค.
๊ณผ๊ฑฐ์ ๋ชจ๋ ์๋ธ๋ฆฟ์ URL ๋งคํ์ ์ํด web.xml์ ๋ชจ๋ ๋ฑ๋กํด ์ฃผ์ด์ผ ํ์ง๋ง,
Dispatcher Servlet์ด ํด๋น ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํธ๋ค๋งํด ์ฃผ๊ณ , ๊ณตํต ์์ ์ ์ฒ๋ฆฌํ๋ฉด์ ์๋นํ ํธ๋ฆฌํ๊ฒ ์ด์ฉํ ์ ์๊ฒ ๋์๋ค.
์ฐ๋ฆฌ๊ฐ ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌํํด๋๊ธฐ๋ง ํ๋ฉด Dispatcher Servlet์ด ์์์ ์ ํฉํ ์ปจํธ๋กค๋ฌ๋ก ์์์ ํด์ฃผ๋ ๊ตฌ์กฐ๊ฐ ๋์๋ค.
๐น ์ ์ ์์(Static Resources) ์ฒ๋ฆฌ
Dispatcher Servlet์ด ์์ฒญ์ ์ปจํธ๋กค๋ฌ์ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ ํจ์จ์ ์ผ๋ก ๋ณด์ธ๋ค.
ํ์ง๋ง Dispatcher Servlet์ด ๋ชจ๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค ๋ณด๋ ์ด๋ฏธ์ง๋ HTML, CSS, JavaScript ๋ฑ๊ณผ ๊ฐ์ ์ ์ ํ์ผ์ ๋ํ ์์ฒญ๋ง์ ๋ชจ๋ ๊ฐ๋ก์ฑ๊ธฐ ๋๋ฌธ์ ์ ์ ์์์ ๋ถ๋ฌ์ค์ง ๋ชปํ๋ ์ํฉ๋ ๋ฐ์ํ๊ณค ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ 2๊ฐ์ง ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
1. ์ ์ ์์ ์์ฒญ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒญ์ ๋ถ๋ฆฌ
2. ์ ํ๋ฆฌ์ผ์ด์ ์์ฒญ์ ํ์ํ๊ณ ์์ผ๋ฉด ์ ์ ์์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ
[ ์ ์ ์์ ์์ฒญ๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒญ์ ๋ถ๋ฆฌ ]
์ ๋ฐฉ๋ฒ์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ 2๊ฐ์ง๋ก ๊ตฌ๋ถํ๋ค.
1. /apps์ URL๋ก ์ ๊ทผํ๋ฉด Dispatcher Servlet์ด ๋ด๋นํ๋ค.
2. /resources์ URL๋ก ์ ๊ทผํ๋ฉด Dispatcher Servlet์ด ์ปจํธ๋กคํ ์ ์์ผ๋ฏ๋ก ๋ด๋นํ์ง ์๋๋ค.
ํด๋น ๋ฐฉ์์ ์ฝ๋๊ฐ ์๋นํ ์ง์ ๋ถํด์ง๋ฉฐ, ๋ชจ๋ ์์ฒญ์ ๋ํด ์์ ๊ฐ์ URL์ ๋ถ์ฌ์ค์ผ ํ๋ฏ๋ก ์ง๊ด์ ์ธ ์ค๊ณ๊ฐ ๋ ์ ์๋ค.
๊ทธ๋์ ์ด๋ฌํ ๋ฐฉ์์ ํ๊ณ๋ฅผ ๋๋ผ๊ณ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด ๊ณ ์๋์๋ค.
[ ์ ํ๋ฆฌ์ผ์ด์ ์์ฒญ์ ํ์ํ๊ณ ์์ผ๋ฉด ์ ์ ์์ ์์ฒญ์ผ๋ก ์ฒ๋ฆฌ ]
์ ๋ฐฉ๋ฒ์ Dispatcher Servlet์ด ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ๋จผ์ ์ฐพ๊ณ ,
์์ฒญ์ ๋ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒฝ์ฐ, 2์ฐจ์ ์ผ๋ก ์ค์ ๋ ์์ ๊ฒฝ๋ก๋ฅผ ํ์ํ์ฌ ์์์ ํ์ํ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ์์ญ์ ๋ถ๋ฆฌํ๋ฉด ํจ์จ์ ์ธ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ์ง์ํ ๋ฟ ์๋๋ผ ์ถํ ํ์ฅ์ ์ฉ์ดํ๊ฒ ํด์ค๋ค๋ ์ฅ์ ์ด ์๋ค.
๐น Dispatcher Servlet ๋์ ๋ฐฉ์
Dispatcher Servlet์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ์ฐพ์ ์์ฒญ์ ์์ํด์ผ ํ๋ค.
Dispatcher Servlet์ ๋์ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.
[ ๋์ ๋ฐฉ์ ]
1. ํด๋ผ์ด์ธํธ์ ์์ฒญ์ Dispatcher Servlet์ด ๋ฐ๋๋ค.
2. ์์ฒญ ์ ๋ณด๋ฅผ ํตํด ์์ฒญ์ ์์ํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ๋๋ค.
3. ์์ฒญ์ ์ปจํธ๋กค๋ฌ๋ก ์์ํ ํธ๋ค๋ฌ ์ด๋ํฐ๋ฅผ ์ฐพ์์ ์ ๋ฌํ๋ค.
4. ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ์ปจํธ๋กค๋ฌ๋ก ์์ฒญ์ ์์ํ๋ค.
5. ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ค.
6. ์ปจํธ๋กค๋ฌ๊ฐ ๊ฐ์ ๋ฐํํ๋ค.
7. ํธ๋ค๋ฌ ์ด๋ํฐ๊ฐ ๋ฐํ ๊ฐ์ ์ฒ๋ฆฌํ๋ค.
8. ์๋ฒ์ ์๋ต ํด๋ผ์ด์ธํธ๋ก ๋ฐํํ๋ค.
์์ ๊ฐ์ ํ๋ฆ์ ๊ฐ์ง๋ฉฐ,
๊ฐ๋จํ๊ฒ ๋งํด Dispatcher Servlet์ ํตํด ์์ฒญ์ ์ฒ๋ฆฌํ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์์ ์์ํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๊ฒ์ด๋ผ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค.
๐ reference