1. Servlet?
- ์๋ฐ ํ๋ซํผ ๊ธฐ๋ฐ์์ ๋์ ์ธ ์ปดํฌ๋ํธ ๋จ์๋ก ๋ง๋ค์ด์ง ์น Application์ ๊ตฌํํ๋ ์๋ฐ ํด๋์ค
- ์ผ๋ฐ ์๋ฐ ํ๋ก๊ทธ๋จ๊ณผ ๋ค๋ฅด๊ฒ ๋ ์์ ์ผ๋ก ์คํ๋์ง ๋ชปํ๊ณ Tomcat๊ณผ ๊ฐ์ JSP/Servlet ์ปจํ ์ด๋์์ ์คํ๋๋ค.
ํด๋ผ์ด์ธํธ๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์๋ฒ์ ์์ฒญํ๋ฉด ์น ์๋ฒ๋ ์์ฒญํ ์ ๋ณด์ ์๋ต๊ฒฐ๊ณผ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ๋ก ํํํ๊ฒ ๋๋ค. ์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ฐ๋ผ ์น ์๋ฒ์ ๋์ ์ผ๋ก ๋ก๋๋์ด ๋์ํ๋ ํด๋์ค๊ฐ Servlet์ด๋ค.
- Server Side Applet์ด๋ผ๊ณ ํ๋ฉฐ ๋ธ๋ผ์ฐ์ ์์ ์์กดํ๋ฉด GUI๋ฅผ ๊ฐ์ง Applet๊ณผ๋ ๋ค๋ฅด๊ฒ ์๋ฒ์์ ์ด์๋๋ฉฐ javax.servlet.Servlet ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฒด์ด๋ค.
- CGI(Common Gateway Interface)์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ์์๋์๋ค.
-
๋๋ณด๊ธฐCGI๋ ํด๋ผ์ด์ธํธ๊ฐ ํ ๋ฒ์ ์์ฒญ์ ํ ๋๋ง๋ค ์น ์๋ฒ๊ฐ ํ๋์ ๋จ์ผ ํ๋ก์ธ์ค ์คํ์ผ๋ก ์ธํด ๋ค์ค์ ํด๋ผ์ด์ธํธ๊ฐ ์ ์์ ํด์ ์์ฒญ์ ํ๊ฒ ๋๋ฉด ํด๋ผ์ด์ธํธ๋ง๋ค ์์ฑ๋๋ ํ๋ก์ธ์ค ๋๋ฌธ์ ์๋ฒ์ ๋ถํ๊ฐ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค. ์ด๋ก ์ธํด ์ํํ์ง ๋ชปํ ์๋ฒ๊ธฐ๋ฅ์ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์๋ค.
-
2. Servlet์ ํน์ง
- Multi-Threading ๊ธฐ๋ฒ์ ์ด์ฉํด์ ํด๋ผ์ด์ธํธ๊ฐ ์น ์๋ฒ์ ์์ฒญ ์์ ์ฌ๋ฌ ๊ฐ์ Servlet ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์ฐ๋ ๋๊ฐ ํ๋์ ์น Application ์คํ์์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌ๋๋ ํ๋ก์ธ์ค๋ก ์คํ๋๋ค.
- ํด๋ผ์ด์ธํธ ์์ฒญ๋ง๋ค ๋งค๋ฒ ์๋ก์ด Servlet instance๋ฅผ ์์ฑํ๋๊ฒ ์๋๋ผ ํ ๋ฒ instance๋ฅผ ์์ฑํ๋ฉด ๊ฐ์ ์์ฒญ์ ์ด๋ฏธ ์์ฑ๋์ด ์๋ instance๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ํ์๋๊ฐ ๋น ๋ฅด๋ค.
- ํ๋ซํผ์ ๋ ๋ฆฝ์ (์ปจํ ์ด๋์ ์ข ๋ฅ์ ์๊ด์์)์ด๊ณ ์ฐ๋ ๋๋ก ์ํ๋๋ฏ๋ก ์ฌ๋ฌ ๊ฐ์ง ์์ฒญ์ ๋์์ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ ๋์ ๋ณด์์ฑ์ ์ ๊ณตํ๋ค.
- ์๋ฒ์ชฝ์์ ์คํ๋๋ฉด์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
- ์น ๋ธ๋ผ์ฐ์ ์์ ์์ฒญ ์ ๊ธฐ๋ฅ์ ์ํํ๋ค.
3. Servlet ๋์ ๊ณผ์
- ํด๋ผ์ด์ธํธ๊ฐ ์น ์๋ฒ์ ์์ฒญ์ ํ๋ค.
- ์น ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ Tomcat๊ณผ ๊ฐ์ WAS์ ์์ํ๋ค.
- WAS๋ ๊ฐ ์์ฒญ์ ํด๋นํ๋ Servlet์ ์คํํ๋ค.
- ์๋ธ๋ฆฟ์ ์์ฒญ์ ๋ํ ๊ธฐ๋ฅ์ ์ํํ ํ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์กํ๋ค.
4. Servlet API ๊ณ์ธต ๊ตฌ์กฐ
1. Servlet ์ธํฐํ์ด์ค
- Servlet ๊ด๋ จ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธ
- init(), service(), destroy(), getServletInfo(), getServletConfig()๋ฅผ ์ ์ธ
2. ServiceConfig ์ธํฐํ์ด์ค
- Servlet ๊ธฐ๋ฅ ๊ด๋ จ ์ถ์ ๋ฉ์๋๋ฅผ ์ ์ธ
- getInitParameter(), getInitParameterNames(), getServletContext(), getServletName()๋ฅผ ์ ์ธ
3. GenericServlet ํด๋์ค
- ์์ ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ฌ ์ผ๋ฐ์ ์ธ ์๋ธ๋ฆฟ ๊ธฐ๋ฅ์ ๊ตฌํํ ํด๋์ค
- ์ด ํด๋์ค๋ฅผ ์์๋ฐ์ ๊ตฌํํ ์ฌ์ฉ์ ์๋ธ๋ฆฟ์ ์ฌ์ฉ๋๋ ํ๋กํ ์ฝ์ ๋ฐ๋ผ์ ๊ฐ๊ฐ service()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ๊ตฌํ
4. HttpServlet ํด๋์ค
- GenericServlet๋ฅผ ์์๋ฐ์ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ ์น ๋ธ๋ผ์ฐ์ ์์ ์๋ธ๋ฆฟ ๊ธฐ๋ฅ์ ์ํ
- ์น ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฐ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ์๋ธ๋ฆฟ์ ๋ง๋ค ๋ ์์๋ฐ์ ์ฌ์ฉ
- ์์ฒญ ์ service()๊ฐ ํธ์ถ๋๋ฉด์ ์์ฒญ ๋ฐฉ์์ ๋ฐ๋ผ doGet()์ด๋ doPost()๊ฐ ์ฐจ๋ก๋๋ก ํธ์ถ๋จ
- public service(ServletRequest req, ServletResponse resp) : ํด๋ผ์ด์ธํธ์ request๋ฅผ protected service()์๊ฒ ์ ๋ฌ
- protected service(ServletRequest req, Servlet resp) : request๋ฅผ public service()์์ ์ ๋ฌ๋ฐ์ doXXX() ๋ฉ์๋๋ฅผ ํธ์ถ
- protected doDelete, doGet, doHead, doPost(HttpServletRequest req, HttpServletResponse resp)์ ๊ธฐ๋ฅ์ด ์์ผ๋ฉฐ ์๋ธ๋ฆฟ์ด DELETE, GET, HEAD, POST request๋ฅผ ์ํํ๊ธฐ ์ํด service()๋ฅผ ํตํด์ ํธ์ถ๋จ
- ์ ๋ฆฌํ์๋ฉด ํด๋ผ์ด์ธํธ ์์ฒญ ์ public service() ๋ฉ์๋๋ฅผ ๋จผ์ ํธ์ถํ ํ ๋ค์ protected service()๋ฅผ ํธ์ถํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ request ์ข ๋ฅ์ ๋ฐ๋ผ doXXX() ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์ผ๋ก ์คํ๋๋ค.
5. Servlet ์๋ช ์ฃผ๊ธฐ
์๋ช ์ฃผ๊ธฐ ๋จ๊ณ | ํธ์ถ ๋ฉ์๋ | ํน์ง |
์ด๊ธฐํ | init() | - Servlet์์ฒญ ์ ๋งจ ์ฒ์ ํ ๋ฒ๋ง ํธ์ถ๋จ - DB Connection์ Open - ํ์ผ์ Open - ๋ก๊ทธํ์ผ์ ๋ก๋ฉ๋ Servlet ์ด๋ฆ์ ์ถ๊ฐ - ServletConfigํ์ ๊ฐ์ฒด๋ฅผ ๋ฐ์์ default๊ฐ์ ์ ์ฅ - Reload๋ Servlet ํด๋ผ์ด์ธํธ๊ฐ ์ฒ์ ์์ฒญํ ๋ ํธ์ถ๋๊ฑฐ๋ Servlet์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ๋ ํธ์ถ๋จ. |
ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ | service() | - ํ๋ฒ์ ํด๋ผ์ด์ธํธ ์์ฒญ๋ง๋ค ํ๋์ ์ฐ๋ ๋๋ฅผ ์์ฑ, service() ๋ฉ์๋๋ฅผ ์ด์ฉํด์ ์คํ๋จ - HttpServlet์ ๊ตฌํํ service() ๋ฉ์๋๋ ์์ฒญ๋ฐฉ์์ ๋ฐ๋ผ doGet(), doPost()๋ฅผ ํธ์ถํ๋ค. |
์ข ๋ฃ | destroy() | - Servlet์ด ๊ธฐ๋ฅ์ ์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ์์ ์๋ฉธ๋ ๋ ํธ์ถ๋จ - ์ด๊ธฐํ์์ ํ ๋น๋ ์์์ ๋ฐ๋ฉ(DB ์ปค๋ฅ์ , ํ์ผ ๋ฑ) - ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด reload ๋ ๋์ ์๋ฒ๊ฐ ์ข ๋ฃ๋ ๋ ํธ์ถ๋๋ค. - Servlet์ ๋ง๋ฌด๋ฆฌ ์์ ์ ์ฃผ๋ก ์ํ |
6. Servlet Container
1. Servlet Container
- ๋์ ์ผ๋ก ๋ก๋๋๋ ์๋ฐํด๋์ค์ธ Servlet๋ฅผ ์ธ์ํ ์ ์๋ ์น ์๋ฒ์ ๊ธฐ๋ฅ์ ๋งํ๋ฉฐ, 'Servlet Engine'์ด๋ผ๊ณ ๋ ํ๋ค.
- ์น Application ์์์ Servlet์ด ์กด์ฌํ๋ ๋๋ ํ ๋ฆฌ์ ์์ฑ๋ .javaํ์ผ์ด .class๋ก ์ปดํ์ผ๋๋ฉด
- ์น ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ด ์คํ์ํค๋ฉฐ, ๊ตฌ์ถ๋ฐฉ๋ฒ์ ์๊ด์์ด Servlet ์ํ์ ์์ฒญ ๋ฐ์ ๋๋ง๋ค ์ฐ๋ ๋๋ฅผ ๋ณ๋ ฌ๋ก ๊ธฐ๋ํ์ฌ ์ํํ๊ฒ ๋๋๋ฐ ์ด๋ฌํ ๊ณผ์ ์ ๊ตฌํํด์ฃผ๋๊ฒ ๋ฐ๋ก ์น ์๋ฒ ๊ธฐ๋ฅ์ ๊ฐ์ง Tomcat์ด๋ค.
-
๋๋ณด๊ธฐํฐ์บฃ์ ์น ์๋ฒ์ Servlet ํด๋์ค๋ฅผ ์คํ์ํฌ ์ ์๋ ์๋ฐ ๊ฐ์๋จธ์ (JVM)์ ์ํํ ์ ์๊ฒ ํด์ฃผ๋ ์ผ๋ จ์ ์ํํธ์จ์ด์ด๋ฉฐ Servlet Container์ ์น ์๋ฒ ๊ธฐ๋ฅ์ ๋ด์ฅํด์ ์ง์ํด์ฃผ๋ ๋ ๋ฆฝํ Servlet Engine์ด๋ค.
- ํฐ์บฃ์ ์น Application์ ํ๋์ ServletContext๋ก ๋งคํํ๊ณ ์ฌ๋ฌ ๊ฐ์ servlet์ ๊ฐ๊ฐ ํ๋์ servletConfig ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉฐ ๋ก๋ฉ๋๋ค.
- HTTP์์์ ๋์ํ๋ Servlet์ Servlet Container์ ( client request + server response ) ์ ๋ํ ํ๋กํ ์ฝ ๊ฐ์ ๊ฐ์ง๊ณ ๋์๋๋ฉฐ ์น Application ๋จ์๋ก ๊ตฌ์ฑ๋๋ค.
7. Servlet๊ณผ JSP์ ํ๊ณ
์ฌ๊ธฐ์ JSP์ ๋ํด์ ๋ค๋ฃจ์ง๋ ์์์ง๋ง (์ถํ์ ์ ๋ฆฌํ ์์ ..)
Servlet์ผ๋ก ๊ฐ๋ฐํ ๋ View๋ฅผ response์ ์๋ฐ ์ฝ๋ ์ฌ์ด์ ์ง์ด ๋ฃ๊ณ ํ๋ ๊ณผ์ ์ด ๋๋ฌด ์ฝ๋๊ฐ ๋๋ฝ๊ณ ๋ณต์กํ๋ค.
JSP๋ฅผ ์ฌ์ฉํ์ฌ View๋ฅผ ์์ฑํ๋ HTML ์์ ์ Servlet ๋ฐฉ์๋ณด๋ค ๊น๋ํ๊ฒ ์งํํ ์ ์๊ณ ๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ํ์ํ ๋ถ๋ถ์๋ง ์๋ฐ ์ฝ๋๋ฅผ ์ง์ด๋ฃ๋ ๋ฐฉ์์ผ๋ก Servlet ๋ฐฉ์๋ณด๋ค๋ ๋ ์ข์์ง ๊ฒ ๊ฐ๊ธฐ๋ ํ๋ค.
ํ์ง๋ง
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="hello.servlet.domain.member.Member" %>
<%@ page import="hello.servlet.domain.member.MemberRepository" %>
<%
MemberRepository memberRepository = MemberRepository.getInstance();
System.out.println("MemberSaveServlet.service");
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
Member member = new Member(username, age);
memberRepository.save(member);
%>
<html>
<head>
<title>Title</title>
</head>
<body>
์ฑ๊ณต
<ul>
<li>id=<%=member.getId()%></li>
<li>username=<%=member.getUsername()%></li>
<li>age=<%=member.getAge()%></li>
</ul>
<a href="/index.html">๋ฉ์ธ</a>
</body>
</html>
์ ์ฝ๋๋ ํ์์ ์ ์ฅํ๊ณ ์ ์ฅํ ํ์์ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๋ JSP ์ฝ๋์ด๋ค.
์ฝ๋ ์๋จ์ ํ์ ์ ์ฅ์ ๋น์ง๋์ค ๋ก์ง์ด ์๊ณ ์๋์ View ์์ญ์ HTML ์ฝ๋๊ฐ ์๋ค.
์ด๋ ๋ฏ JSP๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ํ๊ณ ์๋ค. ์ ์ง๋ณด์๋ ์ด๋ ต๊ณ ๋ฌด์๋ณด๋ค ๋ณด๊ธฐ๊ฐ ๋๋ฌด ํ๋ค ๊ฒ ์ด๋ค
๊ทธ๋์ ์ด์ MVC ํจํด์ด ๋ฑ์ฅํ๊ฒ ๋์๋ค... To be continued
'๐ Backend > ๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DispatcherServlet์ doDispatch์์ HandlerMapping ๊ณผ์ ์ ๋ํด์ (0) | 2022.07.31 |
---|---|
Path Variable VS Query Parameter (0) | 2022.07.29 |
Bean Scope๊ฐ ๋ญ๊น? (0) | 2022.07.13 |
Spring DI 4๊ฐ์ง ๋ฐฉ๋ฒ๊ณผ ์ต์ ์ฒ๋ฆฌ (0) | 2022.07.08 |
IOC, DI, Container (0) | 2022.07.05 |