๐ถ แแ ฉแแ ต์ Servlet vs Spring
[10๋ถ ํ ์ฝํก] ๐ถ แแ ฉแแ ต์ Servlet vs Spring ๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌ.
์๋ธ๋ฆฟ์ด๋

์ฒ์ ์น ์๋ฒ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํด์ ์ ์ ์ธ ํ์ด์ง๋ก๋ง ์๋ตํ ์ ์์๋ค. ๊ทธ๋์ ์น์๋ฒ์ ํ๋ก๊ทธ๋จ์ ๋ถ์ฌ์ ๋์ ์ธ ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์์ํ๋ค. ๋ฐ๋ก ์ด ์๋ธ๋ฆฟ๋ ๋์ ์ธ ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํด ์น ์๋ฒ์ ๋ถ์ด๋ ํ๋ก๊ทธ๋จ์ค ํ๋์ด๋ค.
์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ์ด๋ค ์ค์ง์ ์ธ ์ด์ ์ด ์กด์ฌํ ๊น?

์๋ธ๋ฆฟ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ์ฌ์ฉํ ์ ์๋ HttpServletRequest๊ฐ ์ ๊ณตํด์ฃผ๋ ํธ์ ๋ฉ์๋์ ์ผ๋ถ์ด๋ค. ํ ์คํธ ํํ์ http ์์ฒญ์ ์ง์ ํ์ฑํ๊ธฐ ๋ณด๋ค๋ HttpServletRequest์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋๊ฒ์ด ํจ์ฌ ํธํ๋ค.
๋ฟ๋ง ์๋๋ผ ์๋ธ๋ฆฟ์ด ์๊ตฌํ๋ ๊ตฌํ ๊ท์น์ ์ง์ผ์ฃผ๋ฉด์ ์ ์ํด์ค๋ค๋ฉด http ์์ฒญ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๊ณ , ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ์ฝ๊ฒ ์๋ต์ผ๋ก ๋ณํํ ์ ์๋ค.

์ฆ ์๋ธ๋ฆฟ์ ์ด์ฉํด ์น ์์ฒญ์ ๋ค๋ฃฌ๋ค๋ฉด ๊ฐ๋ฐ์๋ค์ ํ์ฑ๋ณด๋ค๋ ์ค์ ์๋น์ค, ๋น์ง๋์ค ์ฒ๋ฆฌ ๋ก์ง์ ์ข๋ ์ง์คํ ์ ์๊ฒ ํด์ค๋ค.

์๋ธ๋ฆฟ ์ธํฐํ์ด์ค๋ ์ธ ๊ฐ์ง ๋ฉ์๋๋ฅผ ๊ตฌํํ ๊ฒ์ ๊ท์ ํ๊ณ ์๋ค. ์๋ธ๋ฆฟ์ ์ค์ ๋ก ์ด๋ ๊ฒ ์๊ฒผ๋ค. ์์ฑ์, ์๋ฉธ์ ๊ทธ๋ฆฌ๊ณ ์๋น์ค(์์ฒญ์ ์ฒ๋ฆฌํ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค)

์ด์ค ์๋น์ค ๋ฉ์๋์ ๋ก์ง์ ์ถ์ฝํ ์ฝ๋์ด๋ค. ๊ฐ๋ตํ ์๊ฐํ์ฌ Http๋ฉ์๋์ ๋ง๋ ๋งตํ๋ ๋ก์ง ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์๋ธ๋ฆฟ์ด ํธ์ถ๋๋ ๊ณผ์
์๋ธ๋ฆฟ ์ปจํ ์ด๋: ์๋ธ๋ฆฟ์ ๋ด๊ณ ๊ด๋ฆฌํ๋ ๋ฐ๊ตฌ๋, ์ฑ๊ธํค ์ปจํ ์ด๋ ์ญํ . ์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด

