์น์ HTTP ๊ธฐ๋ฐ์ผ๋ก ํต์ ํ๋ค. JSON, XML, ์ด๋ฏธ์ง, ์๋ฒ๊ฐ์ ๋ฐ์ดํฐ ๊ตํ ๋ฑ ๋ชจ๋ HTTP๋ฅผ ์ฌ์ฉํ์ฌ ์ฃผ๊ณ ๋ฐ๋๋ค.
๊ฐ๋ ์ ์ผ๋ก๋ ํ๋์จ์ด์ ์ํํธ์จ์ด๋ก ๊ตฌ๋ถ๋๋ค ์น ์๋ฒ๊ฐ ์ค์น๋์ด ์๋ ์ปดํจํฐ, ๋๋ HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ์๋๋ค. ์ ์ ๋ฆฌ์์ค๋ HTML, CSS, JS, ์ด๋ฏธ์ง, ์์ ๋ฑ์ ์ ์ ํ์ผ์ ์๋ฏธํ๋ค. ์ฃผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ์น ์๋ฒ๋ก๋ NGINX, APACHE ๋ฑ์ด ์๋ค. ํด๋ผ์ด์ธํธ์๊ฒ์ HTTP ์์ฒญ์ด ๋ค์ด์ค๋ฉด ์น ์๋ฒ๋ ์๋ต์ผ๋ก ์ ์ ํ์ผ์ ๋๋ ค์ค ์ ์๋ค.
Web Application Server๋ก ๋ง์ฐฌ๊ฐ์ง๋ก HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ ์น ์๋ฒ์ ๊ธฐ๋ฅ์ ํฌํจํ๋ค. ๊ฐ์ฅ ํฐ ์ฐจ์ด๋ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ํํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ ๋์ ์ธ ๋ฆฌ์์ค๋ฅผ ์์ฑํ๊ณ ๋ฐํํ ์ ์๋ค. Servlet, JSP, Spring MVC ๋ฑ์ด ๋ชจ๋ WAS ์์์ ๋์ํ๋ค. WAS ์ ์๋ก๋ Tomcat, Jetty, Undertow ๋ฑ์ด ์๋ค.
์น ์๋ฒ๋ ์ ์ ๋ฆฌ์์ค ํ์ผ์, WAS๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ด๋นํ๋ค. ํ์ง๋ง ์ฌ์ค ๋์ ๊ฒฝ๊ณ๊ฐ ๋ชจํธํ๋ฐ ์ฌ์ค ์น ์๋ฒ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ธฐ๋ ํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์น ์๋ฒ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค(์ ์ ๋ฆฌ์์ค ์ ๊ณต), ํ์ง๋ง WAS๋ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์คํํ๋๋ฐ ๋ ํนํ๋์ด ์๋ค. ์๋ฐ์์๋ ์๋ธ๋ฆฟ ์ปจํ ์ด๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด ์ด๋ฅผ WAS๋ก ๋ณด์ง๋ง, ์๋ธ๋ฆฟ ์์ด ์๋ฐ์ฝ๋๋ฅผ ์ฑํํ๋ ์๋ฒ ํ๋ ์ ์ํฌ๋ ์กด์ฌํ๋ค.
ํฌ๊ฒ ์๊ฐ ํ๋ค๋ฉด ์น ์๋ฒ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณต, WAS๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ๋ด๋นํ๋ค๊ณ ์๊ฐํด๋ ์ข๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ์ง์ ๊ตฌํํ๋ค๋ฉด?
- ์๋ฒ TCP/IP ์ฐ๊ฒฐ ๋๊ธฐ, ์์ผ ์ฐ๊ฒฐ
- HTTP ์์ฒญ ๋ฉ์์ง ํ์ฑ
- HTTP ๋ฉ์๋, URL ํ์ธ
- Content-Type ํ์ธ
- ๋ฉ์์ง ๋ฐ๋ ๋ด์ฉ ํ์ฑ
- ์ ์ฅ ํ๋ก์ธ์ค ์คํ
- **๋น์ฆ๋์ค ๋ก์ง ์คํ**
- ์๋ต ๋ฉ์์ง ์์ฑ
- TCP/IP ์๋ต ์ ๋ฌ, ์์ผ ์ข
๋ฃ.
์ฌ๊ธฐ์ ์ค์ ํ๊ณ ์ํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ผ๋ถ๋ถ์ด์ง๋ง, ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ธฐ ์ํด ํด์ผํ ์ผ์ ๋๋ฌด๋๋ ๋ง๋ค. ๊ทธ๋์ ๋ฑ์ฅํ ๊ฒ์ด ์๋ธ๋ฆฟ, ์์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ธํ ๋ชจ๋ ๊ฒ์ ์๋ธ๋ฆฟ์์ ์ง์ํด์ค๋ค. ์ด๋ฅผ ์ฌ์ฉํด์ ๊ฐ๋ฐ์๋ HTTP ์คํ์ ๋งค์ฐ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ค. ์๋ธ๋ฆฟ์ ์ ์๋ URL์ ํจํด๊ณผ ์ผ์นํ๋ URL์ด ํธ์ถ๋๋ฉด ์๋ธ๋ฆฟ ์ฝ๋๊ฐ ์คํ๋๋ค.
- HTTPServletRequest : ์์ฒญ ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋ค.
- HTTPServletResponse : ์๋ต ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ ๊ณตํ ์ ์๊ฒ ํด์ค๋ค.
HTTP ์์ฒญ์ด ๋ค์ด์ค๋ฉด WAS๋ Request์ Response ๊ฐ์ฒด๋ฅผ ์๋ก ๋ง๋ค์ด ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ํธ์ถํ๋ค. ๊ฐ๋ฐ์๋ ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ํธ๋ฆฌํ๊ฒ ์์ฒญ ์ ๋ณด๋ฅผ ์ป๊ณ ์๋ต ์ ๋ณด๋ฅผ ์ ๋ ฅํ๋ค. WAS๋ Response ๊ฐ์ฒด์ ๋ด๊ฒจ์๋ ๋ด์ฉ์ผ๋ก HTTP ์๋ต์ ์์ฑํ๋ค.
์๋ธ๋ฆฟ์ ์์ฑ, ์ด๊ธฐํ, ํธ์ถ, ์ข ๋ฃ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ด๋ฆฌ ํ๋ค. Tomcat ์ฒ๋ผ ์๋ธ๋ฆฟ์ ์ง์ํ๋ WAS๋ฅผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ผ๊ณ ํ๋ค.
์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์๋ธ๋ฆฟ์ ์์ฑํ๋ ๊ฒ์ ๋น ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ ์ต์ด ๋ก๋ฉ ์์ ์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋๊ณ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๋ค. ๋ชจ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋์ผํ ์๋ธ๋ฆฟ ๊ฐ์ฒด ์ธ์คํด์ค์ ์ ๊ทผํ๊ฒ ๋๋ค. ๋๋ฌธ์ ๊ณต์ ์์์ ์ฌ์ฉ์ ์ฃผ์ํด์ผํ๋ค. ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ๋์ ์์ฒญ์ ์ํ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ง์ํ๋ค.
์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ์คํํ๋ ๊ฒ์ ์ค๋ ๋์ด๋ค, ์ค๋ ๋๊ฐ ์๋ค๋ฉด ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ด ๋ถ๊ฐ๋ฅํ๊ณ , ๋์ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค๋ฉด ์ค๋ ๋๋ฅผ ์ถ๊ฐ๋ก ์์ฑํด์ ๋ณ๋ ฌ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
๊ทธ๋ฌ๋ ์์ฒญ๋ง๋ค ์ค๋ ๋๋ฅผ ์์ฑํ๋ค๋ฉด ์ค๋ ๋์ ์์ฑ ๋น์ฉ์ด ๋งค์ฐ ๋น์ธ๊ธฐ ๋๋ฌธ์ ๊ทธ๋งํผ ์๋ต ์๋๊ฐ ๋ฆ์ด์ง๊ฒ ๋๋ค. ๋ํ ์ฐ๋ ๋์ ์์ฑ์ ์ ํ์ ๋์ง ์์ผ๋ฉด ์์ฒญ์ด ๋ง์ด ๋ค์ด์์ ๋ CPU, ๋ฉ๋ชจ๋ฆฌ์ ํ๊ณ๋ก ์๋ฒ์ ์ฅ์ ๊ฐ ์๊ธธ ์ ์๊ฒ ๋๋ค.
์ด๋ฌํ ๋จ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด Thread Pool์ ์ฌ์ฉํ๋ค. ์ค๋ ๋๋ฅผ ๋ฏธ๋ฆฌ ์ ํด๋ ์ ๋งํผ ๋ง๋ค์ด๋๊ณ , ๊ฑฐ๊ธฐ์ ๊บผ๋ด์ด ์ฌ์ฉํ๋ค. ์ด๋ฏธ ๋ชจ๋ ์ฌ์ฉ์ค์ด๋ผ๋ฉด ์์ฒญ์ ๊ฑฐ์ ํ๊ฑฐ๋ ํน์ ์ ๋งํผ์ ๋๊ธฐํ๋๋ก ์ค์ ํ ์ ์๋ค. ์ฌ์ฉ ํ์๋ ์ข ๋ฃํ์ง ์๊ณ , ์ค๋ ๋ ํ์ ๋ค์ ๋ฐ๋ฉํ๋ค.
Tomcat ์์๋ ์ต๋ 200๊ฐ๋ก ๊ธฐ๋ณธ๊ฐ์ด ์ค์ ๋์ด ์๊ณ , ๋ณ๊ฒฝํ ์ ์๋ค. WAS์ ์ฃผ์ ํ๋ ํฌ์ธํธ๋ ์ต๋ ์ฐ๋ ๋์ ์ ์ธ๋ฐ, ๊ฐ์ ๋๋ฌด ๋ฎ๊ฒ ์ค์ ํ๋ค๋ฉด ์๋ฒ์ ๋ฆฌ์์ค๋ ์ฌ์ ๋กญ๊ฒ ์ง๋ง ํด๋ผ์ด์ธํธ์ ์๋ต์ ์ง์ฐ๋๊ฒ ๋๋ค. ๋ฐ๋๋ก ๋๋ฌด ๋๊ฒ ์ค์ ํ๋ค๋ฉด ์๋ฒ ๋ฆฌ์์ค์ ์๊ณ์น๊ฐ ์ด๊ณผ๋ ์ ์๋ค. ์๋ฒ์ ์ฑ๋ฅ์ ๊ณ ๋ คํ ์ ์ ํ ํ๋์ด ํ์ํ๋ค.
- ์ ์ ์? : ์ฑ๋ฅ ํ ์คํธ๋ฅผ ํตํด ์์ธกํ ์ ์๋ค. ์ต๋ํ ์ค์ ์๋น์ค์ ์ ์ฌํ๊ฒ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์๋ํ๋ค. Apache ab, ์ ์ด๋ฏธํฐ, nGrinder๋ฑ์ ํด์ ์ด์ฉํ ์ ์๋ค.
์๊น ์์์ ๋งํ๋ฏ WAS ์์ ๋ฉํฐ ์ฐ๋ ๋๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ๋ฉํฐ ์ฐ๋ ๋ ๊ด๋ จ ์ฝ๋๋ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋๋ค. ํ์ง๋ง, ๋ฉํฐ ์ฐ๋ ๋ ํ๊ฒฝ์์ ๊ณ ๋ คํ์ฌ ์ฑ๊ธํค ๊ฐ์ฒด(์๋ธ๋ฆฟ, ์คํ๋ง Bean)๋ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
ํด๋น ๋ชจ๋ธ์์๋ WAS๊ฐ ์ ์ ๋ฆฌ์์ค์ ๋์ ์ธ ๋ถ๋ถ๋ค ๋ชจ๋ ์ ๊ณตํ๋ค. ํ์ง๋ง ์ด๋ ๊ฒ WAS๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ๋ด๋นํ๊ฒ ๋๋ฉด ์๋ฒ์ ๋ถ๋ด์ด ์๊ธฐ๊ฒ ๋๊ณ ์ ์ ๋ฆฌ์์ค ๋๋ฌธ์ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ์ํ์ด ์ด๋ ค์์ง๋ค. ๋ํ WAS์ ์ฅ์ ๊ฐ ์๊ฒผ์ ๊ฒจ์ฐ ๋ค๋ฅธ ์๋ฒ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ค๋ฅ ํ์ด์ง ์กฐ์ฐจ ๋ ธ์ถํ ์ ์๊ฒ๋๋ค.
์ ์ ๋ฆฌ์์ค๋ ์น ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๊ณ , ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง๊ฐ์ ๋์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค๋ฉด WAS์ ์์ฒญ์ ์์ํ๋ค. WAS๋ ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์๋ง ์ง์คํ ์ ์๊ฒ ๋๊ณ , ์ ์ ๋ฆฌ์์ค์, ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ด ๋ถ๋ฆฌ๋๊ธฐ ๋๋ฌธ์ ์ ์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ค๋ฉด ์น ์๋ฒ๋ฅผ, ์ ํ๋ฆฌ์ผ์ด์ ๋ฆฌ์์ค๊ฐ ๋ง์ด ์ฌ์ฉ๋๋ค๋ฉด WAS๋ฅผ ์ํ์ ์ผ๋ก ์ฆ์คํ ์ ์๊ฒ๋๋ค. ๋ํ WAS์ ์ฅ์ ๊ฐ ์๊ฒจ๋ ์น ์๋ฒ๊ฐ ์๊ธฐ ๋๋ฌธ์ WAS๊ฐ ๋์ํ์ง ์๋๋ค๋ฉด ์น ์๋ฒ์์ ์ค๋ฅ ํ๋ฉด์ ์ ๊ณตํ ์ ์๋ค.
ํ์ง๋ง ์๋ฒ๊ฐ API๋ง ์ ๊ณตํ๋ ์๋ฒ๋ผ๋ฉด ๊ตณ์ด ์น ์๋ฒ๋ฅผ ๊ตฌ์ถํ ํ์์ฑ์ด ์๋ค.
๋์ ์ธ ์ปจํ ์ธ ๋ฅผ ์ ๊ณตํด์ผ ํ๋ค๋ฉด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์น ์๋ฒ์์ ๋ฐ์ ์ด๋ฅผ WAS์๊ฒ ์์ํ๋ค. WAS๋ Thread Pool ์์ Thread ๋ฅผ ํ ๋น๋ฐ์ ์๋ธ๋ฆฟ์ ์คํ์ํค๊ณ , HttpServletRequest์ HttpServletResponse ๊ฐ์ฒด๋ฅผ ์์ฑํด ์๋ธ๋ฆฟ์๊ฒ ์ ๋ฌํ๋ค. ์ค๋ ๋๋ ์๋ธ๋ฆฟ์ service() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. service ๋ฉ์๋์์๋ ์์ฒญ์ ๋ฐ๋ผ doGet() ๋๋ doPost() ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค. ๋ฉ์๋์์๋ ์คํ ๊ฒฐ๊ณผ๋ก ๋ฐ์ํ ๋์ ์ปจํ ์ธ ๋ฅผ Response ๊ฐ์ฒด์ ๋ด์ WAS์ ์ ๋ฌํ๊ฒ ๋๊ณ , WAS ์์๋ ์ด๋ฅผ HttpResonse ํํ๋ก ๋ณ๊ฒฝํ์ฌ ์น ์๋ฒ๋ก ์ ๋ฌํ๋ค.


