SpringMVC์ ๋ณธ๊ฒฉ์ ์ผ๋ก ๋ค์ด๊ฐ๊ธฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ผํ ๊ฐ๋ ๋ค์ ์น์ 2 ๊ฐ์์์ ๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ค. ๊ฐ์๋ฅผ ๋ค์ ๋ ๊ฐ๋ ์ ๋ํ ๋ฐฐ๊ฒฝ์ง์์ด ํ๋ฆฟํด์ ์์ ์ ๋ฃ๊ณ ์์ด๋ ์์ ์ ํ๋ฆ์ด ์ดํด๋์ง ์์๋ค. ๊ทธ๋์ ๋ธ๋ก๊ทธ์ WAS - ์๋ธ๋ฆฟ - ์๋ธ๋ฆฟ ์ปจํ ์ด๋ - ๋ฉํฐ์ฐ๋ ๋ - ์ฐ๋ ๋ ํ์ด ์ด๋ค ์์ผ๋ก ์ฐ๊ด์ ๊ฐ๋์ง๋ฅผ ์ค์ฌ์ผ๋ก ๊ณต๋ถํ๊ณ ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต๋ถํ๋ฉด์ ์ดํดํ๋๋ฐ ๋ณด์ถฉ์ด ๋๋ ๊ฐ๋ ๊ณผ ์ค๋ช ์ด ์์ผ๋ฉด ํจ๊ป ์ ๊ณ , ๋์ค์ ์ง๋ฌธ๋ค์ด ์๊ธฐ๋ฉด ๊ทธ์ ๋ํ ๋ต๋ณ๋ ์ฐพ์๋ณด๊ณ ์ ํ๋ค.
โ๏ธ
โ๏ธ ์น - HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์
- ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ๋๋ถ๋ถ HTTP๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฑฐ์ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํ๋ค.
HTTP
: ์น ์์์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ๋ก ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ ์๋ต ํ๋กํ ์ฝ์ด๋ฉฐ, ์ฃผ๋ก HTML ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ ์ฌ์ฉํ๋ค.
์น ์๋ฒ (Web Server)
: HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ (Web Application Server)
: HTTP ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ฉฐ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ํํ๋ค. ์ ์ ๋ฆฌ์์ค ์ ๊ณต๋ ๊ฐ๋ฅํ๋ค.
Q. ์น ์๋ฒ๋ ์ ์ ๋ฆฌ์์ค๋ฅผ ์ ๊ณตํ๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ก์ง์ ์ ๊ณตํ๋ค๊ณ ํ๋ค. ์น ํ์ด์ง๋ก ์์๋ฅผ ๋ค๋ฉด ์ด๋ค๊ฒ ์์๊น?
A. ์ ์ ๋ฆฌ์์ค๋ ์ด๋ฏธ์ง, ๋์์, CSS, HTML ๋ฑ ์ด๋ค. ์น ํ์ด์ง์ ๋ก๊ณ ๊ฐ ์๋ค๋ฉด ๋ก๊ณ ๋ ์ด๋ฏธ์ง์ ํด๋นํ๋ ์น ์๋ฒ์์ ์ ๊ณตํ๋ ๋ฆฌ์์ค๊ฐ ๋ ๊ฒ์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์์ ์ ๊ณตํ๋ ๊ฒ์ ๋ก๊ทธ์ธ ํ์ด์ง์์ ์ฌ์ฉ์๊ฐ ์์ด๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ์ฌ ๋ก๊ทธ์ธ์ด ๋ ํ๋ฉด์ ๋ณด์ฌ์ฃผ๋ ์ด๋ฐ ์ผ๋ จ์ ๊ณผ์ ์ด๋ผ๊ณ ๋ณด๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ๋จ์ํ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋๋์ง ์๊ณ ๋ก์ง์ ์ํํ๊ณ ์ฒ๋ฆฌํ๋ ๊ณผ์ ์ด ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ํํ๋ ์ผ์ด๋ค.
Q. ๊ทธ๋ฐ๋ฐ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ๋์ ์ธ ๋ก์ง ๋ฟ ์๋๋ผ, ์ ์ ๋ฆฌ์์ค๋ ์ ๊ณตํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๊ฐ ์น ์๋ฒ๊ฐ ํ๋ ์ผ๋ ์ฒ๋ฆฌํ๋ฉด ๋์ง ์์๊น?
A. WAS๋ ๋น์ผ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํ๋ค. ์๋ก ๊ธ์ ๊ฑฐ๋, ๊ฐ์ธ์ ๋ณด๊ด๋ฆฌ, ์ฃผ๋ฌธ ์ฒ๋ฆฌ ๋ฑ์ด ์์ ์ ์๋ค. ์ด๋ฌํ ๋ก์ง์ ์ฒ๋ฆฌ ์๊ฐ๊ณผ ์์ ์๋ชจ๊ฐ ํฌ๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค๋ฉด ์๋น์ค ์ ์ฒด์ ์ฌ๊ฐํ ์ํฅ์ ์ค ์ ์๋ค. ์ด๋ฐ ๋ณต์กํ ๋ก์ง์ ์ฒ๋ฆฌํ๋ WAS์๊ฒ ์ ์ ์ธ ๋ฆฌ์์ค๊น์ง ์ ๊ณตํ๋ผ๊ณ ํ๋ค๋ฉด ์ ์ ์ธ ๋ฆฌ์์ค ์ ๊ณต์ ์ฒ๋ฆฌํ๋๋ผ ์ค์ํ ๋ก์ง์ ์ฒ๋ฆฌ๊ฐ ๋ฏธ๋ค์ง ์ ์์ผ๋ฉฐ ์์ฒญ์ ๋ฐ๋ ๊ฒ ๋ถํฐ ์ฒ๋ฆฌ๊น์ง ๋ชจ๋ ๊ฒ์ ํ๋ก ํด์ผํ๋ WAS์ ์๋ฒ์ ๊ณผ๋ถํ๊ฐ ์ฌ ์ ์๋ค. ๊ทธ๋์ ์น ์๋ฒ๋ฅผ WAS์ ์์ ๋ฐฐ์น์์ผ ์์ฒญ์ด ์ค๋ฉด ์น ์๋ฒ์์ ๋ฐ๊ฒ ํ ํ ๋์ ์ผ๋ก ์ฒ๋ฆฌํด์ผํ๋ ๋ถ๋ถ๋ง WAS์๊ฒ ์์ฒญ์ ์์ํ๋ค.
โ๏ธ ์๋ธ๋ฆฟ๊ณผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋
- ์๋ฐ์์๋ ์๋ธ๋ฆฟ ์ปจ๋ค์ดํฐ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด WAS๋ผ๊ณ ํ๋ค.
์๋ธ๋ฆฟ (Servlet)
: ์น ์์์ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ํ๋กํ ์ฝ๋ก ์๋ฒ์ ํด๋ผ์ด์ธํธ ์ฌ์ด์ ์ด๋ฃจ์ด์ง๋ ์์ฒญ ์๋ต ํ๋กํ ์ฝ์ด๋ฉฐ, ์ฃผ๋ก HTML ๋ฌธ์๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ ์ฌ์ฉํ๋ค
์๋ธ๋ฆฟ ์ปจํ ์ด๋ (Servlet Container)
: ์๋ธ๋ฆฟ๋ค์ ๋ชจ์์ ๊ด๋ฆฌํ๊ณ ์น์๋ฒ์ ์์ผ์ ํต์ ํ๋ ์ญํ ์ ํ๋ค. ๋ํ์ ์ผ๋ก ํฐ์บฃ์ด ์๋ค.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) {
}
}
/hello๋ก URL์ด ํธ์ถ๋๋ฉด ๊ทธ๋ ์๋ธ๋ฆฟ ์ฝ๋๊ฐ ์คํ๋๋ค. ์๋ธ๋ฆฟ์ด ์ฃผ๋ก ํ๋ ๊ฒ์ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ , ๊ทธ์ ๋ง๋ ์๋ต์ ๋ณด๋ด๋ ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด HttpServletRequest์ HttpServletResponse๊ฐ ์๋ค. ์ด๋ ๊ฐ๊ฐ HTTP ์์ฒญ ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๊ณ , HTTP ์๋ต ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์ ๊ณตํ๋ ์ญํ ์ ํ๋ค.
์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ฑ๊ธํค์ผ๋ก ๊ด๋ฆฌํ๋ค. ์ฌ์ฉ์๊ฐ ๋ณด๋ด์จ ์์ฒญ ๊ฐ์ฒด์ ์๋ต ๊ฐ์ฒด๋ง ์๋กญ๊ฒ ์์ฑํ ํ ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์ฑ๋ฅ์ ์ต์ ํ์ํจ๋ค.
Q. ์ ์์ฒญ ๊ฐ์ฒด์ ์๋ต ๊ฐ์ฒด๋ฅผ ์๋กญ๊ฒ ์์ฑํ๋๊ฑธ๊น?
A. ์ฌ์ฉ์๋ง๋ค ์์ฒญํ๋ ๋ด์ฉ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ทธ์ ๋ํด ์ฒ๋ฆฌํ๋ ์๋ต๋ ๋ฌ๋ผ์ง ๊ฒ์ด๋ค. ๋ง์ฝ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, 3๋ง์์ ๊ฒฐ์ ํ ์ฌ์ฉ์ A์ 1๋ง์ ๊ฒฐ์ ํ ์ฌ์ฉ์ B์ ๋ํ ์ฒ๋ฆฌ ์๋ต์ด ์์ผ ๊ฒ์ด๋ค. ๊ทธ๋์ ์์ฒญ ๊ฐ์ฒด์ ์๋ต ๊ฐ์ฒด๋ ์ฌ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋ฐ๋์ ์์ฒญ, ์๋ต ๊ด๋ จ ๋ฐ์ดํฐ๋ HttpServletRequest์ HttpServletResponse ๊ฐ์ฒด์ ์ ์ฅํ๊ณ ์ฌ์ฉํด์ผ ํ๋ค.
Q. ์ ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ์ฌ์ฌ์ฉํด๋ ๋๋๊ฑธ๊น?
A. ์ด ๊ฐ๋ ์ ์๋น์ผ๋ก ๋น์ ํด๋ณด๊ณ ์ ํ๋ค. ์๋ธ๋ฆฟ์ ์๋ฆฌ์ฌ๋ผ๊ณ ์๊ฐํ๊ณ , ์์ฒญ ๊ฐ์ฒด์ ์๋ต ๊ฐ์ฒด๋ ์ข ์ ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฌ์ธ ๊ฒ ๊ฐ๋ค. ์๋ฆฌ์ฌ(์๋ธ๋ฆฟ)๋ ์ข ์ ์(์ฐ๋ ๋)์ด ๋ค๊ณ ์จ ์ฃผ๋ฌธ์(์์ฒญ ๊ฐ์ฒด)๋ง ๋ณด๊ณ ์๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ข ์ ์์๊ฒ ๋ด์ฃผ๊ธฐ๋ง ํ๋ฉด ๋๋ค. ์๋ฆฌ์ฌ๋ ์ด๋ค ์์์ ๋ง๋ค์ด์ผํ๋์ง๋ง ํ์ธํ๊ณ , ์ด ์์์ ๋ช ๋ฒ ํ ์ด๋ธ์์ ์ฃผ๋ฌธํ๊ณ ์ด ์์์ ์์ฒญํ ํ ์ด๋ธ์ด ์ด์ ์ ์ด๋ค ์์์ ์ฃผ๋ฌธํ๋์ง๋ ๋ชฐ๋ผ๋ ๋๋ค. ์๋ฆฌ๊ฐ ์์ฑ๋์ด ๋์ค๋ฉด ์ข ์ ์์ ์ ์(์๋ต ๊ฐ์ฒด)๋ฅผ ๋ค๊ณ ๊ณ ๊ฐ์๊ฒ ์ค ๊ฒ์ด๋ค. ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ์ํ๋ฅผ ๊ธฐ์ตํ์ง ์์๋ ๋๊ณ , ๊ทธ์ ์ฒ๋ฆฌ์๋ง ์ง์คํ๋ฉด ๋๊ธฐ์ ํ๋์ ๊ฐ์ฒด๋ก ์ฌ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด๋ค.(์ด์ฐจํผ ์ข ์ ์์ด ์ฎ๊ธฐ๋ ๊ฑฐ๋ผ ์ข ์ ์์ด ๋ช ๋ฒ ํ ์ด๋ธ์์ ์ฃผ๋ฌธํ ์์์ธ์ง ๊ธฐ์ตํ๋ค. ํ ์ด๋ธ์ ์ฃผ๋ฌธ์ด ์์ด์ง ์๋๋ค.) ํ๋ช ์ ์๋ฆฌ์ฌ๋ก ์ถฉ๋ถํ ๊ณ ๊ฐ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค๋ฉด ๊ตณ์ด ์ฌ์ฅ์ ๋ค๋ฅธ ์๋ฆฌ์ฌ๋ฅผ ๊ณ ์ฉํ ์ด์ ๊ฐ ์๋ค. ๊ทธ๋ฆฌ๊ณ ํ ๋ช ์ ์๋ฆฌ์ฌ๊ฐ ํ ๋ฒ์ ํ๋์ ์๋ฆฌ๋ง ํ์ง ์๊ณ ์ฌ๋ฌ ํ ์ด๋ธ์์ ์ค๋ ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค. ์ฌ๋ฌ ์ข ์ ์๊ธ์ด ์ฃผ๋ฌธ์๋ฅผ ๋ค๊ณ ์ค๋ ๊ฒ์ ๋ฉํฐ์ฐ๋ ๋๋ก ๋น์ ํ ์ ์์ ๊ฒ ๊ฐ๋ค.
โ๏ธ ๋ฉํฐ์ฐ๋ ๋์ ์ฐ๋ ๋ ํ
๋ฉํฐ์ฐ๋ ๋ (Multi thread)
: ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์์ ์ ์ํํ๋ค.
์ฐ๋ ๋ ํ (Thread pool)
: ๋ฏธ๋ฆฌ ์ผ์ ๊ฐ์์ ์ฐ๋ ๋๋ฅผ ์์ฑํ์ฌ ๊ด๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
์์ฒญ ๋ง๋ค ์ฐ๋ ๋๋ฅผ ์์ฑํ ๊ฒฝ์ฐ๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ฉ๋ ๋ ๊น์ง ๋์์ ์์ฒญ๋ ๊ฒ๋ค์ ์ฒ๋ฆฌํ ์ ์๊ฒ ์ง๋ง, ์ฐ๋ ๋์ ์์ฑ ๋น์ฉ์ ๋งค์ฐ ๋น์ธ๋ค. ๊ณ ๊ฐ์ด ์์ฒญํ ๋ ๋ง๋ค ์๋ก์ด ์ฐ๋ ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค๋ฉด ์๋ต ์๋๊ฐ ๋ฆ์ด์ง ๊ฒ์ด๋ค. ๋ ์ฐ๋ ๋ ์์ฑ์๋ ์ ํ์ด ์๋ค. ๋ง์ฝ ๊ณ ๊ฐ์ ์์ฒญ์ด ๋๋ฌด ๋ง์ด ์ค๊ฒ ๋๋ฉด, CPU๋ ๋ฉ๋ชจ๋ฆฌ ์๊ณ์ ์ด ๋์ด์ ์๋ฒ๊ฐ ๋ค์ด๋ ์ ์๋ค.
์์ฒญ์ด ์ฌ ๋๋ง๋ค ์ฐ๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ํจ์จ์ด ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ์ฐ๋ ๋๋ฅผ ๋ง๋ค์ด๋๋ค. ๊ทธ๊ฑธ ์ฐ๋ ๋ ํ์ด๋ผ๊ณ ํ๋ค. ํฐ์บฃ์ ์ฃผ๋ก 200๊ฐ๋ฅผ ๊ธฐ๋ณธ ์ค์ ํ๋ค. ๊ทธ๋ผ 200๊ฐ๊ฐ ๋ชจ๋ ๋ค ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ๋จ์ ์์ฒญ์ ํ์์ ๋๊ธฐํ๋๋ก ํ๋ค. ์ฐ๋ ๋๋ฅผ ํ์ํ ๋ ๋ง๋ค์ด์ ์ด ๊ฒฝ์ฐ๋ ์์ฑ์ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ CPU๋ ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ์ ์ด ๋์ด๋ฒ๋ ค ์๋ฒ๊ฐ ์ฃฝ์ ์ ์์ง๋ง ์ฐ๋ ๋ ํ๋ก ์ฐ๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ฉด ๊ณผ๋ํ ์์ฒญ๋ค์ ๋๊ธฐํ๋๋ก ๋ง๋ค์ด ์๋ฒ ํญ์ฃผ๋ฅผ ๋ฐฉ์งํ๋ค.
Q. ์์ฒญ์ด ๋ค์ด์์ ๋ ์ฐ๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๋ฏธ๋ฆฌ ์ฐ๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ์ ๊ฒฐ๊ตญ ๋ ๋ค ์ฐ๋ ๋๋ฅผ ๋ง๋๋ ๊ฒ์ธ๋ฐ ์ ์ฑ๋ฅ์ ์ฐจ์ด๊ฐ ๋๋๊ฑธ๊น?
A. ์ฐ๋ ๋๋ ์๋น์์ ์ผํ๋ ์ข ์ ์์ ๋น์ ํ ์ ์๋ค. ์ฌ๋ฌ ์ข ์ ์์ด ์ฃผ๋ฌธ์์ ์๋ฆฌ ์๋น์ ๋์๋ค๋ฐ๋ก ํ๋ฉด ๊ทธ ํ์๊ฐ ๋ฉํฐ์ฐ๋ ๋๊ฐ ๋๋ค. ์ฌ์ฅ์ด ์ข ์ ์์ ์ฌ๋ฌ๋ช ๊ณ ์ฉํ ํ ์๋์ ์์ฒญ์ด ๋ง์์ง๋ฉด ์ข ์ ์์ ๋ด๋ณด๋ด๊ณ ์์ฒญ์ด ์ ์ด์ง๋ฉด ๋ค์ ํ๋ก ๋ค์ด์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ๋ค. ๊ทธ๋ ๊ฒ ์ข ์ ์์ ๊ณ ์ฉํ๊ณ ํด๊ณ ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฏธ ์ฌ๋ฌ๋ช ์ ๊ณ ์ฉํด๋ ๋ค ํ์ด๋ผ๋ ๋๊ธฐ์ค์์ ๊ธฐ๋ค๋ฆฌ๊ฒ ํ ํ ์์ฒญ์ ์๋งํผ ๋๋ฆฐ๋ค๊ณ ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ์ข ์ ์์ ๊ณ ์ฉํ๊ณ ํด๊ณ ํ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ฉด ๋น์ฐํ ๋ ๋ง์ ์๊ฐ๊ณผ ๋น์ฉ์ด ๋ค ๊ฒ์ด๋ค. ์ด๋ฏธ ๊ณ ์ฉํ ํ ํ์ํ ๋งํผ ์ข ์ ์์ ๋๋ฆฌ๊ณ ํ์ํ์ง ์๋ค๋ฉด ๋๊ธฐํ๊ฒ ํ ํ ์์ฒญ์ด ์๋กญ๊ฒ ๋ค์ด์ค๋ฉด ๊ฐ์ ์ข ์ ์์ด ๋๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ์ด ๋ฐ๋ก ์๋๊ฐ ๊ฐ๋ฅํ๊ธฐ์ ํจ์ฌ ํจ์จ์ ์ด๋ค.
๊ฐ๋ฐ์๋ ์ฐ๋ ๋ ํ์ ์ซ์๋ฅผ ์ ์ ํ๊ฒ ์ค์ ํ๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํ๋ค. ์ฐ๋ ๋ ํ์ ์๋ฅผ ๋๋ฌด ๋ฎ๊ฒ ์ค์ ํ๋ฉด ์์ฒญ์ ๋๊ธฐ ์ํ๊ฐ ๋๊ณ ๊ณ ๊ฐ์ ์์ฒญ์ ๋ํ ์๋ต์ ์ง์ฐ๋๋ค. ์ฐ๋ ๋ ํ์ ์๋ฅผ ๋๋ฌด ๋๊ฒ ์ค์ ํ๋ฉด ๋์ ์์ฒญ์ด ๋ง์ด ๋ฐ์ํ์ ๋ CPU์ ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ์ ์ ์ด๊ณผํ๊ฒ ๋์ด ์๋ฒ๊ฐ ๋ค์ด๋ ๊ฒ์ด๋ค. ์ ์ ์ซ์๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ก์ง์ด ์ผ๋ง๋ ๋ณต์กํ์ง, CPU์ ๋ฉ๋ชจ๋ฆฌ ๊ทธ๋ฆฌ๊ณ IO ๋ฆฌ์์ค ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ํ์นab, ์ ์ด๋ฏธํฐ, nGrinder ํด๋ก ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์๋ํ๋ ๊ฒ์ด ์ข๋ค.
โ๏ธ HTML ํ์ด์ง์ HTML API ๊ทธ๋ฆฌ๊ณ WAS๊ฐ ์ด๋ป๊ฒ ์์ฑ๋๋์ง
HTML ํ์ด์ง
: ๋์ ์ผ๋ก ํ์ํ HTML ํ์ผ์ ์์ฑํด์ ์ ๋ฌํ๋ค. ์ฃผ๋ก ์ฌ์ฉ์๊ฐ ๋ณด๋ ํํ์ด์ง๋ฅผ ์๋ฏธํ๋ค.
๋ก๊ทธ์ธ ํ๋ฉด ์์
<form action="/login" method="post">
<input name="username">
<input name="password" type="password">
<button type="submit">๋ก๊ทธ์ธ</button>
</form>
์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ์ ํ ์ ์๋๋ก ๋ณด์ด๋ ํ์ด์ง์ด๋ฉฐ ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ๋๋ฅด๋ฉด /login ๊ฒฝ๋ก๋ก ๋ฐ์ดํฐ๊ฐ post ๋ฐฉ์์ผ๋ก ๋ณด๋ด์ง ๊ฒ์ด๋ค.
HTML API
: HTML์ด ์๋ JSON์ด๋ XML ํ์์ผ๋ก ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ก๊ทธ์ธ API
fetch('/api/login', {
method: 'POST',
body: JSON.stringify({ username: 'sori', password: '1234' }),
headers: { 'Content-Type': 'application/json' }
})
.then(response => response.json())
.then(data => console.log(data));
๋ก๊ทธ์ธ ๋ฒํผ์ด ๋๋ ธ์ ๋ ํ๋ฉด์ ์ ํ ๋ฐ์ดํฐ๋ฅผ Controller๊น์ง ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด HTML API(์น API ํน์ REST API)๊ฐ ํ๋ ์ผ์ด๋ค. fetch ํจ์์ ์ธ์์๋ ๋ค์ด์จ ๊ฒฝ๋ก์ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋ณด๋ด๋์ง ์ด๋ค ๋ด์ฉ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ์ฌ ๋ณด๋ผ๊ฑด์ง์ ๋ํด ์ ๋๋ค. ์์ ์ฝ๋๋ login ๊ฒฝ๋ก๋ก ๋ค์ด์จ ์ ๋ณด๋ฅผ POST(์๋ก์ด ์์ ์์ฒญ)๋ฐฉ์์ผ๋ก ๋ณด๋ด๋ฉฐ username๊ณผ password๋ JSON ๋ฌธ์์ด๋ก ๋ฐํํ๋ค๋ ๋ด์ฉ์ด ๋ค์ด์๋ค. ์ด API ์์ฒญ์ WAS์ Controller๊ฐ ๋ฐ์ ์ฒ๋ฆฌํ๋ค.
HTTP API๋ ๋ธ๋ผ์ฐ์ ๊ฐ์ UI ํด๋ผ์ด์ธํธ์ ํต์ ํ ๋๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ค.์๋ฒ์ ์๋ฒ ๊ฐ์๋ HTTP API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ์ฌ์ฉ์๊ฐ ์ํ์ ์ฃผ๋ฌธํ ๋ค ๊ฒฐ์ ๋จ๊ณ๋ก ๋์ด๊ฐ๋ ๊ฒฝ์ฐ, ์ฃผ๋ฌธ ์๋ฒ์ ๊ฒฐ์ ์๋ฒ๊ฐ HTTP API๋ฅผ ํตํด ํ์ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค.
WAS์ Controller
@RestController
@RequestMapping("/api")
public class LoginController {
@PostMapping("/login")
public ResponseEntity<LoginResult> login(@RequestBody LoginRequest request) {
// ๋ก์ง ์ํ ์ฝ๋...
return ResponseEntity.ok(new LoginResult("success", "Welcome!"));
}
}
๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํ๋ Controller๋ค. @RequestMapping("/api")๋ ์ด ํด๋์ค์ ๋ชจ๋ ์์ฒญ์ api๋ก ์์๋ ๊ฒฝ๋ก๋ง ์ฒ๋ฆฌํ๊ฒ ๋ค๋ ์๋ฏธ์ด๋ค. @PostMapping์ /api/login ๊ฒฝ๋ก ์ค post ์์ฒญ๋ง ์ฒ๋ฆฌํ๋ค๋ ์๋ฏธ์ด๋ค. ์ด๋ ๊ฒ ๊ฒฝ๋ก๋ฅผ ํตํด ๋ค์ด์จ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ จ์ ๋น์ฆ๋์ค ๋ก์ง์ด ์คํ๋๋ค.
์คํ๋๋ ๊ฒฝ๋ก์ ๋ํด ๋ค์ ์ ๋ฆฌํด๋ณด์๋ฉด, HTML ํ์ด์ง์ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ๊ด๋ จ ์ ๋ณด๋ฅผ ์ ๋ ฅํ์ฌ ๋ฒํผ์ ๋๋ฅด๋ฉด, HTML API๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ค ํํ๋ก ์ด๋ค ๊ฒฝ๋ก๋ก ๋ณด๋ผ๊ฑด์ง ์ ๋ฆฌํ์ฌ WAS๋ก ๋ณด๋ธ๋ค. ๊ทธ๋ฌ๋ฉด WAS ๋ด์ ์๋ Controller ์ค @RestController๊ฐ API ์์ฒญ์ ๋ฐ๊ณ ์๋ธ๋ฆฟ ์ปจํ ์ด๋(์๋ก ํฐ์บฃ)๊ฐ ์์ฒญ์ ์ ๋ฌํ๋ค. ์ ๋ฌ๋ ์์ฒญ์ ๋ง์ถฐ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๋ก์ง์ด ์ํ๋๊ณ JSON ๋ฐ์ดํฐ๋ก ์์ฑ๋ ๊ฒฐ๊ณผ๋ API ์๋ต์ผ๋ก ๋ธ๋ผ์ฐ์ ๋ก ์ ๋ฌ๋๋ค. ๋ก๊ทธ์ธ์ด ์ ๋๋ก ์ฒ๋ฆฌ๋์๋ค๋ฉด ๊ทธ์ ๋ง๋ ํ๋ฉด์ ์ฌ์ฉ์๊ฐ ๋ฐ๊ฒ ๋ ๊ฒ์ด๋ค.
โ๏ธ ๋ธ๋ผ์ฐ์ ๋ ๋๋ง, ์๋ฒ์ฌ์ด๋ ๋ ๋๋ง, ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง
๋ธ๋ผ์ฐ์ ๋ ๋๋ง
: ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก๋ถํฐ ์์ฒญํด ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด์ ํ์ํด์ฃผ๋ ์์ ์ ๋งํ๋ค.
SSR (์๋ฒ์ฌ์ด๋ ๋ ๋๋ง)
: ์ ์ ์ธ ํ๋ฉด์ ์ฌ์ฉํ๋ฉฐ, HTML ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ์๋ฒ์์ ๋ง๋ค์ด์ ์น ๋ธ๋ผ์ฐ์ ์ ์ ๋ฌํ๋ค.
์๋ฒ์ฌ์ด๋ ๋ ๋๋ง ๋ฐฉ์์ ๋ณดํต ๋ฐฑ์๋ ์งํฅ ๊ฐ๋ฐ์๋ค์ด Spring๊ณผ Thymeleaf ๋ฑ์ ์ฌ์ฉํด ํ๋ฉด๊ณผ ๋ก์ง์ ํจ๊ป ์ฒ๋ฆฌํ๋ฉฐ, ๊ฐ๋จํ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๋ฐ ์์ฃผ ํ์ฉ๋๋ ๋ฐฉ์์ผ๋ก ๋ณด๋ฉด ์ ํฉํ ๊ฒ ๊ฐ๋ค.
CSR (ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง)
: ๋์ ์ธ ํ๋ฉด์ ์ฌ์ฉํ๋ฉฐ, HTML ๊ฒฐ๊ณผ๋ฅผ ์๋ฐ์คํฌ๋ฆฝ๋ฅผ ์ฌ์ฉํด ์น ๋ธ๋ผ์ฐ์ ์์ ๋์ ์ผ๋ก ์์ฑํด์ ์ ์ฉํ๋ค.
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง ๋ฐฉ์์ด ์น ํ๋ก ํธ์๋์ ๋ฐฑ์๋๊ฐ ๋๋์ด ํ๋ก์ ํธ๋ฅผ ์ํํ๋ ๊ฒ์ผ๋ก ์๊ฐํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. Vue.js, React๋ฅผ ์ฌ์ฉํ์ฌ ๋์ ์ธ ํ๋ฉด์ ์ ๊ณตํ๊ณ ๋ฐฑ์๋ ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ API์ ๋น์ฆ๋์ค ๋ก์ง ๋ฑ์ ์ฒ๋ฆฌํ๋ค.
์๋์ ์ถ์ฒ๋ฅผ ๋จ๊ฒจ๋๊ฒ ์ต๋๋ค.
๋ธ๋ก๊ทธ์ ์ ๊ฐ ์ต๋ํ ์ดํดํ ๋ด์ฉ๊น์ง๋ง ์ ๋๊ฑฐ๋ผ
์ถ์ฒ์ ๋ค์ด๊ฐ์๋ฉด ๋ ๋ง์ ๋ด์ฉ์ด ์์ด ๊ณต๋ถํ์๋๋ฐ ๋์๋์ค๊ฒ๋๋ค.
๐ชฝ
ํ๋ฆฐ ๋ด์ฉ์ด ์๋ค๋ฉด ๋๊ธ๋ก ์๋ ค์ฃผ์ธ์
- ์น์๋ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ฐจ์ด
[Web] Web Server์ WAS์ ์ฐจ์ด์ ์น ์๋น์ค ๊ตฌ์กฐ - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io
WEB๊ณผ HTTP / (ํน์ง, ๊ตฌ์กฐ, ๋์ ๊ณผ์ ์์)
ํ๋ฆฐ ๋ถ๋ถ์ด ์๋ค๋ฉด ์ง์ ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๊ณต๋ถ์ ๋ง์ ๋์์ด ๋ฉ๋๋ค. WEB (World Wide Web) ์น = ์ธํฐ๋ท? ์ธํฐ๋ท์ด๋ผ๋ ๊ฑฐ๋ํ ๋คํธ์ํฌ ์์์ ๋ค์ํ ์๋น์ค๋ค์ด ๋์ํ๋๋ฐ, ์น๋ ์ธํฐ
mag1c.tistory.com
[WEB] WAS(Web Application Server)์ ์๋ธ๋ฆฟ(Servlet)์ ๋ํ์ฌ
์ด์ฐฝ๊ธฐ ์น์ด ์ถํํ์ ๋๋ ์ ์ (Static)์ธ ์น ํ์ด์ง๋ค์ด ๋ง์๊ณ ๊ทธ๊ฒ๋ค๋ง์ผ๋ก๋ ์๋ฏธ ์ ๋ฌ์ด ์ถฉ๋ถํ ๋ ์ ์์๋ค. ํ์ง๋ง ์ ์ ์น ํ์ด์ง์ ๋ชจ๋ ๋ด์ฉ์ ์ ํด์ ธ ์์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ์ฌ์ฉ์์
velog.io
fetch ํจ์: POST Request
POST ์์ฒญ, fetch ํจ์, then() ๋ฉ์๋์์์ ๋ถ๊ธฐ ์ฒ๋ฆฌ, Response message ์ฒ๋ฆฌ
velog.io
[JavaScript] fetch ํจ์ ์ฐ๋ ๋ฒ, fetch ํจ์๋ก HTTP ์์ฒญํ๋ ๋ฒ
fetch ํจ์๋ XMLHttpRequest ๊ฐ์ฒด๋ณด๋ค ์ต๊ทผ์ ๋์จ, HTTP ์์ฒญ ์ ์ก ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ Web API๋ค. ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด ์ต๊ด์ฒ๋ผ ์ฐ๋ fetch์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค.
velog.io
- ๋ธ๋ผ์ฐ์ ๋ ๋๋ง, CSR๊ณผ SSR
ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง(CSR) vs ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)
๋ธ๋ผ์ฐ์ ๋ ๋๋ง์ด๋? ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก๋ถํฐ ์์ฒญํด ๋ฐ์ ๋ด์ฉ์ ๋ธ๋ผ์ฐ์ ํ๋ฉด(View)์ ํ์ํด์ฃผ๋ ์์ ์ ๋งํ๋ค. ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ฒ๋ก๋ถํฐ HTML, CSS, JavaScript ๋ฌธ์๋ฅผ ์ ๋ฌ๋ฐ์ ๋ธ๋ผ์ฐ์ ์์ง์ด
suzzeong.tistory.com
'๐ท Spring > ๊น์ํ_ Spring MVCใ คใ ค1ํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] ์น์ 3_ ์ค๋ฅ ๋ฐ์ - Error creating bean with name 'servletComponentRegisteringPostProcessor': Instantiation of supplied bean failed (0) | 2025.06.17 |
---|