๐ก
Servlet๊ณผ Servlet Container๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ , ์๋ธ๋ฆฟ์ด ๋์ํ๋ ๊ณผ์ ๊ณผ ์๋ธ๋ฆฟ์ ์๋ช
์ฃผ๊ธฐ๊น์ง ์์๋ณด์ :>
: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผย ๋ฐํํ๋ย Servlet ํด๋์ค์ ๊ตฌํ ๊ท์น์ ์งํจ ์๋ฐ ์น ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ด๋ค. ๊ฐ๋จํ ๋งํด, ์๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์น ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํ์ํ ๊ธฐ์ ์ด๋ค. ์ด๋ฌํ ์๋ธ๋ฆฟ์ WAS(Web Application Server)์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ์์์ ๋์ํ๋ค.
Servlet๊ณผ WAS?
WAS๋Web Server + Web Container(Servlet Container)๋ก ๋์ด ์๋ค.Web Server + WAS์ ๊ธฐ๋ฅ์ ๋ชจ๋ ํ๋ค. ๊ทธ๋์ ์ ์ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ฉด์๋(Web Server), ์น ์ปจํ ์ด๋๋ฅผ ์ด์ฉํด ๋ด๋ถ ๋ก์ง์ ๊ฑฐ์ณ ๋์ ํ์ด์ง(WAS)๋ฅผ ๋ณด์ฌ์ค ์ ์๊ฒ ๋๋ค. ์๋ฐ๋ ์น ๊ตฌํ ๊ธฐ์ ๋ก Servlet์ ์ฌ์ฉํ๋ฉฐ, ์ด ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํด ์ฃผ๋ ๊ฒ์ด Servlet Container์ด๋ค. โก๏ธ WAS๊ฐ Servlet Container๋ฅผ ํฌํจํ๋ ๊ฐ๋ ์ผ๋ก ์ดํดํ๋ฉด ๋๊ฒ ๋ค! :>
- ์น์ปจํ ์ด๋ == ์๋ธ๋ฆฟ์ปจํ ์ด๋
- WAS๊ฐ ์น์ปจํ ์ด๋(์๋ธ๋ฆฟ์ปจํ ์ด๋)๋ฅผ ํฌํจํจ
- ์ค๋ฌด์์๋ WAS == ํฐ์บฃ์ผ๋ก ์ธ์ง
- WAS๋ ์ฌ์ค์ ์น์๋ฒ+WAS ์ญํ ์ ๋ ๋ค ํจ
์๋ธ๋ฆฟ์ ํํฐ์ ๋ฆฌ์ค๋?
: ํ ๋ฒ ์ค์ ์ ํด๋๋ฉด ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ ์๋ก ์ฝ๋๋ฅผ ์ ๋ ฅํ์ง ์์๋ ์๋์ผ๋ก ์คํํด ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
๐งํํฐ
์๋ธ๋ฆฟ ์คํ ์ , ๋จผ์ ๋์ํ์ฌ ์๋ธ๋ฆฟ์ ์ฌ์ ์ฒ๋ฆฌ ์์ ์ํ
์๋ธ๋ฆฟ ์คํ ํ, ์๋ต ๋ฉ์์ง๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ ์ก๋๊ธฐ ์ ์ ์ฌํ ์ฒ๋ฆฌ ์์ ์ํ
๐ง๋ฆฌ์ค๋
ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์คํ (์ค๊ฐ๋ ์์ฒญ-์๋ต๊ณผ๋ ๊ด๊ณ X)
Listener[์ฒญ์ทจ์] : ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๊ธธ ๊ณ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค.
: ๋ง ๊ทธ๋๋ก ์๋ธ๋ฆฟ์ ๋ด๊ณ ๊ด๋ฆฌํด ์ฃผ๋ ์ปจํ ์ด๋์ด๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๊ตฌํ๋์ด ์๋ servlet ํด๋์ค์ ๊ท์น์ ๋ง๊ฒ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํด ์ฃผ๋ฉฐ, ํด๋ผ์ด์ธํธ์์ ์์ฒญ์ ํ๋ฉด ์ปจํ ์ด๋๋ HttpServletRequest, HttpServletResponse ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ post, get ์ฌ๋ถ์ ๋ฐ๋ผ ๋์ ์ธ ํ์ด์ง๋ฅผ ์์ฑํด ์๋ตํด ์ค๋ค.
HttpServletRequest
: HTTP ํ๋กํ ์ฝ์ ์์ฒญ ์ ๋ณด๋ฅผ ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ฉฐ ํค๋ ์ ๋ณด, ํ๋ผ๋ฏธํฐ, ์ฟ ํค, URI, URL ๋ฑ์ ์ ๋ณด๋ฅผ ์ฝ์ด ๋ค์ด๋ ๋ฉ์๋์ Body์ Stream์ ์ฝ์ด ๋ค์ด๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
HttpServletResponse
: ์ด๋ค ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋๋์ง ์์๋๊ณ ํด๋น ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ค. WAS๋ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌํ๊ณ ์ด ๊ฐ์ฒด๋ฅผ ํ์ฉํ์ฌ content type, ์๋ต ์ฝ๋, ์๋ต ๋ฉ์์ง ๋ฑ์ ์ ์กํ๋ค.
์๋ธ๋ฆฟ ์๋ช
์ฃผ๊ธฐ ๊ด๋ฆฌ
: ์๋ธ๋ฆฟ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌํ๋ค. ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ๊ธฐ๋๋๋ฉด ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ๋ก๋ฉ์์ ์ธ์คํด์คํํ๊ณ , ์ด๊ธฐํ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ , ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ ์ ํ ์๋ธ๋ฆฟ ๋ฉ์๋๋ฅผ ์ฐพ์์ ๋์ํ๊ณ , ์๋ธ๋ฆฟ์ ์๋ช
์ด ๋คํ๋ฉด ๊ฐ๋น์ง ์ปฌ๋ ์
์ ํตํด ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ค.
ํต์ ์ง์
: ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ์์ฃผ๊ณ ์์ฒญ์ ๋ณด๋ผ ์ ์๊ฒ ์น ์๋ฒ์ ์์ผ์ ๋ง๋ค์ด์ ํต์ ์ ํด์ค๋ค. ํต์ ์ ํ๊ธฐ ์ํ ์์
(์์ผ ๋ง๋ฆ / ํฌํธ ๋ฆฌ์ค๋ / ์คํธ๋ฆผ ์์ฑํด ์์ฒญ๋ฐ์)์ ๋ชจ๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ๋์ ํด ์ฃผ๋ ๊ฒ์ด๋ค. ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ์ด๋ฌํ ๊ธฐ๋ฅ๋ค์ API๋ก ์ ๊ณตํ์ฌ ๋ณต์กํ ๊ณผ์ ์ ์๋ตํ ์ ์๊ฒ ํด ์ฃผ๊ณ , ๊ฐ๋ฐ์์๊ฒ ๋น์ฆ๋์ค ๋ก์ง์ ๋์ฑ ์ง์คํ ์ ์๊ฒ ๋ง๋ค์ด ์ค๋ค.
๋ฉํฐ ์ค๋ ๋ ์ง์, ๊ด๋ฆฌ
: ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ํด๋น ์๋ธ๋ฆฟ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ค๋ ๋๋ฅผ ์์ฑํด์ ์์
์ ์ํํ๋ค. ๊ทธ๋ ๊ธฐ์ ๋์์ ์ฌ๋ฌ ์์ฒญ์ด ๋ค์ด์๋ ๋ฉํฐ์ค๋ ๋ฉ ํ๊ฒฝ์ผ๋ก ๋์๋ค๋ฐ์ ์์
์ ๊ด๋ฆฌํ ์ ์๋ค.
์ ์ธ์ ์ธ ๋ณด์ ๊ด๋ฆฌ
: ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ๋ณด์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ์ง์ํด ์๋ธ๋ฆฟ ๋๋ ์๋ฐ ํด๋์ค ์์ ๋ณด์ ๊ด๋ จ๋ ๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์์๋ ๋๋ค.

