#16 Servlet ์ดํด
by JiwonDev# ์น ๊ฐ๋ฐ์ ๊ณผ์
์๋ฌด๊ฒ๋ ์๋ ์ํ์์ ์น ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ค๋ ๊ฑด, ์๋์ ๊ณผ์ ๋ค์ ์ฝ๋๋ก ์์ฑํจ์ ์๋ฏธํ๋ค. ์ด๋ ์ด๋ ํ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ ๊ณตํต์ ์ผ๋ก ๋ฐ๋ณต๋๋ ๊ณผ์ ์ด์๋ค.
# Java์ Servlet ์ธํฐํ์ด์ค ๋ฑ์ฅ.
'๋คํธ์ํฌ ์ฝ๋์์ ๋น์ฆ๋์ค ๋ก์ง์ ์ ์ธํ ๋๋จธ์ง๋ฅผ ์ธํฐํ์ด์คํ ์ํค๋ฉด ์๋ ๊น?'์์ ๋์จ ๊ฒ์ด Servlet ํด๋์ค์ด๋ค.
Server + let, ์๋ฒ์์ ์คํํ๋ ์์ ์คํ๋จ์๋ผ๋ ์๋ฏธ๋ก TCP/IP ํต์ ์ Servlet ํด๋์ค๊ฐ ๋ด๋นํ๊ณ , ๋๋จธ์ง ๋น์ฆ๋์ค ๋ก์ง ๋ถ๋ถ๋ง ์ง์ ๊ตฌํ๋๋ก ์ธํฐํ์ด์คํ ์ํจ ๊ฒ์ด๋ค. (* Servlet์ ์คํํ ์ ์๋ ์น ์๋ฒ๋ฅผ WAS๋ผ๊ณ ํ๋ค.)
- html์ ์ฌ์ฉํ์ฌ ์์ฒญ์ ์๋ตํ๋ค.
- Java Thread๋ฅผ ์ด์ฉํ์ฌ ๋์ํ๋ค.
- MVC ํจํด์์ Controller๋ก ์ด์ฉ๋๋ค.
- HTTP ํ๋กํ ์ฝ ์๋น์ค๋ฅผ ์ง์ํ๋ javax.servlet.http.HttpServlet ํด๋์ค๋ฅผ ์์๋ฐ๋๋ค.
- UDP๋ณด๋ค ์ฒ๋ฆฌ ์๋๊ฐ ๋๋ฆฌ๋ค.
- HTML ๋ณ๊ฒฝ ์ Servlet์ ์ฌ์ปดํ์ผํด์ผ ํ๋ ๋จ์ ์ด ์๋ค.
HttpServlet์ ์์๋ฐ์ ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ HTTP ์๋ต/์ ์ก์ ํ๊ธฐ์ํด ์๋ธ๋ฆฟ ์ธํฐํ์ด์ค์์ ์ ๊ณตํ๋ Request์ Response ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
์ฐธ๊ณ ๋ก ์๋ธ๋ฆฟ์ ์ด๋ ธํ ์ด์ (@WebServlet)์ผ๋ก ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ Servlet 3 ๋ฒ์ (Tomcat 7 ์ดํ)์ ๋์จ ๊ฒ์ผ๋ก, ์ด์ ์๋ web.xml ํ์ผ์ ์๋ธ๋ฆฟ์ ์ง์ ๋ฑ๋กํด์ฃผ์ด์ผ ํ๋ค. <servlet>์ผ๋ก ์๋ธ๋ฆฟ ํด๋์ค๋ฅผ ๋ฑ๋กํ๊ณ , <servlet-mapping>์ผ๋ก ์์ฒญ URL์ ๋ด๋น ์๋ธ๋ฆฟ์ ์ง์ ๋งคํํด์ฃผ๋ ๋ฐฉ์์ด๋ค.
// web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>JSP_1031</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Hello</servlet-name> //servlet ์ด๋ฆ ๋ช
์
<servlet-class>servlet.HelloServlet</servlet-class> //ํจํค์ง.ํด๋์ค ์ด๋ฆ์ ๋ฑ๋ก ํด์ค
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name> //servlet์ name์ ๋งคํ
<url-pattern>/hello</url-pattern> / ๊ฐ ๋ฐ๋์ ํ์!! (์ฃผ์ ๋ค์ ๊ฐ์ด๋ผ์)
</servlet-mapping>
</web-app>
# Servlet์ ๋์
์๋ธ๋ฆฟ์ WAS (์น ์ปจํ ์ด๋, ์๋ธ๋ฆฟ ์ปจํ ์ด๋)์์ ๋์ํ๋ค. WAS์ ์๋ ์น ์ปจํ ์ด๋๋ ์๋ธ๋ฆฟ์ ์์ฑ, ํธ์ถ, ๊ด๋ฆฌ๋ฅผ ๋ด๋นํ๋ค.
- Servlet ์ฝ๋๋ฅผ ์์ฑํด์ WAS์ ๋ฑ๋กํด๋๋ฉด, ์น ์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ Servlet ์ผ๋ก ๋ฐ์ ์ ์๋ค.
* Servlet์ ์ฑ๊ธํค์ ๊ตฌํํ๋ค. ์ฆ .init() ๋ฉ์๋๋ก ํ๋ฒ ๋ง๋ค์ด์ง ์๋ธ๋ฆฟ ๊ฐ์ฒด๋ ๊ณต์ ํด์ ์ฌ๋ฌ ๊ณณ์์ ์ฐ์ธ๋ค. .init()๋ ์ฒ์ ํ๋ฒ๋ง ์คํ๋ ํ ์๋ธ๋ฆฟ์ด ์ฌ์ฌ์ฉ๋๋ค. ๋ง์ฝ ์๋ธ๋ฆฟ ์ฝ๋๊ฐ ๋ณ๊ฒฝ๋๋ค๋ฉด, ์๋ฉธ์ํค๊ณ ๋ค์ init()ํ์ฌ ๋ง๋ ๋ค. - . ์ปจํ ์ด๋๋ Servlet ์์ฒญ์ด ๋ค์ด์ค๋ฉด HTTP ์๋ต ๊ฐ์ฒด(Request,Response)๋ฅผ ๋ง๋ค๊ณ ์ค๋ ๋๋ฅผ ํ ๋น๋ฐ์ Servlet ํด๋์ค์ .service() ๋ฉ์๋๋ฅผ ์คํํ๋ค.
- ์ด๋ ๊ฒ ์ค๋ ๋๋ฅผ ํ ๋น๋ฐ๊ณ ์คํ๋ Servlet์ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํ๊ณ doGet()์ด๋ doPost() ๋ฅผ ํธ์ถํ๋ค. ํด๋น ๋ฉ์๋๋ ๋์ ํ์ด์ง๋ฅผ ์์ฑํ๊ณ Response ๊ฐ์ฒด์ ์ค์ด ์ปจํ ์ด๋์ ๋ฐํํ๋ค.
- ์ปจํ ์ด๋๋ ์ ๋ฌ๋ฐ์ Response๋ฅผ ๋ค์ HTTP Response๋ก ๋ณํํ์ฌ ์น์๋ฒ๋ฅผ ํตํด ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ธ๋ค. ์ดํ ์ค๋ ๋๋ฅผ ํ์ํ๊ณ ํ์์์ด์ง ์๋ต ๊ฐ์ฒด๋ฅผ ์๋ฉธ์ํจ๋ค. ์๋ธ๋ฆฟ์ ์๋ฉธ์ํค์ง ์๊ณ ์ฌ์ฌ์ฉํ๋ค๊ฐ WAS ์๋ฒ๊ฐ ์ข ๋ฃ๋ ๋ .destory() ๋ฉ์๋๋ฅผ ์ด์ฉํด ์๋ฉธ์ํจ๋ค.
@WebServlet("/myServlet/*")
public class MyServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
String msg = "default";
// The servlet is initialized by calling the init() method.
public void init() throws ServletException {
msg = "init ๋ฉ์๋ Call";
}
// The servlet calls service() method to process a client's request.
// service () ๋ฉ์๋๋ HTTP ์์ฒญ ์ ํ (GET, POST, PUT, DELETE ๋ฑ)์ ํ์ธํ๊ณ
// ์ ์ ํ๊ฒ doGet, doPost, doPut, doDelete ๋ฑ์ ๋ฉ์๋๋ฅผ ํธ์ถ
@Override
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
String text = "Service ๋ฉ์๋ Call";
if(!"default".equals(msg)){
text = msg +"<br>"+text;
msg = "default";
}
// response ๊ฐ์ฒด์ ํค๋๊ฐ์ ๊ธฐ๋กํ๋ค.
response.setContentType("text/plain");
response.setCharacterEncoding("UTF-8");
// response ๊ฐ์ฒด์ ๋ฐ๋์ ๋ฃ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํ๋ค.
response.getWriter().write(text);
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String text = "doGet ๋ฉ์๋ Call";
commonMethod(text, response);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String text = "doPost ๋ฉ์๋ Call";
commonMethod(text, response);
}
// The servlet is terminated by calling the destroy() method.
@Override
public void destroy() {
// Finalization code...
System.out.println("destroy method call");
}
}
# WAS์ ๋ฉํฐ์ค๋ ๋
๊ธฐ๋ณธ์ ์ผ๋ก Servlet์ ๋ง๋ค ๋ ์๋ธ๋ฆฟ ๊ฐ์ฒด๊ฐ ์ฑ๊ธํค ๊ฐ์ฒด๋ผ๋๊ฑฐ๋ง ์ ์ํ๋ฉด ์ฑ๊ธ์ฐ๋ ๋ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฏ์ด ํธํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋๋ค. ๊ทธ ์ด์ ๋ WAS์์ ๋ฉํฐ ์ฐ๋ ๋์ฒ๋ฆฌ๋ฅผ ๋์ ํด์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์น ์๋น์ค์์๋ ์ฌ๋ฌ๊ฐ์ง ์์ฒญ์ด ๋์์ ๋ค์ด ์ฌ ์ ์๋ค. ์ด๋ ๋จ ํ๋์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ์น ์๋ฒ์ ์ฑ๋ฅ์ ๋งค์ฐ ๊ตฌ์ง ๊ฒ์ด๊ณ , ๋ง์ฝ ํ๋์ ์์ฒญ์ ์ค๋ฅ๊ฐ ์๊ธด๋ค๋ฉด ๋ค๋ฅธ ์์ ์ผ๋ก ๋์ด๊ฐ์ง ๋ชปํด ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ฆด ๊ฒ์ด๋ค. ๊ทธ๋์ WAS์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
์ฐ๋ ๋๋ฅผ ์์ฑํ๊ณ ํ ๋น๋ฐ๋ ์์ ์ ์ด์์ฒด์ ์์ ๋ฐ๋ก ๋ฐ๋, ์๋ฐ์ฝ๋๋ก ๊ตฌํํ๋ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๋ ๋น์ผ ์์ ์ด๋ค. ๊ทธ๋์ WAS ์๋ฒ์๋ ์ฐ๋ ๋ ํ(pool)์ ๋ง๋ค์ด ์ฌ์ฉํ ์ฐ๋ ๋๋ฅผ ์ฐ๋ ๋ ํ์ ๋ฏธ๋ฆฌ ์์ฑ์์ผ ๋๋ค๊ฐ, ํ์ํ ๋ ์๋ธ๋ฆฟ์ ์ฐ๋ ๋๋ฅผ ํ ๋น์์ผ์ค๋ค.
์ฐธ๊ณ ๋ก WAS ์๋ฒ์ ์ฃผ์ ์ฑ๋ฅ ํ๋ ํฌ์ธํธ๋ ์ต๋ ์ฐ๋ ๋์ ๊ฐ์์ ์๋ค. ๋ง์ฝ ์์ฑ๊ฐ๋ฅํ ์ฐ๋ ๋์ ์ต๋ ๊ฐ์๊ฐ ๋๋ฌด ์ ๋ค๋ฉด ์๋ฒ์ CPU์ ๋ฉ๋ชจ๋ฆฌ์์์ ์ฌ์ ๋ก์ด๋ฐ ์ฐ๋ ๋๊ฐ ๋ถ์กฑํด ์์ฒญ๋ค์ ์ฒ๋ฆฌํ๋๋ฐ ๋ฒ๋ฒ ์ผ ๊ฒ์ด๋ค. ๋ฐ๋๋ก ์ต๋ ์ฐ๋ ๋์ ๊ฐ์๋ฅผ ๋ฌด์์ ๋๊ฒ ์ค์ ํ๋ฉด CPU, ๋ฉ๋ชจ๋ฆฌ์ ์ฒ๋ฆฌ ํ๊ณ์ ์ ์ด๊ณผํ๊ฒ ๋๊ณ ์์ฒญ์ด ๊ณ์ ๋ฐ๋ฆฌ๋ค๊ฐ ์๋ฒ๊ฐ ์ฃฝ์ด๋ฒ๋ฆด ์ ์๋ค.
'๐ฑBackend > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
#18 JSP Model1, Model2 (MVC) (0) | 2021.07.18 |
---|---|
#17 Servlet Filter (0) | 2021.07.18 |
#15 JSP ์ฟ ํค์ ์ธ์ (0) | 2021.07.16 |
#14. JSP์ ์น ํ๋ก๊ทธ๋๋ฐ (0) | 2021.07.16 |
#13 JSP (Java Server Pages) (0) | 2021.07.14 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
JiwonDev
JiwonDev