์๋ธ๋ฆฟ์ ๊ฐ๋ ๊ณผ ์๋์๋ฆฌ
์๋ฐ ์น ๊ฐ๋ฐ์์ ๊ผญ ์์์ผ ํ ๊ฒ์ด ์๋ธ๋ฆฟ(Servlet)๊ณผ ์คํ๋ง(Spring) ํ๋ ์์ํฌ์ ๋๋ค. ์ด๋ค์ ์๋ฐ ๊ธฐ๋ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ํต์ฌ ๊ธฐ์ ์ด๊ฑฐ๋ ์. ์๋ธ๋ฆฟ(Servlet)์ ์๋ฐ๋ฅผ ์ฌ์ฉํ์ฌ ์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ ๊ธฐ์ ์ด๋ฉฐ, ์คํ๋ง(Spring) ๋ค์ํ ์น ๊ฐ๋ฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํ๋ ์์ํฌ์ ๋๋ค. ๊ทธ๋ ๋ค๋ฉด "์น ํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๋ค"๋ผ๋ ๊ฒ์ด ๋ฌด์จ ๋ป์ผ๊น์? ์ ์ ์ธ HTML๊ณผ ๋น๊ตํด๋ณด๋ฉด ์ฝ๊ฒ ์ดํดํ ์ ์์ต๋๋ค.
1. ์ ์ ์นํ์ด์ง, ๋์ ์นํ์ด์ง๋ ๋ญ๊น?
1-1. ์ ์ ์น ํ์ด์ง (static web pages)
์ธ์ ์ ์ํด๋ ๊ฐ์ ์๋ต์ ๋ณด๋ด์ฃผ๋ ํ์ด์ง์
๋๋ค. ์ ์ ์ธ ์น ํ์ด์ง๋ ์๋ฒ์ ๋ฏธ๋ฆฌ ์ ์ฅ๋ HTML ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ผ๋ฉฐ ๋ด์ฉ์ด ๊ณ ์ ๋์ด ์์ด์ ์ฌ์ฉ์์ ์์ฒญ์ด๋ ์ํ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ฌ์ฉ์์ ์์ฒญ์ด๋ ์ํ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ง ์๋๋ค๋ ๊ฒ์ ๋ฌด์จ ๋ป์ผ๊น์?
์ฌ์ฉ์(Client)์ ์์ฒญ(request)์ด๋ ์ฐ๋ฆฌ๊ฐ '๋ง์ฐ์ค๋ก ๋ฌด์ธ๊ฐ๋ฅผ ํด๋ฆญ'ํ๋ ํ๋์ ๋น์ ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํ๊ณ ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ด๋๊ฐ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ๋์ง ํ์ธํ๋ ๊ณผ์ ์ด ์ด๋ฃจ์ด์ง๊ณ ๋ง์ฝ ์ผ์นํ๋ฉด 'ใ
ใ
ใ
๋ ํ์ํฉ๋๋ค'์ ๊ฐ์ ๋ฌธ๊ตฌ๊ฐ ํ๋ฉด์ ๋์์ง๋๋ค. ์ด๋ฅผ '์๋ฒ๊ฐ ์๋ต(response)'ํ๋ค๊ณ ํํํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ ์ธ ์น ํ์ด์ง๋ ๋ผ๋์ ๊ณจ๊ฒฉ๋ง ์๋ ๊ทธ๋ฆผ์ ๋น์ ํ ์ ์๊ฒ ์ฃ . ๋ง์ฝ ๊ตฌ๊ธ ํํ์ด์ง์ ๋ค์ด๊ฐ๋๋ฐ ๋ก๊ทธ์ธ, ํ์๊ฐ์
, ๊ฒ์๋ฒํผ์ ๋๋ฌ๋ ์๋ฌด ๋ฐ์์ด ์๋ค๋ฉด ์ธ๋ชจ๊ฐ ์์ ๊ฒ์
๋๋ค. ๊ทธ๋์ ์๋ธ๋ฆฟ์ผ๋ก ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํ์ฌ๋ ๊ฐ์ธ์ ์๊ฐ ํ์ด์ง๊ฐ ์ ์ ์น ํ์ด์ง์ ์ข์ ์์์
๋๋ค. ์ฃผ๋ก ๊ฐ๋จํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ๋ด์ฉ์ด ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฒ์ ์๋ ํ์ผ์ ๊ทธ๋๋ก ์ฌ์ฉ์(Clinet)์๊ฒ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๋ ๋น ๋ฅด๊ณ ์๋ฒ ์์์ ์ ๊ฒ ์ฌ์ฉํด์.
์ ์ ์ธ ์นํ์ด์ง(Static Web Pages):
- ์ ์ ์ธ ์นํ์ด์ง๋ ์๋ฒ์ ๋ฏธ๋ฆฌ ์ ์ฅ๋ HTML ํ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
- ๋ด์ฉ์ด ๊ณ ์ ๋์ด ์์ด, ์ฌ์ฉ์์ ์์ฒญ์ด๋ ์ํ์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค.
- ์ฃผ๋ก ๊ฐ๋จํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๊ฑฐ๋, ํ์ฌ ์๊ฐ ํ์ด์ง์ ๊ฐ์ด ๋ด์ฉ์ด ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋ฒ์ ์๋ ํ์ผ์ ๊ทธ๋๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๊ฐ ๋น ๋ฅด๊ณ ์๋ฒ ์์์ ์ ๊ฒ ์ฌ์ฉํฉ๋๋ค.
1-2. ๋์ ์น ํ์ด์ง (dynamic web pages)
์ฐ๋ฆฌ๊ฐ ์น์ฌ์ดํธ์ ์ ์ํ๋ฉด ํ๋ฉด์ ๊ฐ์ฅ ๋จผ์ ์ ์ ์ธ ํ์ด์ง ๋ฐ์ดํฐ(HTML ๋ก ๋ง๋ค์ด์ง ๊ทธ๋ฆผ ๋ฑ)๊ฐ ๋ณด์ฌ์ง๊ณ , ๋ถ๋ถ์ ์ผ๋ก ํ์ํ ๊ณณ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ์์
์ด ์ด๋ฃจ์ด์ง๋๋ค. ๋๊ธ, ๋ ์จ, ์ฃผ๊ฐ ์ ๋ณด ๋ฑ๊ณผ ๊ฐ์ด ์ ๋ณด ๋ณ๊ฒฝ์ด ์ฆ์ ๊ณณ์ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฒ์ด ๋์ ์นํ์ด์ง์ธ๋ฐ์. ์ฌ์ฉ์์ ์๊ตฌ์ ๋ฐ๋ผ ์ํธ์์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋๊ทธ๋ ๋ค์ํ ๋ฐ์ดํฐ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ ์นํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
๋์ ์น ํ์ด์ง์์๋ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์์ฒญ์ ํ๊ณ , ์๋ฒ๋ ์์ฒญ ์ฒ๋ฆฌ ๊ณผ์ ์ ๊ฑฐ์ณ ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ ๋ณด๋ด์ฃผ๋ ๊ณผ์ ์ด ์ผ์ด๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ๋ฌ๋ถ์ด ์ผํ ์น์ฌ์ดํธ์ ์ ์ํ๋ค๊ณ ์์ํด๋ณด์ธ์. ์ฌ์ฉ์๊ฐ ํน์ ์นดํ
๊ณ ๋ฆฌ์ ์ํ์ ํํฐ๋งํ๊ฑฐ๋ ๊ฒ์ํ๋ ๊ฒฝ์ฐ, ์๋ธ๋ฆฟ์ ํด๋น ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ํํฐ๋ง๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ํ ๋์ ์ธ HTML ํ์ด์ง๋ฅผ ์์ฑํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ์น์ฌ์ดํธ์ ๋ก๊ทธ์ธํ๋ ๊ณผ์ ์ ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๊น์? ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ์๋ํ ๋, ์๋ธ๋ฆฟ์ ์ ์ถ๋ ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธํ๊ณ , ๋ก๊ทธ์ธ์ด ์ฑ๊ณตํ๋ฉด ์ฌ์ฉ์์๊ฒ ๊ฐ์ธํ๋ ํ์ ๋ฉ์์ง์ ํจ๊ป ๋ก๊ทธ์ธ ํ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค๋๋ค. ํ์ง๋ง ์ด๋ฆ๊ณผ ๋น๋ฐ๋ฒํธ๊ฐ ์ผ์นํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฃ . ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํฌํจํ ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋ค์ ํ์ํ ์ ์์ต๋๋ค. ์๋ธ๋ฆฟ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋ค์ํ ๋ฐ์ดํฐ๋ ์กฐ๊ฑด์ ๋ฐ๋ผ ์นํ์ด์ง์ ๋ด์ฉ์ด ๋์ ์ผ๋ก ๋ณ๊ฒฝ๋์ด ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ฉ๋๋ค.
๋์ ์ธ ์นํ์ด์ง(Dynamic Web Pages):
- ๋์ ์ธ ์นํ์ด์ง๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๋ผ ์๋ฒ ์ธก์์ ์์ฑ๋๋ ํ์ด์ง์ ๋๋ค.
- ์๋ฒ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ๋ถ API ๋ฑ๊ณผ ์ํธ์์ฉํ์ฌ ํ์ด์ง์ ๋ด์ฉ์ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค.
- ์ฌ์ฉ์์ ์์ฒญ์ ๋ฐ๋ผ ๋ด์ฉ์ด ๋ณํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ๋ก๊ทธ์ธ ์ํ, ๊ฒ์ ๊ฒฐ๊ณผ, ์ฌ์ฉ์ ์ง์ ์ฝํ ์ธ ๋ฑ์ ํ์ํ ์ ์์ต๋๋ค.
- ์ฃผ๋ก ์ฌ์ฉ์์ ์ํธ์์ฉ์ด ํ์ํ๊ฑฐ๋, ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ง๋ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋์ ํ์ด์ง๋ ์๋ฒ ์ธก์์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ ์๋๋ ์ ์ ํ์ด์ง๋ณด๋ค ๋๋ฆด ์ ์์ต๋๋ค. ๋ํ ์๋ฒ ์์์ ๋ ๋ง์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
2.์๋ธ๋ฆฟ(Servlet)์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์๋ ์๋ฆฌ
2-1. ์๋ธ๋ฆฟ(Servlet)์ด๋?
์๋ฐ ์๋ธ๋ฆฟ์ ์๋ฒ ์ธก์์ ๋์ ์น ํ์ด์ง๋ฅผ ์์ฑํ๊ธฐ ์ํ ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์
๋๋ค. ์ฝ๊ฒ ๋งํด ์๋ธ๋ฆฟ์ ํด๋ผ์ด์ธํธ์ HTTP์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ์ ์
๋๋ค.
์๋ธ๋ฆฟ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ(์: Apache Tomcat)์ ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์์ ์คํ๋ฉ๋๋ค. ์ฌ์ฉ์(ํด๋ผ์ด์ธํธ)๋ก๋ถํฐ HTTP ์์ฒญ์ด ๋ค์ด์ค๋ฉด, ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ๋ ํด๋น ์์ฒญ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ์ ๋ฌํฉ๋๋ค. ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ์์ฒญ์ ๋ฐ๋ผ ์๋ธ๋ฆฟ์ ๊ด๋ฆฌํ๋ ์ค์ํ ์ญํ ์ ํด์.
์๋ธ๋ฆฟ ์ปจํ
์ด๋๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ ์๋ธ๋ฆฟ์ ์ฐพ์ ๋ก๋ฉ, ์ด๊ธฐํ, ์คํ, ์ข
๋ฃํ๋ ์์
์ ์ฒ๋ฆฌํ๋ฉด, ๊ทธ ์คํ ๊ฒฐ๊ณผ๋ HTTP ์๋ต ํํ๋ก ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก๋ผ์. ์ด ๊ณผ์ ์ ํตํด ๋์ ์ธ ์น ํ์ด์ง๊ฐ ์์ฑ๋ฉ๋๋ค. ๋ ์์ธํ ์์๋ณผ๊น์?
2-2. ์๋ธ๋ฆฟ(Servlet)์ ๊ตฌ์กฐ
(์ฌ๊ธฐ๋ถํฐ๋ ๊ด์ฌ ์๋ ์ฌ๋๋ง ์ฝ์ผ์ธ์)
์๋ธ๋ฆฟ์ ์๋ฐ๋ก ์์ฑ๋ ํด๋์ค์
๋๋ค. ์ด ํด๋์ค๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์์ค ์ฝ๋ ๋๋ ํ ๋ฆฌ์ ํฌํจ๋์ด ์์ต๋๋ค. ๋ณดํต์ src ๋๋ java ๋๋ ํ ๋ฆฌ ๋ด์ ํจํค์ง ๊ตฌ์กฐ์ ๋ง์ถฐ์ ์์นํ๊ฒ ๋ฉ๋๋ค.
์ฌ๊ธฐ์ WEB-INF/classes ๋๋ ํ ๋ฆฌ์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ๋๋ ์๋ธ๋ฆฟ๊ณผ ๋ค๋ฅธ ์๋ฐ ํด๋์ค ํ์ผ๋ค์ด ์์นํฉ๋๋ค. ํจํค์ง ๊ตฌ์กฐ์ ๋ง๊ฒ ํด๋์ค ํ์ผ์ ๋ฃ์ด์ค๋๋ค. ์๋ฅผ ๋ค์ด, ๋ง์ฝ ํจํค์ง๊ฐ com.example.servlet๋ผ๊ณ ๊ฐ์ ํด ๋ด ์๋ค. ํด๋น ํจํค์ง ๋ด์ MyServlet.java ๋ผ๋ ์๋ธ๋ฆฟ ํ์ผ์ด ์๋ค๋ฉด ํด๋น ํ์ผ์ ๋ค์ ๊ฒฝ๋ก์ ์์นํ ๊ฒ์ ๋๋ค:
์ด๋ ๊ฒ ์๋ธ๋ฆฟ ํด๋์ค๋ค์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ผ๋ถ๋ก ํจํค์ง๋์ด ๋ฐฐํฌ๋ฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ WAR(Web ARchive) ํ์ผ๋ก ํจํค์งํ ๋, ์ด๋ฌํ ์๋ธ๋ฆฟ ํด๋์ค๋ค๋ WAR ํ์ผ์ ํฌํจ๋์ด ๋ฐฐํฌ๋ฉ๋๋ค.
* ๊ถ๊ธํ์ ๋ถ๋ค์ ์ํด ๊นจ์ TMI ์์์ ์๋ธ๋ฆฟ์ ํด๋์ค ํ์ผ์ด๋ผ๊ณ ํ๋๋ฐ ์ ์ฌ๊ธฐ์ ํ์ฅ์๊ฐ .java๋๊ตฌ์?
์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ์ปดํ์ผํ ํ์๋ ํด๋์ค ํ์ผ์ด ์์ฑ๋๋๋ฐ, ์ด ํ์ผ์ ํ์ฅ์๋ .class์
๋๋ค. ์ด๋ ๊ฒ ์ปดํ์ผ๋ ์๋ธ๋ฆฟ ํด๋์ค ํ์ผ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋์ค ๊ฒฝ๋ก์ ์์นํ๊ฒ ๋ฉ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฐฐํฌํ ๋๋ ์๋ธ๋ฆฟ ํด๋์ค ํ์ผ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์น ์ ํ๋ฆฌ์ผ์ด์
์์๋ค๊ณผ ํจ๊ป WAR(Web ARchive) ํ์ผ๋ก ํจํค์ง๋ฉ๋๋ค. ์ด๋ฌํ WAR ํ์ผ์ ์น ์ ํ๋ฆฌ์ผ์ด์
์๋ฒ์ ๋ฐฐํฌ๋์ด ์คํ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์๋ธ๋ฆฟ์ ํ์ฅ์๋ .java๊ฐ ์๋๋ผ .class์
๋๋ค. ํ์ง๋ง ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ํ์ผ์ ํ์ฅ์๋ ์ผ๋ฐ์ ์ผ๋ก .java์
๋๋ค.
2-3. ์๋ธ๋ฆฟ(Servlet)์ ์๋ ์๋ฆฌ
๊ฐ๋ฐ์ ๊ด์ ์์ ๋ณธ ์๋ธ๋ฆฟ์ ์๋ ์๋ฆฌ:
- ์๋ธ๋ฆฟ ํด๋์ค ์์ฑ: ๊ฐ๋ฐ์๋ javax.servlet.Servlet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ์๋ฐ ํด๋์ค๋ฅผ ์์ฑํฉ๋๋ค. ์ด ํด๋์ค์์ ์ฃผ๋ก ๋ฉ์๋๋ก init(), service(), doGet(), doPost(), destroy() ๋ฑ์ด ์์ต๋๋ค. (+ํ๋จ์ ์ถ๊ฐ๋ก ๊ฐ ๋ฉ์๋์ ์ญํ ์ ์ ๋ฆฌํด๋๋ฆฌ๊ฒ ์ต๋๋ค.)
- ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐฐํฌ: ์์ฑ๋ ์๋ธ๋ฆฟ ํด๋์ค๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋๋ ํ ๋ฆฌ(WAR ํ์ผ ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ)์ ๋ฐฐ์น๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๊ตฌ๋: ์๋ธ๋ฆฟ ์ปจํ ์ด๋(์: Apache Tomcat)๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐฐํฌํ๊ณ ์์ํฉ๋๋ค. ์ด ๊ณผ์ ์์ ์๋ธ๋ฆฟ ํด๋์ค๋ ๋ก๋๋๊ณ ์ธ์คํด์คํ๋ฉ๋๋ค.
์๋ธ๋ฆฟ์ ์๋ ์๋ฆฌ:
- ์์ฒญ ์ฒ๋ฆฌ: ํด๋ผ์ด์ธํธ๊ฐ ์๋ธ๋ฆฟ์ ๋ํ ์์ฒญ์ ๋ณด๋ ๋๋ค. ์ด ์์ฒญ์ HTTP ํ๋กํ ์ฝ์ ํตํด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ก ์ ์ก๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์๋ธ๋ฆฟ ๋งคํ: ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ๋ URL์ ํด๋นํ๋ ์๋ธ๋ฆฟ์ ์ฐพ์ต๋๋ค. ์ด๋ฅผ ์ํด ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์น ์ดํ๋ฆฌ์ผ์ด์ ๋์คํฌ๋ฆฝํฐ(web.xml) ๋๋ ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ์ ์๋ธ๋ฆฟ ๋งคํ์ ์ฐธ์กฐํฉ๋๋ค.
- ์์ฒญ ์ฒ๋ฆฌ ๋ฐ ์๋ต ์์ฑ: ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ํด๋น ์๋ธ๋ฆฟ์ service() ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์ด ๋ฉ์๋๋ ์์ฒญ์ HTTP ๋ฉ์๋(GET, POST ๋ฑ)์ ๋ฐ๋ผ doGet(), doPost() ๋ฑ์ ์ ์ ํ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค. ์๋ธ๋ฆฟ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ์์ฑํฉ๋๋ค.
- ์๋ต ์์ฑ ํ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ก: ์์ฑ๋ HTML ํ์ด์ง๋ ์๋ธ๋ฆฟ์ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ์๋ต์ผ๋ก ์ ์ก๋ฉ๋๋ค. ์ด ์๋ต์ HTTP ์๋ต์ผ๋ก์ ํด๋ผ์ด์ธํธ์ ๋ธ๋ผ์ฐ์ ์์ ๋ ๋๋ง๋์ด ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ง๋๋ค.
- HTML ์์ฑ: ์๋ธ๋ฆฟ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก HTML์ด๋ ๋ค๋ฅธ ๋งํฌ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์นํ์ด์ง์ ๋ด์ฉ์ ๋์ ์ผ๋ก ์์ฑํฉ๋๋ค. ์ด๋ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ ๋ฑ์ ์ฌ์ฉํ์ฌ ํ์ด์ง์ ๋์ ์ธ ๋ถ๋ถ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ์๋ธ๋ฆฟ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์ธ๋ถ API ๋ฑ ๋ค์ํ ์์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด ๋ฐ์ดํฐ๋ ์นํ์ด์ง์ ๋ด์ฉ์ ๋์ ์ผ๋ก ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ์ ์๋ฉธ: ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋ ์ด์ ํ์ํ์ง ์์ ์๋ธ๋ฆฟ์ ์๋ฉธ์ํต๋๋ค. ์ด๋ ์ฃผ๋ก ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์ข ๋ฃ๋ ๋ ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ ๋ก๋๋ ๋ ๋ฐ์ํฉ๋๋ค.
2-4. ์๋ธ๋ฆฟ(Servlet) ํด๋์ค ์์ฑํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ์๋ฐ ๋ฉ์๋(TMI)
- init():
- ์ด ๋ฉ์๋๋ ์๋ธ๋ฆฟ์ด ์ต์ด๋ก ์์ฑ๋ ๋ ํ ๋ฒ ํธ์ถ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ ์ด๊ธฐํ์ ํ์ํ ์์ ๋ค์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ์ด๊ธฐํํ๊ฑฐ๋ ์ค์ ์ ๋ก๋ํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
- service():
- ์ด ๋ฉ์๋๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ํด ํธ์ถ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์์ฒญ์ HTTP ๋ฉ์๋(GET, POST ๋ฑ)์ ๋ฐ๋ผ ์ ์ ํ ๋ฉ์๋(doGet(), doPost() ๋ฑ)๋ฅผ ํธ์ถํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํฉ๋๋ค.
- ๋ณดํต ์๋ธ๋ฆฟ ๊ฐ๋ฐ์๊ฐ ์ด ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํ์ง ์๊ณ , HttpServlet ํด๋์ค์ service() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค.
- doGet():
- ์ด ๋ฉ์๋๋ HTTP GET ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ธ๋ฆฟ์ GET ๋ฐฉ์์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋์ด ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฃผ๋ก ๋ฐ์ดํฐ ์กฐํ ๋ฑ์ ์์ฒญ์ ์ฌ์ฉ๋ฉ๋๋ค.
- doPost():
- ์ด ๋ฉ์๋๋ HTTP POST ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ธ๋ฆฟ์ POST ๋ฐฉ์์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ฉด ์ด ๋ฉ์๋๊ฐ ํธ์ถ๋์ด ์ฒ๋ฆฌํฉ๋๋ค.
- ์ฃผ๋ก ๋ฐ์ดํฐ ์ถ๊ฐ, ์์ , ์ญ์ ๋ฑ์ ์์ฒญ์ ์ฌ์ฉ๋ฉ๋๋ค.
- destroy():
- ์ด ๋ฉ์๋๋ ์๋ธ๋ฆฟ์ด ์๋ฉธ๋ ๋ ํธ์ถ๋ฉ๋๋ค.
- ์๋ธ๋ฆฟ์ด ์ข ๋ฃ๋ ๋ ํ์ํ ๋ง๋ฌด๋ฆฌ ์์ ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ์ ๋ซ๊ฑฐ๋ ๋ฆฌ์์ค๋ฅผ ์ ๋ฆฌํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์ด๋ฐ ๋ฐฉ์์ผ๋ก ์๋ฐ ์๋ธ๋ฆฟ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์ ๋์ ์ธ ์ฝํ
์ธ ์์ฑ์ ํตํด ์นํ์ด์ง๋ฅผ ๋์ ์ผ๋ก ์์ฑํ๊ณ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๊ณตํฉ๋๋ค. :) ๋ง์ ๋์์ด ๋์
จ๋์? ์ง๋ฌธ์ด ์์ผ๋ฉด ๋๊ธ์ ๋จ๊ฒจ ์ฃผ์ธ์!
๊ฐ์ฌํฉ๋๋ค.
์ค์ ์ฝ๋์ ์๋ฐ ์ค๋ ๋ํ์ ๊ดํ ์ ๋ฆฌ๊ฐ ์ ๋ ๋ธ๋ก๊ทธ โผ
์๋ธ๋ฆฟ์ ๋์ ์๋ฆฌ์ ๋ผ์ดํ ์ฌ์ดํด(life cycle) ์ ๋ฆฌ ์ ๋ ๋ธ๋ก๊ทธ โผ
'Coding > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ์๋ฐ ์ถ์ํด๋์ค / ์ธํฐํ์ด์ค ์๋ฒฝ ์ ๋ฆฌ (์ค๋ฅ ๋ฐ์ ๋ฌธ์ ๋ชจ์!!) (3) | 2024.10.18 |
---|---|
(์๋ฐ) ๋ก๊ทธ์ธ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ - Front Controller ๋ฐฉ์ (0) | 2024.10.16 |
(์๋ฐ) ์๊ธ๊ณ์ฐ ํ๋ก๊ทธ๋จ (์ ๊ทผ์ ํ์, ํ๋์ ๋ฉ์๋) (0) | 2024.04.21 |
(์๋ฐ) ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ (0) | 2024.04.21 |
(์๋ฐ) ์์(inheritance) (0) | 2024.04.21 |