๐ปํ๋ฏธ์ Servlet vs Spring
[10๋ถ ํ ์ฝํก] ๐ปํ๋ฏธ์ Servlet vs Spring ๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํจ.
์ ์
์๋ธ๋ฆฟ์ด๋:
์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ ํ์ํ ์ธํฐํ์ด์ค
์คํ๋ง ์น mvc
์คํ๋ง ํ๋ ์์ํฌ์ ์๋ ๋ชจ๋
MVC ํจํด์ ์ฌ์ฉํด์ ์น ์๋น์ค๋ฅผ ๋ง๋ ๋ค.
์๋ธ๋ฆฟ์ ์ ์๊ฒผ์๊น

์ฒ์์ ์น ํ๋ก๊ทธ๋๋ฐ์ ์ ์ ๋ฐ์ดํฐ๋ง ์ ๋ฌํ ์ ์์๋ค. ์ด๋ค ์ฌ์ฉ์๊ฐ ๋ค์ด์ค๋ htmlํ์ผ๋ง ๋ณด๋ผ ์ ๋ฐ์ ์์๋ค.
์ฆ,
- ์ฌ์ฉ์(์์ฒญ)์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ค ์ ์๋ค.
- ๋์ ์ธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ค.

์ดํ ๋ฑ์ฅํ ๊ฒ์ด ๋ฐ๋ก CGI์ด๋ค.
CGI (Common Gate Interface) ๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์ธํฐํ์ด์ค๋ค. ์ด ์ธํฐํ์ด์ค๋ผ๋ ๊ฒ์ ๊ท์ฝ์ ์๋ฏธํ๋ค. ์ฆ ์น ์๋ฒ์ ํ๋ก๊ทธ๋จ ์ฌ์ด์ ๊ท์ฝ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.

์น ์๋ฒ์ ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ํ๋ก๊ทธ๋จ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐ์ง๋ ์ธํฐํ์ค, ๊ท์ฝ์ด ๋ฐ๋ก CGI

ํ์ง๋ง ์ค๋๋ ์์ฐ์ด๋๋ฐ์๋ ๋ค ์ด์ ๊ฐ ์๋ค. ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ์ ์ด ์กด์ฌ
- ๋ฆฌํ์คํธ๊ฐ ๋ค์ด์ฌ๋๋ง๋ค ํ๋ก์ธ์ค๋ฅผ ์๋ก ์์ฑํ๋ค. ํ๋ก์ธ์ค๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ํ ๋น๋ฐ์์ผํ๋ค.
โ ๊ฐ์ : ๋ฉํฐํ๋ก์ธ์ค๋ฅผ ๋ฉํฐ์ค๋ ๋ ๋ชจ๋ธ๋ก ๊ต์ฒด
- ๊ฐ์ ํ์ ์ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด๋ ๋งค ๋ฆฌํ์คํธ(์ฐ๋ ๋)๋ง๋ค ๊ตฌํ์ฒด ๊ฐ์ฒด๋ฅผ ์์ฑํด๋ธ๋ค. ์ฆ ์ฑ๊ธํค ํจํด์ด ์๋๋ค.
โ ๊ฐ์ : ์ฌ๋ฌ ์ธ์คํด์ค๋ฅผ ๋ง๋ค์ด๋ด๋ ํจํด์์ ์ฑ๊ธํค ํจํด์ผ๋ก ๊ต์ฒด
์ ๊ฐ์ ์ ๋ค์ ์ ์ฉํ ๊ฒ์ด ๋ฐ๋ก ์๋ธ๋ฆฟ์ด๋ค.

๋ฆฌํ์คํธ๋ฅผ ์ฐ๋ ๋๋ก ์ฒ๋ฆฌํ๋ฉฐ, ๊ตฌํ์ฒด ๊ฐ์ฒด๋ ์ฑ๊ธํค ํจํด.