์ฌ์ฉ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋จผ์ , HttpServletRequest์ HttpServletResponse๋ฅผ ๋ง๋ค๊ฒ ๋๋ค.
์ดํ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ํด๋น ์์ฒญ๊ณผ ๋งคํ๋ ์๋ธ๋ฆฟ์ ์ฐพ๊ฒ ๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์ด๋ค ์๋ธ๋ฆฟ์ด ์ด๋ค ์์ฒญ๊ณผ ๋งคํ๋์ด์๋ ์ง๋ web.xml ์ค์ ํ์ผ๋ก ๊ฐ๋ฐ์๊ฐ ์ง์ ํด์ค์ผํ๋ค.
์ค์ ํ์ผ์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์ฝ์ด์ ์ด ์์ฒญ์ด ์ด๋ค ์๋ธ๋ฆฟ์ด ํ์ํ์ง๋ฅผ ์๊ฒ ๋๋ฉด ๊ทธ ์๋ธ๋ฆฟ ์ธ์คํด์ค๊ฐ ์ปจํ ์ด๋์ ์กด์ฌํ๋์ง ํ์ธํ๋ค. ๋ง์ฝ์ ๊ทธ ์ธ์คํด์ค๊ฐ ์ปจํ ์ด๋์ ์กด์ฌํ๋ค๋ฉด ๊ทธ ์ธ์คํด์ค๋ฅผ ๊ทธ๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด๊ณ ์๋ค๋ฉด ์์ฑํด์ ๊ฐ์ ธ๊ฐ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. (์์ฑํ๋ค๋ฉด ์์ ๋ณธ ์๋ธ๋ฆฟ์ init ์ด ํธ์ถ!)
์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์์ ๋ฏธ๋ฆฌ ๋ง๋ HttpServletRequest, HttpServletResponse๋ฅผ ์ธ์๋ก ๋งตํํ ์๋ธ๋ฆฟ ์ธ์คํด์ค์ ์๋น์ค ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
์ดํ Response๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๊ณ , HttpServletRequest๊ฐ์ฒด์ HttpServletResponse๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํค๊ณ ๋๋๊ฒ ๋๋ค.
โ ์๋ธ๋ฆฟ ์ธ์คํด์ค๋ ์๋ฉธ๋์ง ์๋๋ค. ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ์ฑ๊ธํค ํจํด์ด๋ฏ๋ก ๋ค์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ๋ค์ ์๋ฌด๋ฅผ ์ํํ๊ฒ ๋๋ค
โ๊ทธ๋ ๋ค๋ฉด ํ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋์ค์ ๋ค๋ฅธ ์์ฒญ์ด ๋์์ ๋ค์ด์จ๋ค๋ฉด? ์ด๋๋ ๋ฉํฐ์ค๋ ๋ฉ์ผ๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ๋๋ค ์๋ ๊ทธ๋ฆผ์ฒ๋ผ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์์ฑ์ด๋๊ณ ์ค๋ ๋๋น ๋ค๋ฅธ ์๋ธ๋ฆฟ์ด ์ฒ๋ฆฌํ ์๋, ๋ฐ๋๋ก ์ฌ๋ฌ ์ค๋ ๋์์ ํ ์๋ธ๋ฆฟ์ ์ฌ๋ฌ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์๋ ์์ ๊ฒ์ด๋ค.

ํ์ง๋ง, ๋ฉํฐ์ค๋ ๋ ์ฌ์ฉ์ ์ ์ํด์ผํ๋ค. ์ค๋ ๋ ์์ฑ ์์ฒด์ ๋น์ฉ๋ ํฌ๊ณ ๋ค๋ฅธ ์ค๋ ๋๋ก ์ ํํ๋ context switch์ ์ค๋ฒํค๋๋ ํฌ๋ค. ์ค๋ ๋ ์์ฑ์ ์ ํ์ ๋์ง ์๋๋ค๋ฉด, ํ๋์จ์ด ์ฉ๋์ ์ด๊ณผํ๊ฒ ๋๋ฉด ์๋ฒ ๋ค์ด์ด ๋ฐ์ํ ์๋ ์๋ค.
์ฆ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์๋ ๋นํจ์จ์ฑ์ด ์กด์ฌํ๋ค. ์์ฒญ๋น ์๋ธ๋ฆฟ์ ์ ํด์ฃผ๋ ๊ณณ์ด ๋นํจ์จ์ ์ธ๋ฐ, ๊ด๋ฆฌ ์ธก๋ฉด์์๋ ๋ฉํฐ์ค๋ ๋ฉ์ ์ด๋ ค์, ๊ฐ๋ฐ ์ธก๋ฉด์์๋ ํธ๋ค๋ฌ์ ๊ณตํต ๋ก์ง์ด ๋งค๋ฒ ์ค๋ณต๋๋ค๋ ๋จ์ ์ด ์๋ค.
ํธ๋ค๋ฌ์ ๊ณตํต ๋ก์ง์ด ๋งค๋ฒ ์ค๋ณต? ๋ฌด์จ๋ป์ธ๊ฐ

