Servlet โ
๐ซ Servlet์ด๋
์๋ธ๋ฆฟ(Servlet)์ด๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ค์ ๋ฐํํด์ฃผ๋ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์๋ฒ์ฌ์ด๋ ์ธ์ด์ธ ์๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ค.
์ค๋์ ์น์ ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ด ์ค๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ผ์ผ์ด ์ ์ ์ผ๋ก ๋ง๋ค์ด์ ๋ณด๋ด์ค์ผํ๋ ๋ ธ์ค์ค๋ ฅ์ด ํ์ํ ์์ ๋ค์ด ์๊ตฌ๋์๋ค. ํนํ๋ ์ผ์ผ์ด ๊ฐ๋ฐ์๊ฐ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ ฅํ ์ ๋ณด๋ ์ฝ๋ ํ์ค ํ์ค๋ก ์ณ์ ๊ฒฐ๊ณผ๊ฐ์ ๋์์ฃผ๊ฑฐ๋ ํ๋ ๋งค์ฐ ๋ฒ๊ฑฐ๋ก์ด ์์ ๋ค์ด ํ์ํ๋ค. ๐คช
ํ์ง๋ง ์น ํ๋ก๊ทธ๋๋ฐ์ด ์ ์ ๋ฐ์ ํ๋ฉด์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์๋ง๊ฒ ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ์์ฑํ ์ ์๊ฒ ๋์๋ค. ์ฆ ์ ์ ์ ์ํธ์์ฉ์ด ๊ฐ๋ฅํ๊ฒ ๋ ๊ฒ์ด๋ค!
์์ ์ฌ์ง์ HTTP ์์ฒญ(Request)์ ์๋ต(Response) ๋ฉ์ธ์ง์ด๋ค. ๋ฑ ๋ด๋ ๊ท์ฐฎ์ ๋ณด์ด๊ณ ์์ฒญ๋ฐ๊ธฐ ์ซ๊ฒ ์๊ธฐ์ง ์์๋?? ๐จ
๊ฐ๋ฐ์๊ฐ ์ผ์ผ์ด ์ด๋ฅผ ํด์ํ๊ณ ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๊ณ ๊ธด ์๊ฐ์ด ํ์ํ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด ๊ท์ฐฎ์ ์ผ์ ์๋ธ๋ฆฟ์ด ๋์ ํด์ค๋ค!!
๊ทธ๋ฌ๋ฏ๋ก ์๋ธ๋ฆฟ์ด๋ ์ข์ ๋ ์์ ๊ฐ๋ฐ์๋ค์ด ์ค๋ก์ง ๋ก์ง์ ์ง๋๋ฐ์๋ง ์ง์คํ๊ฒ ๋ง๋ค์ด์ค๋ค.
์ ์ฌ์ง์ /HelloWorld์ URL์ด ํธ์ถ๋๋ฉด ์๋ธ๋ฆฟ ์ฝ๋๊ฐ ์คํ๋๋ค. @WebServlet(โ/HelloWorldโ)๋ผ๊ณ ์ ํ์๋ ๋ถ๋ถ์ด url๊ณผ Servlet์ ์ฐ๊ฒฐํด์ค๋ค๊ณ ์๊ฐํ์.
๊ทธ๋ฆฌ๊ณ HTTP ์์ฒญ ์ ๋ณด๋ฅผ ์ฌ์ฉ ํ ์ ์๋ HttpServletRequest์ ์๋ต ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ HttpServletResponse๊ฐ ์๋ค. ์ ๋ฌผ๋ก ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ด๋ ํ HTTP ํต์ ๋ฐฉ๋ฒ์ผ๋ก ์จ๊ฑด์ง์ ๋ฐ๋ผ์ ์คํ๋๋ doGet ํน์ doPost๊ฐ ์คํ๋๊ธดํ์ง๋ง ๋ง์ด๋ค. ๐
๋ฐ์ ์ฌ์ง์ Servlet๊ณผ Servlet Container์ ๊ตฌ๋ ์๋ฆฌ์ด๋ค.
โ๏ธ Servlet์ ๋์ ๋ฐฉ์
-
์ฌ์ฉ์๊ฐ ํด๋น url(์์ : localhost://8080/helloServlet)๋ก ์ ์์ ํ๋ฉด HTTP Request๊ฐ Servlet Container๋ก ์ ์ก
-
ํด๋ผ์ด์ธํธ๋จ์ ์์ฒญ์ ์ ์ก๋ฐ์ Servlet Container๋ HttpRequest, HttpResponse ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
-
์ฌ์ฉ์๊ฐ ์์ฒญํ url์ด ์ด๋ ์๋ธ๋ฆฟ์ ๋ํ ์์ฒญ์ธ์ง ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ web.xml์ ํตํด ์ฐพ๊ฒ ๋๋ค.
-
ํด๋ผ์ด์ธํธ์ GET, POST ๋ ์ค ์ด๋ค REST API๋ก ์์ฒญ์ด ๋ค์ด์จ๊ฑด์ง doGet(), doPost()์ด ํธ์ถ๋๋ค.
-
ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ ์ ๋ณด๋ค์ ์๋ธ๋ฆฟ์์ 1์ฐจ ๊ฐ๊ณต ํ Bean ํน์ JSP๋ก ์ค์ฝํ๋ฅผ ํตํด ๋๊ฒจ์ค๋ค. Forwarding์ด๋ผ๋ ๊ฒ๋ ์๋ค.
-
Bean์ ํตํด ์ฌ์ฉ์๊ฐ ์์ฒญํ ์ ๋ณด์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ ธ์ฌ ์ ๋ณด๋ค์ด ์์ผ๋ฉด 2์ฐจ๋ก ์ ๋ณด๋ฅผ ๊ฐ๊ณตํ๋ค.
-
์ต์ข ์ ์ผ๋ก๋ View๋ฅผ ๋งก๊ณ ์๋ JSP ๋ฑ์ ๋์ ํ์ด์ง๋ฅผ ์์ฑํ ํ HttpServletResponse ๊ฐ์ฒด์ ์๋ต์ ๋ณด๋ธ๋ค.
-
ํด๋ผ์ด์ธํธ๊ฐ ํด๋น ์๋ต์ ๋ฐ์์ผ๋ฉด HttpServletRequest, HttpServletResponse ๊ฐ์ฒด๋ฅผ ์๋ฉธํ๋ค.
โป๏ธ Servlet์ ๋ผ์ดํ์ฌ์ดํด
-
ํด๋ผ์ด์ธํธ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๋ค๋ฉด init() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ ์ฌ
-
ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ฐ๋ผ Service() ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ์ ๋ํ ์๋ต์ด doGet(), doPost()๋ก ๋๋ ์ง๊ณ HttpServletRequest, HttpServletResponse์ ์ํด request์ response ๊ฐ์ฒด๊ฐ ์ ๊ณต๋๋ค.
-
์ปจํ ์ด๋ ์๋ธ๋ฆฟ์ ์ข ๋ฃ ์์ฒญ์ ํ๋ฉด destroy() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. ์ข ๋ฃ์ ์ฒ๋ฆฌํด์ผํ๋ ๋ก์ง์ด ์๋ค๋ฉด destroy() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ๋ฉด ๋๋ค.
๐ฆ Servlet Container
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ค์ค๋ก ๋์ํ์ง ์๋ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํด์ฃผ๋ ์ปจํ ์ด๋๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๊ณ ์๋ตํ ์ ์๋๋ก ์น ์๋ฒ์ ์์ผ์ผ๋ก ํต์ ํ๋ค. ํฐ์บฃ์ด ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ๋ํ์ ์ธ ์์ด๋ค.
โ ๏ธ Servlet Container์ ์ญํ ๋ฐ ํน์ง
- ํฐ์บฃ์ฒ๋ผ ์๋ธ๋ฆฟ์ ์ง์ํ๋ WAS(Web Application Server)๋ฅผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ผ ํ๋ค.
- ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์์ฑ, ์ด๊ธฐํ, ํธ์ถ, ์ข ๋ฃ๊น์ง ๊ด๋ฆฌํด์ฃผ๋ ๋ผ์ดํ์ฌ์ดํด ๊ด๋ฆฌ
- ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌ
- ๋์ ์์ฒญ์ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ธฐ์ํ ๋ฉํฐ์ฐ๋ ๋ ์ง์ ๊ฐ๋ฅ