๋ ๋์๊ฐ ํ๊ฐ์ง ๋ ์ถ๊ฐ๋ ๊ฒ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ด๋ค. ์น ์๋ฒ๋ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํด์ค๋ค.
์น ์ปจํ ์ด๋ : ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ค๋ ๋๋ฅผ ์์ฑํ๊ณ ์๋ธ๋ฆฟ์ ์คํ์ํจ๋ค. ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค์ ๋ฐ๋ผ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํ๋ค.(์๋ธ๋ฆฟ ์ธํฐํ์ด์ค์ ๋ฉ์๋ ํธ์ถ ๋ฑ๋ฑ)
์๋ธ๋ฆฟ์ ์๋ช ์ฃผ๊ธฐ

์๋ธ๋ฆฟ์๋ ํฌ๊ฒ ์ธ ๊ฐ์ง ๋ฉ์๋๊ฐ ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค์ ์ ์๋์ด์๋ค.
Init Method: ์์ฑ
Service Method: ์ค์ ๊ธฐ๋ฅ ์ํ, Http๋ฉ์๋ ์ข ๋ฅ์ ๋ฐ๋ผ ์๋ธ๋ฆฟ ์น ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๊ตฌํ ํด์ค๋ค.
Destroy Method: ์๋ฉธ์
๊ฐ๊ฐ์ ๋ฉ์๋๋ค์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋(Tomcat) ์ด ํธ์ถํด์ค๋ค

์ฑ๊ธํค ํจํด์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ณ ๋ก์ปฌ ๋ณ์๋ค์ ์ค๋ ๋๋ง๋ค ๋ฐ๋ก ๊ด๋ฆฌํจ์ ์ ์ ์๋ค.
์๋ธ๋ฆฟ์ ์ฝ๋๋ก ์ดํด๋ณด๊ธฐ

Web.xml: ์ค์ ํ์ผ์ผ๋ก Url๊ณผ ๋งตํ๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ง์ ํ๋ค. ์์์๋ /member์ ํด๋นํ๋ Url์ Servlets.MemberServlet๋ก ๋งตํํ ๊ฒ์ ๋ช ์ํ๋ค.
MemberServlet: ์๋ธ๋ฆฟ ๊ตฌํ์ฒด์ด๋ค.
๋ฆฌํ์คํธ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ฐ๊ณ , ๋ก์ง์ ์ฒ๋ฆฌํ ํ result ๋ฐ์ดํฐ๋ฅผ ๋ด์ vIew๋ฅผ ๋ง๋ค์ด์ Client์๊ฒ ์ ์กํ๊ณ ์๋ค.

์ ์ฒด์ ์ผ๋ก ์ดํด๋ณด๋ฉด Member, Line, Station ์ด ์ธ๊ฐ์ง ์ข ๋ฅ์ url์ web.xml์์ ๋งตํํ๊ณ , ๊ฐ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ค์ ํตํด ์๋น์ค ๋ก์ง์ ์ํํ๊ณ ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ view๋ฅผ ๋ณด๋ด์ฃผ๊ฒ ๋๋ค.
์คํ๋ง ์น MVC์์๋ ์๋ธ๋ฆฟ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
Dispatcher Servlet

์คํ๋ง์ Dispatcher Servlet์ด๋ผ๋ ํ๋ ์์ํฌ์ ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ค. ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ ๋ค์๊ณผ ๊ฐ๋ค. (๊น์ํ๋์ ๊ฐ์์ ๊ฐ์ ๋ด์ฉ)
๋์ ๊ณผ์

์ฒ์์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด Dispatcher Servlet์ผ๋ก ๊ฐ๊ฒ ๋๋ค. Dispatcher Servlet๋ ์ญ์ ์๋ธ๋ฆฟ์ด๊ธฐ ๋๋ฌธ์ Web.xml์ ๋ฑ๋กํด์ค์ผํ๋ค. ์ฌ๊ธฐ์๋ ๋ชจ๋ ์์ฒญ์ DispatcherServlet์ผ๋ก ๋งตํํ ๊ฒ์ผ๋ก ๋ช ์ํ๊ณ ์๋ค.