์ด๋ฐ ๋๋์ด๋ค. 1, 3์ด ๋งค๋ฒ ์ค๋ณต๋๋ค. ์ด๋ฌ๊ธฐ๋ณด๋ค๋

์ด๋ฐ ๊ตฌ์กฐ๊ฐ ํจ์ฌ ๋์ ๊ฒ์ด๋ค. ์ด๋ฌํ ํจํด์ด ์กด์ฌํ๋ฉฐ ๋ช ์นญ์ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ด๋ค. ์ฆ ์๋จ์ ๊ณตํต๋๋ ๋ก์ง์ ์ฒ๋ฆฌํ๊ฒ ํ๋ ํจํด์ด๋ค.

์คํ๋ง mvc๊ฐ ๋ฐ๋ก ์ด ํ๋ก ํธ ์ปจํธ๋กค๋ฌ ํจํด์ ์ฌ์ฉํ๋ค. ๋ชจ๋ ์์ฒญ์ ๋ฐ์ ๊ณตํต์ฒ๋ฆฌ๋ฅผ ํ๋ ์ ๋ฉด ์ปจํธ๋กค๋ฌ Dispatcher Servlet์ ์๋จ์ ๋๋ค.

๋น๊ตํ์๋ฉด ์ด์ ์ ์๋ธ๋ฆฟ์ ๊ฐ๋ณ์ ์ผ๋ก ๋ค๋ค๋ ๋๋ ์์ฒญ๋ง๋ค ๋งค๋ฐ ์๋ธ๋ฆฟ์ ์ ์ํ๊ณ , ์์ฒญ์ ์ํํ ๋๋ง๋ค ๋งค๋ฒ ์ค๋ ๋๋ฅผ ์์ฑํ๋ค. ํ์ง๋ง ์คํ๋ง์ front controller pattern์ ํ๋์ ์๋ธ๋ฆฟ๋ง์ ์ ์ํ๊ณ ์ด ์๋ธ๋ฆฟ์ด ๋ชจ๋ ์์ฒญ์ ์ํํ๊ฒ๋ ํ๋ค.
Dispatcher ์๋ธ๋ฆฟ์ ์น ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์