์ ๋ฐ์ ์ธ ํ๋ฆ
ํด๋ผ์ด์ธํธ๊ฐ ์น ์๋ฒ์ ์์ฒญํ๋ฉด ์น ์๋ฒ๋ ์ด๋ฅผ ํด์ํ์ฌ ์ ์ ์์์ ๋ํ ์์ฒญ์ผ ๊ฒฝ์ฐ ์์์ ๋ฐํํด ์ฃผ๊ณ , ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ๊ทธ ์์ฒญ์ Tomcat๊ณผ ๊ฐ์ ์น ์ปจํ ์ด๋์ ์์ํ๋ค. ๊ทธ๋ฌ๋ฉด ์น ์ปจํ ์ด๋๋ ๊ฐ ์์ฒญ์ ํด๋นํ๋ Servlet์ ์คํํ๋ค. ๊ทธ๋ฆฌ๊ณ Servlet์ ์์ฒญ์ ๋ํ ๊ธฐ๋ฅ์ ์ํํ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํด ํด๋ผ์ด์ธํธ์ ์ ์กํ๋ค.
(์ฐธ๊ณ ) ์๋ธ๋ฆฟ ํ์
public class FirstServlet extends HttpServlet { @Override public void init() { ... } @Override public void doGet(HttpServletRequest req, HttpServletResponse resp) { ... } @Override public void doPost(HttpServletRequest req, HttpServletResponse resp) { ... } @Override public void destroy() { ... } }
: ์๋ธ๋ฆฟ๋ ์๋ฐ ํด๋์ค์ด๋ฏ๋ก ์คํํ๋ฉด ์ด๊ธฐํ๋ถํฐ ์๋น์ค ์ํ ํ ์๋ฉธํ๊ธฐ๊น์ง์ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด ๊ณผ์ ์ ์๋ธ๋ฆฟ์ ์๋ช
์ฃผ๊ธฐ๋ผ ํ๋ฉฐ, ๊ฐ ๋จ๊ณ๋ง๋ค ํธ์ถ๋์ด ๊ธฐ๋ฅ์ ์ํํ๋ ๋ฉ์๋๋ฅผ ์๋ธ๋ฆฟ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ผ ํ๋ค.
ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์ปจํ ์ด๋๋ ํด๋น ์๋ธ๋ฆฟ์ด ๋ฉ๋ชจ๋ฆฌ์ ์๋์ง ํ์ธํ๊ณ , ์์ ๊ฒฝ์ฐ init() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค. init()์ ์ฒ์ ํ ๋ฒ๋ง ์คํ๋๊ธฐ ๋๋ฌธ์, ์๋ธ๋ฆฟ์ ์ค๋ ๋์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํด์ผ ํ๋ ๊ฒ์ด ์๋ค๋ฉด ์ค๋ฒ๋ผ์ด๋ฉ ํ์ฌ ๊ตฌํํ๋ฉด ๋๋ค. ์คํ ์ค ์๋ธ๋ฆฟ์ด ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, ๊ธฐ์กด ์๋ธ๋ฆฟ์ destroy()ํ๊ณ init()์ ํตํด ์๋ก์ด ๋ด์ฉ์ ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ๋ค.
init()์ด ํธ์ถ๋ ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ์ service() ๋ฉ์๋๋ฅผ ํตํด ์์ฒญ์ ๋ํ ์๋ต์ด doGet()๊ณผ doPost()๋ก ๋ถ๊ธฐ๋๋ค. ์ด๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ์ค๋ฉด ๊ฐ์ฅ ๋จผ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ผ๋ก ์์ฑ๋ HttpServletRequest, HttpServletResponse์ ์ํด request์ response ๊ฐ์ฒด๊ฐ ์ ๊ณต๋๋ค.
์ปจํ
์ด๋๊ฐ ์๋ธ๋ฆฟ์ ์ข
๋ฃ ์์ฒญ์ ํ๋ฉด destroy() ๋ฉ์๋๊ฐ ํธ์ถ๋๋๋ฐ, ์ด๋ ํ ๋ฒ๋ง ์คํ๋๋ฉฐ, ์ข
๋ฃ ์์ ์ฒ๋ฆฌํด์ผ ํ๋ ์์
๋ค์ destroy() ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ฌ ๊ตฌํํ๋ฉด ๋๋ค.
์ด๊ธฐํ : init()
์์ ์ํ : service()
์ข ๋ฃ : destroy()