์ดํ Dispatcher Servlet์ ์ ๋ฌ๋ฐ์ ์์ฒญ์ HandlerMapping ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด ์์ฒญ์ ๋ง๋ ์ ์ ํ Controller๋ฅผ ์ป์ด์จ๋ค. ์ด๋, ์ ์ ํ Controller๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์กด์ฌํ๋ฉฐ, ์คํ๋ง ํ๋ ์์ํฌ์ ์ํด ์ ๊ณต๋๋ค.
์คํ๋ง ํ๋ ์์ํฌ์์ ์ ๊ณตํ๋ HandlerMapping ๋ค๊ฐ์ง.
BeanNameHandlerMapping, ControllerClassNameHandlerMapping, SimpleUrlHandlerMapping, DefaultAnnotationHandlerMapping
์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ง ์ ํ ํ ์๋ธ๋ฆฟ์ ์ค์ ํ์ผ์ ํธ๋ค๋ฌ ๋งตํ ๋ฐฉ์์ ์ง์ ํดํ๋ค.
์๋ธ๋ฆฟ์ ๋ฑ๋กํ๋ฉด ๊ทธ ์๋ธ๋ฆฟ์ด ์ฌ์ฉํ ์ค์ ํ์ผ์ด ์๋์ผ๋ก ๋ฑ๋ก๋๊ฒ ๋๋ค.
(/WEB-INF/servlet์ด๋ฆ-servelet.xml)
(์ถ๊ฐ์ ์ธ ์ค์ ํ์ผ์ ๋ฑ๋กํ ์๋ ์๋ค.
- BeanNameHandlerMapping

Bean ๋ฐฉ์์ default์ค์ ์ผ๋ก ๋์ด์์ด์ ๋ฐ๋ก ์ง์ ํ ํ์๋ ์๋ค.
- DefaultAnnotationHandlerMapping

์ฐ๋ฆฌ์๊ฒ ์ต์ํ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ๋งตํ ๋ฐฉ์์ด๋ค.



VIew๊ฐ์ฒด๊น์ง ๋ฐ์์ค๋ฉด ๊ทธ์ ์์ผ Dispatcher Servlet์ ๋ค์ response๋ฅผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ฐํํด์ฃผ๊ณ ์ด๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค์ ๋ณด๋ด์ง๋ค.
์๋ธ๋ฆฟ๊ณผ ์๋ธ๋ฆฟ์ ์ด์ฉํ๋ ์คํ๋ง ์น MVC ์ฐจ์ด

๊ธฐ์กด ์๋ธ๋ฆฟ์ Url๋น ์๋ธ๋ฆฟ ํ๋์ฉ ์์ฑํด์ผํ๋ค.
ํ์ง๋ง ์คํ๋ง ์น mvc์์๋ dispatcher servletํ๋๋ง ์์ผ๋ฉด ๋๋ค.
์๋ธ๋ฆฟ์ด ์์ฑ๋ ๋๋ง๋ค ๊ฐ๋ฐ์๊ฐ web.xml์์ ๋ฑ๋กํด์ฃผ๊ณ ๊ด๋ฆฌํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์์ผ๋,
์คํ๋ง ์น mvc์๋ ์๋ธ๋ฆฟ์ด ํ๋๋ง ์์ผ๋ฏ๋ก ๋ฑ๋กํด์ฃผ๊ณ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค. ํ๋ ์์ํฌ๊ฐ ์์์ ํด์ค๋ค.

๋ํ ๊ธฐ์กด์ ์๋ธ๋ฆฟ์ ํด๋น ์๋ธ๋ฆฟ ๊ฐ์ฒด์์ ์ปจํธ๋กค๋ฌ ๋ก์ง, ์๋น์ค ๋ก์ง, ๋ฐ์ดํฐ ๋ก์ง, view๊น์ง ๋ชจ๋ ์ํํ๋ค. J
ํ์ง๋ง ์คํ๋ง mvc๋ก ๋์ด์ค๋ฉด์ ์ข ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ค๊ณ๊ฐ ๊ฐ๋ฅํด์ก๋ค.
๋๊ธ๋จ๊ธฐ๊ธฐ