๋์คํจ์ณ ์๋ธ๋ฆฟ์ด ๋ชจ๋ ์์ฒญ์ ๋ฐ๋๋ค.
ํธ๋ค๋ฌ ๋งตํ์ด ์์ฒญ์ ๋ง๋ ์ปจํธ๋กค๋ฌ๋ฅผ ์ฐพ์ ๋ฐํํ๋ค.
ํธ๋ค๋ฌ์ด๋ํฐ๋ ๊ทธ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋๋ฅผ ํธ์ถ์์ ์ฒ๋ฆฌ๋ก์ง์ ์ํํ๋ค.
์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ Model And View ๊ฐ์ฒด๋ก ๋ณํํด์ ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ ๋๊ฒจ์ค๋ค
๋ค์ ๋์คํจ์ณ ์๋ธ๋ฆฟ์ ๋ทฐ ๋ฆฌ์กธ๋ฒ๋ฅผ ์ด์ฉํด์ ๋ทฐ๋ฅผ ์ฐพ๊ฑฐ๋ ์์ฑํ๋ค.
๊ทธ๋ ๊ฒ ์ป์ ๋ทฐ์ ๋ชจ๋ธ๋ก ๋ค์ด์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ ์๋ต๊ฒฐ๊ณผ ์์ฑ์ ์์ฒญํด์ ์ฐ๋ฆฌ๊ฐ ๋ณผ์ ์๋ JSP๋ Thymeleaf๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ถ๋ ฅํ์ผ๋ก ์๋ต์ ํ๋ค.
โ ์ญํ ์ ๋ถ๋ดํ๋ฉด์ ๋ ๊ฐ๋ฐ์์ ์ผ์ด ๋์ด๋ ๊ฒ์ด ์๋๋?
์๋๋ค. ์ฐ๋ฆฌ๊ฐ ํด์ผํ ๊ฒ์ ์ฒ๋ฆฌ ํธ๋ค๋ฌ ๋งตํ๋ ์ฒ๋ฆฌ๋ก์ง๋ฟ์ด๋ค. ์คํ๋ ค ์ง์ง ์ง์คํด์ผํ ๊ณณ์ ์ง์คํ ์ ์๋ค.
๋์คํจ์ณ ์๋ธ๋ฆฟ์ด ์คํ๋ง ์ปจํ ์ด๋๋ก๋ถํฐ DI๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๊ณ ๋์์ ํ๊ฒ ๋๋ค.
์คํ๋ง ์ปจํ ์ด๋๋ ํ๋ก๊ทธ๋จ์ด ๋์ํ๋๋ํ ์ฌ์ฉ๋๋ ์๋ฐ ๊ฐ์ฒด๋ค์ ํ๋ ์์ํฌ๊ฐ ๋์ ๊ด๋ฆฌํ๊ณ ๋ณด๊ดํ๋ค.

์๋ธ๋ฆฟ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ๋ ์น ์์ฒญ ๊ด๋ จ ๊ฐ์ฒด๋ค์ด ๋ด๊ฒจ์๊ณ ๋ฃจํธ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์๋ ์น ์์ฒญ์ฒ๋ฆฌ ๊ด๋ จ ๋น ์ธ์ ์ปดํฌ๋ํธ๋ค ์ฆ ์๋น์ค ๋ ํฌ์งํ ๋ฆฌ ๊ด๋ จ ๊ฐ์ฒด๋ค์ด ๊ด๋ฆฌ๋๋ค. ์ปจํ ์ด๋๊ฐ ๊ฐ๋ฐ์ ํ์ํ ๋ถ๋ถ์ด๋ ๋์คํจ์ณ ์๋ธ๋ฆฟ์ด ์์ฒญ์ ์ฒ๋ฆฌํ ๋ ํ์ํ ๋ถ๋ถ์ ์์์ ์ฃผ์ ํ๊ฒ ๋๋ค.
ํ๋ง๋๋ก ์๋ธ๋ฆฟ ์ค์ ํ์ผ๋ง ์ ์์ฑํ๋ฉด ์ค์ ๋๋ก ์์ฑ๋ ๊ฐ์ฒด๊ฐ ์คํ๋ง ์ปจํ ์ด๋์์ ๊ด๋ฆฌ๋๊ณ ํ์ํ ๋ถ๋ถ์์ ์ฃผ์ ๋์ด ๋์คํจ์ณ ์๋ธ๋ฆฟ์ด ์์์ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค.
๋ ๊ณต๋ถํด๋ณผ ํค์๋
- ์น ์๋ฒ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ์๋ฒ
- WAS๊ฐ ๋ฉํฐ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐฉ์
- ์คํ๋ง ์ค์ ํ์ผ๊ณผ ์๋ธ๋ฆฟ ์ค์ ํก๋ฆฌ
- ์คํ๋ง ์ปจํ ์ด๋์ ๋น์ ๋ฑ๋กํ๋ ๋ฐฉ๋ฒ/ ์ปจํ ์ด๋๊ฐ ์ฃผ์ ์์น๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ
- ๋ํดํธ ์๋ธ๋ฆฟ
- ์คํ๋ง๊ณผ ์คํ๋ง ๋ถํธ
๋๊ธ๋จ๊ธฐ๊ธฐ