Java SE ์ Java EE
Java SE (Java Standard Edition)
Java SE๋ Java์ ํต์ฌ API์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ๋ ์๋์
์ด๋ค.
๊ฐ๋จํ ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ์๋ฒ ๊ตฌ์ถ์ด ๊ฐ๋ฅํ๋ค.
์ฃผ์ ๊ตฌ์ฑ ์์:
1.
JVM (Java Virtual Machine): ์๋ฐ ๋ฐ์ดํธ์ฝ๋๋ฅผ ์คํํ๋ ๊ฐ์ ๋จธ์ ์ผ๋ก, ํ๋ซํผ ๋
๋ฆฝ์ฑ์ ์ ๊ณตํ๋ค.
2.
JDK (Java Development Kit): ์๋ฐ ์ปดํ์ผ๋ฌ(javac), ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์คํ ํ๊ฒฝ์ ํฌํจํ ๊ฐ๋ฐ ๋๊ตฌ ๋ชจ์
3.
JRE (Java Runtime Environment): ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์
์ ์คํํ๊ธฐ ์ํ ํ๊ฒฝ์ผ๋ก, JVM๊ณผ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ๋ค.
4.
ํต์ฌ API: ์๋ฐ SE๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ API๋ฅผ ์ ๊ณตํ๋ค.
โข
java.lang: ๊ธฐ๋ณธ์ ์ธ ์๋ฐ ํด๋์ค(์: String, Math, System ๋ฑ)
โข
java.util: ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ํธ๋ฆฌํฐ ํด๋์ค(์: List, Map, Date ๋ฑ)
โข
java.io: ์
๋ ฅ๊ณผ ์ถ๋ ฅ ์คํธ๋ฆผ ์ฒ๋ฆฌ
โข
java.nio: ๋น๋๊ธฐ ์
์ถ๋ ฅ ์ฒ๋ฆฌ
โข
java.net: ๋คํธ์ํน ๊ธฐ๋ฅ(์: URL, Socket ๋ฑ)
โข
java.sql: JDBC๋ฅผ ํตํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ
โข
java.time: ๋ ์ง์ ์๊ฐ API
Java EE (Java Enterprise Edition)
โข
Java EE๋ Java SE์ ํ์ฅ ๋ฒ์ ์ผ๋ก ์๋ฒ ๊ฐ๋ฐ์ ์ํ ํ์ฅ๋ API์ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ ํ๋ซํผ์ด๋ค.
โข
Tomcatย ๋ฑ์ WAS๋ฅผ ์ด์ฉํ๋ ์๋ฒ ๊ฐ๋ฐ์ Java EE์์ ์ถ๊ฐ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค.
โข
ํนํย JSP์ย Servlet์ ๋ง๋ค๊ณ ์คํํ๋ ๊ท์น๊ณผย EJB(Enterpise JavaBeans)์ ๋ถ์ฐ ์ปดํฌ๋ํธ, ์น ์๋น์ค ๊ท์น ๋ฑ์ ์ถ๊ฐ๋ก ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์๋ธ๋ฆฟ๊ณผ JSP๋ฅผ ๊ตฌํํ๋ ๊ธฐ๋ฅ์ย ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ผ๊ณ ํ๋ค.
์ฃผ์ ๊ตฌ์ฑ ์์:
1.
์น ๊ธฐ์ :
โข
Servlet: ์๋ฒ ์ธก์์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์๋ฐ ํด๋์ค
โข
JSP (JavaServer Pages): HTML๊ณผ ์๋ฐ ์ฝ๋๋ฅผ ๊ฒฐํฉํ์ฌ ๋์ ์ธ ์น ํ์ด์ง๋ฅผ ์์ฑ
โข
JSF (JavaServer Faces): ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ํ๋ ์์ํฌ
2.
EJB (Enterprise JavaBeans): ๋ถ์ฐ ์ปดํจํ
๋ฐ ํธ๋์ญ์
์ฒ๋ฆฌ๋ฅผ ์ง์ํ๋ ์๋ฒ ์ธก ๊ตฌ์ฑ ์์
โข
Session Beans: ๋น์ฆ๋์ค ๋ก์ง์ ๊ตฌํ
โข
Message-Driven Beans: ๋น๋๊ธฐ ๋ฉ์์ง์ ์ฒ๋ฆฌ
3.
JPA (Java Persistence API): ๊ฐ์ฒด-๊ด๊ณ ๋งคํ(ORM) ํ๋ ์์ํฌ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ฐ ๊ฐ์ฒด ๊ฐ์ ๋งคํ์ ์ง์ํ๋ค.
JSP์ Servlet
Servlet
โข
ํ์ฅ์๊ฐ java ํ์ผ
โข
์๋ฐ์ ์ผ๋ฐ์ ์ธ ํด๋์ค์ ๋์ผํ ๊ฐ๋
โข
์น์ ๋ค๋ฃฐ ์ ์๋๋ก ํด์ฃผ๋ โHttpServletโ ํด๋์ค๋ฅผ ์์๋ฐ์ ํด๋์ค๋ฅผ ์๋ฏธ
โข
์๋ฐ ์น ์๋ฒ๋ก ์น ํ์ด์ง๋ฅผ ์ ๊ณตํ ๋, ๋์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋์์ฃผ๋ ์๋ฐ ์ํํธ์จ์ด ์ปดํฌ๋ํธ
@WebServlet("/home")
public class HomeController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
OutputStream out = response.getOutputStream();
PrintStream writer = new PrintStream(out, true);
writer.println("<html>");
writer.println("<head>");
writer.println("</head>");
writer.println("<body>");
writer.println("<h1>helloWorld~</h1>");
writer.println("name : " + request.getParameter("name") + "<br/>");
writer.println("</body>");
writer.println("</html>");
writer.close();
}
}
Java
๋ณต์ฌ
Servlet์์ ์ฌ์ฉ์์๊ฒ ์๋ตํ html ์ฝ๋๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์ ์คํธ๋ฆผ ๊ฐ์ฒด์ printํ๋ ์ฝ๋.
Servlet ๋จ๋
์ฌ์ฉ์ ๋ฌธ์ ์
โข
์๋ฐ์์ html ์ฝ๋๊ฐ ๋ค์ด๊ฐ ์์ง๋ง ์ฝ๋๋ฅผ ์ฝ์
ํ๋๊ฒ ์๋ ๊ทธ์ ์ถ๋ ฅํด์ฃผ๋ ๋ฐฉ์
โข
๋ณต์กํ ๋ ์ด์์์ ๊ฐ์ง ํ์ด์ง๋ฅผ ์๋ตํ๋ ค๋ฉด ์ฝ๋๊ฐ ๊ธธ์ด์ง ์ ๋ฐ์ ์๋ค.
JSP(Java Server Page)
โข
ํ์ฅ์๊ฐ .jsp ํ์ผ
โข
Servlet์ ์ฌ์ฉํด ์น์ ๋ง๋ค ๊ฒฝ์ฐ ํ๋ฉด ์ธํฐํ์ด์ค ๊ตฌํ์ด ์ด๋ ต๋ค๋ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด ๋ง๋ ์คํฌ๋ฆฝํธ ์ธ์ด
โข
Servlet์ ์๋ฐ ์ธ์ด์์ html์ฝ๋๋ฅผ ์ฝ์
ํ๋ ๊ฒ์ด๋ผ๋ฉด, JSP๋ html์ฝ๋ ์์ ์๋ฐ ์ธ์ด๋ฅผ ์ฝ์
ํ๋ ๋ฐฉ์
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP ์์ </title>
</head>
<body>
<h1>hello world</h1>
<%
for(int i = 0; i < 10; i++){
out.println(i);
}
%>
</body>
</html>
HTML
๋ณต์ฌ
JSP์ ์คํ๊ณผ์
1.
JSP ํ์ผ์ Servlet ํ์ผ(.java)๋ก ๋ณํ
2.
๋ณํ๋ Servlet ํ์ผ์ ์ปดํ์ผํด์ ์๋ฐ ๋ฐ์ดํธ ์ฝ๋ ํ์ผ(.class)์ ์์ฑ
3.
์ปดํ์ผ๋ ํ์ผ์ ์คํ ๊ฒฐ๊ณผ ์๋ฐ ์ธ์ด๊ฐ ๋ชจ๋ ์ฌ๋ผ์ง html ์ฝ๋๋ฅผ ์ถ๋ ฅ
์์ for๋ฌธ์ผ๋ก 0~9๊น์ง ์ถ๋ ฅํ JSP ํ์ผ์ ์๋์ ๊ฐ์ด ์๋ธ๋ฆฟ ํ์ผ๋ก ๋ณํ๋์ด ์ปดํ์ผ ๋ ๋ค, ์ต์ข
์ ์ผ๋ก HTML๋ก ๋ณํ๋์ด ์ฌ์ฉ์์๊ฒ ๋ ์๊ฐ๋ค. ์งง์ ๊ตฌ๋ฌธ์์๋ ์๋ธ๋ฆฟ ํ์ผ๋ก ๋ณํ๋๋ฉด ์์ฒญ๋ ๊ธธ์ด์ ์ฝ๋๊ฐ ๋๋ค.
โข
JSP(.jsp) โ Servlet(.java)์ผ๋ก ๋ณํ๋ ์ฝ๋
/*
* Generated by the Jasper component of Apache Tomcat
* Version: Apache Tomcat/9.0.30
* Generated at: 2020-02-12 15:41:55 UTC
* Note: The last modified time of this file was set to
* the last modified time of the source file after
* generation to assist with modification tracking.
*/
package org.apache.jsp;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class Sample2_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports {
private static final javax.servlet.jsp.JspFactory _jspxFactory = javax.servlet.jsp.JspFactory.getDefaultFactory();
private static java.util.Map<java.lang.String, java.lang.Long> _jspx_dependants;
private static final java.util.Set<java.lang.String> _jspx_imports_packages;
private static final java.util.Set<java.lang.String> _jspx_imports_classes;
static {
_jspx_imports_packages = new java.util.HashSet<>();
_jspx_imports_packages.add("javax.servlet");
_jspx_imports_packages.add("javax.servlet.http");
_jspx_imports_packages.add("javax.servlet.jsp");
_jspx_imports_classes = null;
}
private volatile javax.el.ExpressionFactory _el_expressionfactory;
private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;
public java.util.Map<java.lang.String, java.lang.Long> getDependants() {
return _jspx_dependants;
}
public java.util.Set<java.lang.String> getPackageImports() {
return _jspx_imports_packages;
}
public java.util.Set<java.lang.String> getClassImports() {
return _jspx_imports_classes;
}
public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
if (_el_expressionfactory == null) {
synchronized (this) {
if (_el_expressionfactory == null) {
_el_expressionfactory = _jspxFactory
.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
}
}
}
return _el_expressionfactory;
}
public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
if (_jsp_instancemanager == null) {
synchronized (this) {
if (_jsp_instancemanager == null) {
_jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory
.getInstanceManager(getServletConfig());
}
}
}
return _jsp_instancemanager;
}
public void _jspInit() {
}
public void _jspDestroy() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response)
throws java.io.IOException, javax.servlet.ServletException {
if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
response.setHeader("Allow", "GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
response.setHeader("Allow", "GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED,
"JSP๋ค์ ์ค์ง GET, POST ๋๋ HEAD ๋ฉ์๋๋ง์ ํ์ฉํฉ๋๋ค. Jasper๋ OPTIONS ๋ฉ์๋ ๋ํ ํ์ฉํฉ๋๋ค.");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.servlet.ServletConfig config;
javax.servlet.jsp.JspWriter out = null;
final java.lang.Object page = this;
javax.servlet.jsp.JspWriter _jspx_out = null;
javax.servlet.jsp.PageContext _jspx_page_context = null;
try {
response.setContentType("text/html; charset=EUC-KR");
pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
out.write("\r\n");
out.write("<!DOCTYPE html>\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write("<meta charset=\"EUC-KR\">\r\n");
out.write("<title>Insert title here</title>\r\n");
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("\r\n");
out.write('\r');
out.write('\n');
for (int i = 0; i < 10; i++) {
out.println(i);
}
out.write("\r\n");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
} catch (java.lang.Throwable t) {
if (!(t instanceof javax.servlet.jsp.SkipPageException)) {
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
try {
if (response.isCommitted()) {
out.flush();
} else {
out.clearBuffer();
}
} catch (java.io.IOException e) {
}
if (_jspx_page_context != null)
_jspx_page_context.handlePageException(t);
else
throw new ServletException(t);
}
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
Java
๋ณต์ฌ
โข
JSP(.jsp) โ Servlet(.java) โ .class ํ์ผ ๋ณํ ํ ์ต์ข
์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ฌ๋ ์ฝ๋
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
0
1
2
3
4
5
6
7
8
9
</body>
</html>
HTML
๋ณต์ฌ
์์ ๊ฐ์ ํน์ง์ผ๋ก ์ธํด ์ผ๋ฐ์ ์ผ๋ก JSP๋ ํ๋ฉด๊ตฌ์ฑ์ ์ฌ์ฉ๋๊ณ ์๋ธ๋ฆฟ์ ๋ก์ง์ ์ํํ๋๋ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
ย : ใ
ใ
ใ
ใ
ํด๋ผ์ด์ธํธ-์๋ฒ ์ํคํ
์ฒ์์ WEB์์ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๊ธฐ ์ํด ์๋ธ๋ฆฟ์ด ์ฌ์ฉ๋๋๊ฑด ์๊ฒ ์ด. ๊ทธ๋ผ ์๋ธ๋ฆฟ์ด ์ ์ข์๊ฑด๋ฐ?
์๋ธ๋ฆฟ์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ HTTP ํต์ ์ผ๋ก ์ค๊ณ ๊ฐ๋ ๋ฌธ์์ด์ ํ์ฑํ์ฌ ์๋ธ๋ฆฟ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํด๋ ๋ฌด๋ฐฉํ์ง๋ง, ์ด๋ฏธ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ ์๋ธ๋ฆฟ์ ๋๋๊ณ ์ง์ ๋ฌธ์์ด ํ์ฑ์ ๊ตฌํํ๋ ๊ฒ์ ๊ฐ๋ฐ์๊ฐ ์จ์ ํ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ์ง ๋ชปํ๊ฒ ๋ง๋ค ์ ์๋ค.
์ฐ๋ฆฌ๋ ์๋ธ๋ฆฟ์ ํตํด ๋ฌธ์์ด ํ์ฑ ๋ฑ์ ์ด์ฌ๋ฆฌ์ง ์๊ณ ๋น์ฆ๋์ค ๋ก์ง์ ๋์ฑ ์ง์คํ ์ ์๋ค.
์ง์ ๋ง๋ค๋ฉด ๋น์ฆ๋์ค ๋ก์ง์ ์ง๊ธฐ ์ ์ ์ ๋ง์ ๊ท์ฝ๊ณผ ๋ฌธ์์ด ๊ฒ์ฆ์ ์ ์ ์ด ๋๊ฐ๋ฒ๋ฆด ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ..
CGI์ Servlet
์๋ธ๋ฆฟ ์ด์ ์ CGI๊ฐ ์์๋ค.
CGI(Common Gateway Interface)๋ ์๋ธ๋ฆฟ์ ์กฐ์์ฏค ๋๋ ๊ธฐ์ ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. CGI ์ด์ ์ ์น์๋ฒ๋ ๋จ์ํ ์ฌ์ฉ์๊ฐ ํน์ ๊ฒฝ๋ก๋ฅผ ์
๋ ฅํ๋ฉด ๊ทธ ๊ฒฝ๋ก์ ํด๋นํ๋ ๋ฆฌ์์ค๋ง ๋ฟ๋ ค์ฃผ๋ ์ญํ ์ด์๋ค.
๊ทธ๋ฐ๋ฐ CGI๊ฐ ๋์ค๋ฉด์ย ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ์ธ์๋ก ๋ฃ์ ํ๋ก๊ทธ๋จ์ ์คํ์ํจ ๊ฒฐ๊ณผ๋ฅผ ์น์ผ๋ก ๋ฟ๋ ค์ค ์ ์๊ฒ ๋์๋ค.ย ๊ฐ๋จํ ์ ์ํ๋ฉด CGI๋ย ์น์๋ฒ์์ ๋์ ์ธ ํ์ด์ง๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์์์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ย ์ด์๋ค.
๊ธฐ์กด CGI์ ๋จ์ ๊ณผ ๊ทธ ๋จ์ ์ ํด๊ฒฐํ ์๋ธ๋ฆฟ
โข
๊ธฐ์กด CGI์ ๋์๋ฐฉ์
CGI๋ ๋ธ๋ผ์ฐ์ ์์ ์น์๋ฒ์ ์์ฒญ์ด ๊ฐ์ ๋, ๊ฐ๊ฐ์ ๋ํ ์ฒ๋ฆฌ ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค์ด๋ธ๋ค๋ ๋จ์ ์ด ์์๋ค. ๊ทธ๋์ ๋๋์ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ์๋ ์ฝ๊ฐ ๋ฌด๋ฆฌ๊ฐ ์์๋ค.
โข
์๋ธ๋ฆฟ์ ๋์๋ฐฉ์
์๋ธ๋ฆฟ์ ๊ฐ ์์ฒญ์ ๋ํ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ํ๋ก์ธ์ค 1๊ฐ๊ฐ ์๊ณ ๊ทธ ๋ด๋ถ์ ์ค๋ ๋ ํ์ด๋ผ๋ ์ค๋ ๋๋ค์ด ์์ฑ๋ ์ ์๋ ๊ณต๊ฐ์ ๋ง๋ค์ด ์ค๋ ๋๋ก ์ฒ๋ฆฌํ๋ค.
๋ํ ์ค๋ ๋ ํ์ ๊ฐ์๋ฅผ ์ง์ ํ์ฌ ์ผ์ ์ด์์ ์์ฒญ์ด ๋ค์ด์์ ๋๋ ๋๊ธฐํ๋๋ก ๋ง๋ค์ด์ ๋๋์ ์์ฒญ์ด ๋ค์ด์์ ๋๋ ์กฐ๊ธ ๋ ์์ ์ฑ์ด ์ฆ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ์ค ๋น์ทํ ๊ฒฝ๋ก์ ์์ฒญ์ ํ ํด๋ผ์ด์ธํธ๋ค์ ๋น์ฆ๋์ค ๋ก์ง์ ๋๋ถ๋ถ ์ค๋ณต๋๋ ๋ถ๋ถ์ด๋ฏ๋ก, ์ค๋ ๋ ์ฌ์ด์ ์๋ ๊ณต์ ์์ (Code,ย Data,ย Heap)์ ํตํด ๋์ฑ ํจ์จ์ ์ธ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์๋ธ๋ฆฟ๊ณผ CGI์ ๊ฒฐ์ ์ ์ฐจ์ด๋?
์๋ธ๋ฆฟ๋ CGI ๊ท์น์ ๋ฐ๋ผ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ๊น์ง๋ ๊ฐ์ง๋ง, ์๋ธ๋ฆฟ์ ์๋ธ๋ฆฟ์ ๊ฐ์ง๊ณ ์๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์๊ฒ ์ด ์ผ์ ์์ํ๋ค. ๋์ ์ฒด๊ณ์ ์ผ๋ก ์ด๋ฅผ ์ํํ๊ธฐ ์ํด ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ์๋ธ๋ฆฟ ์ฌ์ด์ ๊ท์น์ด ์กด์ฌํ๊ฒ ๋๋ค.
ย : ใ
ใ
ใ
ใ
์๋ธ๋ฆฟ์ด ์ข์ ๊ธฐ์ ์ด๋ผ๋๊ฑฐ ์๊ฒ ์ด. ๊ทธ๋ผ ํ๋ก๊ทธ๋จ ๋ด๋ถ์ ์ผ๋ก๋ ์ด๋ป๊ฒ ๋์ํ๊ณ ์ด๋ค ๊ฒ๋ค๋ก ๊ตฌ์ฑ๋๋๋ฐ?
Servlet ๋ด๋ถ ํ๋ก์ธ์ค
์๋ธ๋ฆฟ ๊ฐ๋ฐ ํ๋ฆ
1.
๊ฐ๋ฐ์๊ฐ ์๋ฐ ์๋ธ๋ฆฟ ์์ค์ฝ๋(.java)๋ฅผ ์์ฑํ๋ค. (์์์๋ ์คํ๋ง ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด ์์ฑ)
2.
ํด๋น ์๋ฐ ์๋ธ๋ฆฟ ์์ค๊ฐ ๋น๋์ ์ปดํ์ผ๋๋ฉฐ ์๋ธ๋ฆฟ ํด๋์ค(.class)๊ฐ ๋๋ค.
3.
ํด๋น ์๋ฐ ์๋ธ๋ฆฟ ํด๋์ค๊ฐ ํฐ์บฃ๊ณผ ๊ฐ์ ์๋ธ๋ฆฟ ์ปจํ
์ด๋์ ๋ฑ๋ก๋๋ค.
4.
ํด๋ผ์ด์ธํธ๊ฐ ํน์ ๊ฒฝ๋ก์ ๋ํ HTTP Request๋ฅผ ๋ณด๋ธ๋ค.
5.
HTTP Request์ ์์ํ๋ ์๋ธ๋ฆฟ์ด ์คํ๋๋ค.
6.
์๋ธ๋ฆฟ ๋ฉ์๋(๋น์ฆ๋์ค ๋ก์ง)๊ฐ ์คํ๋๋ค.
7.
DB ์ฐ๋ ์์
์ด ์๋ ๊ฒฝ์ฐ DB ์ฐ๋์ด ๋์ด ๋ฐ์ดํฐ๋ฅผ CRUDํ๋ค.
8.
์์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํด์ค๋ค.
์๋ธ๋ฆฟ ๋ผ์ดํ์ฌ์ดํด
1.
์๋ธ๋ฆฟ์ ์์ฑ ์ดํ์ย init()ย ๋ฉ์๋๋ฅผ ํตํด ์ด๊ธฐํ๋๋ค.
2.
ํด๋ผ์ด์ธํธ๊ฐ ์๋น์ค(service())๋ก ๋ณด๋ธ ์์ฒญ๋ค์ ์ฒ๋ฆฌํ๋ค.
3.
์๋ธ๋ฆฟ์ ์ฌ์ฉ ์ค์ง๋ ํ,ย destroy()๋ฅผ ์ด์ฉํด ์ ๊ฑฐ๋๋ค.
์ด๊ธฐ์ CGI์ฒ๋ผ ํ๋์ ์์ฒญ์ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ผ์ง๋ ๊ตฌ์กฐ๋ฅผ ํํผํ์ฌ Servlet์ด ํน์ ํ ๋ผ์ดํ์ฌ์ดํด์ ๊ฐ๊ณ ์ปจํ
์ด๋ ๋ด๋ถ์์ ์ฐ๋ ๋ ๋จ์๋ก ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
์ด ๊ณผ์ ์์ ํ๋ฆ์ ๊ฐ๋ฐ์๊ฐ ์๋ ์ปจํ
์ด๋๊ฐ ์ ์ดํ๋๋ฐ, ์ด๋ฅผ IoC (Inversion of Control)๋ผ๊ณ ํ๋ค.
init ๋ฉ์๋
void init(ServletConfig config) throws ServletException
Java
๋ณต์ฌ
์ด๋ค ์๋ธ๋ฆฟ์ด ์๋น์ค์ ๋ฐฐ์น ๋๊ณ ์๋ค๋ ๊ฒ์ ๋ํ๋ด๊ธฐ ์ํด ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ก๋ถํฐ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค.
init()ย ๋ฉ์๋๋ ์๋ธ๋ฆฟ์ด ์์ฒญ์ ๋ฐ๊ธฐ ์ ์ ๋ฐ๋์ ์ฑ๊ณต์ ์ผ๋ก ๋๋ง์ณ์ ธ์ผ ํ๋ค.
๋ง์ผย init()ย ๋ฉ์๋๋ฅผ ์ํํ๋ค๊ฐ ์๋์ ๊ฐ์ ํ์์ด ์ผ์ด๋๋ฉด ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ ์๋ธ๋ฆฟ์ ๋ฑ๋กํ ์ ์๋ค.
1.
ServletExceptionย ์์ธ๊ฐ ๋ฐ์ํ๊ฑฐ๋
2.
์น ์๋ฒ์ ์ํด ์ ํด์ง ์๊ฐ ๋ด์ ๋ฐํ๋์ง ์๋๋ค๋ฉด,
์ปจํ
์ด๋๋ ์๋ธ๋ฆฟ์ ๋ฑ๋กํ ์ ์๋ค.
service ๋ฉ์๋
void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOException
Java
๋ณต์ฌ
์๋ธ๋ฆฟ์ด ์์ฒญ์ ์๋ตํ๋๋ก ์๋ธ๋ฆฟ ์ปจํ
์ด๋์์ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค. ์๋ธ๋ฆฟ์ย init()ย ๋ฉ์๋๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋๋ ์ดํ์ ์ด ๋ฉ์๋๊ฐ ์คํ๋๋ค. ์๋ต์ ์ํ ์ฝ๋๋ ํญ์ ์๋ฌ๋ฅผ ๋ณด๋ด๊ฑฐ๋ ๋์ง๊ธฐ ์ํด ์ค์ ๋์ด์ผ ํ๋ค.
์๋ธ๋ฆฟ๋ค์ ์ผ๋ฐ์ ์ผ๋ก ๋ฉํฐ์ค๋ ๋ ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ค ๋ด๋ถ์์ ์คํ๋๋ค. ์ด ์๋ธ๋ฆฟ ์ปจํ
์ด๋๋ค์ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ์ ๋์๋ค๋ฐ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค. ๊ฐ๋ฐ์๋ ๊ณต์ ๋ ์์์ ๋ํ ์ ๊ทผ, ๋คํธ์ํฌ ์ปค๋ฅ์
, ์๋ธ๋ฆฟ ํด๋์ค ์ ๊ทผ, ์๋ธ๋ฆฟ ์ธ์คํด์ค ๋ณ์ ์ ๊ทผ ๋ฑ์ ๋ฐ๋์ ๋๊ธฐํ ์์ผ์ฃผ์ด์ผ ํ๋ค.
์๋ธ๋ฆฟ ๊ฐ์ฒด์ ์ฌ์ฌ์ฉ
์ผ๋จ ์์ฑ๋ย Servletย ๊ฐ์ฒด๋ ๋ฉ๋ชจ๋ฆฌ์ ๋จ๊ฒจ๋์ด, ๋์ผํ ์๋ธ๋ฆฟ์ ๋ํด ์์ฒญ์ด ์จ๋ค๋ฉด ๋ค์ย init()ย ๋ถํฐ ์ํํ๋ ๊ฒ์ด ์๋๋ผ ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋จ๊ฒจ๋์๋ ๊ฒ์ ์ฌ์ฌ์ฉํ๋ค.
๊ทธ๋์ ์๋ฐ ์๋ธ๋ฆฟ์ผ๋ก ๋ง๋ค์ด์ง ํ์ด์ง๋ ์ฒซ ๋ก๋ฉ ๋๋ ์๋์ ์ผ๋ก ๋๋ ธ๋ค๊ฐ ๊ทธ ์ดํ์๋ ๋ฏธ๋ฆฌ ๋ก๋ฉ๋ ์๋ธ๋ฆฟ์ ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋น ๋ฅด๋ค.
Tomcat์์์ Servlet
๊ณต์ ๋ฌธ์ ์ฐธ์กฐ
์๋ธ๋ฆฟ ์ธํฐํ์ด์ค
โข
์๋ธ๋ฆฟ์ ์น์๋ฒ ๋ด๋ถ์์ ๋์ํ๋ ์์ ์๋ฐ ํ๋ก๊ทธ๋จ์ด๋ค.
โข
์๋ธ๋ฆฟ์ ์นํด๋ผ์ด์ธํธ์๊ฒ ์์ฒญ์ ๋ฐ๊ณ ๊ทธ์ ์๋ต์ ํด์ค๋ค.
โฆ
์ฃผ๋ก HTTP๋ฅผ ํตํ๋ค.
โข
javax.servletGenericServletย ํน์ย javax.servlet.http.HttpServlet์ ์์๋ฐ์์ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ๋ค.
GenericServlet๊ณผ HttpServlet
โข
GenericServlet์ด๋?
.service()ย ๋ฉ์๋๋ฅผ ์ ์ธํ ๋๋จธ์ง๋ค. Servlet ์ธํฐํ์ด์ค ๋ฉ์๋๋ฅผ ๊ตฌํํด๋์ย abstract class HTTPย ํ๋กํ ์ฝ ์ธย ๋
๋ฆฝ์ ์ธ ํ๋กํ ์ฝ ์๋ธ๋ฆฟ์ ๋ง๋ค ๋ ์ฌ์ฉ๋๋ค.
โข
HttpServlet
์ฐ๋ฆฌ๊ฐ ์ฃผ๋ก ์ฌ์ฉํ๋ ์๋ธ๋ฆฟ์ด๋ค.ย GenericServlet์ ์์๋ฐ๊ณ ์ถ๊ฐ๋กย HTTP ํ๋กํ ์ฝ์ ๊ธฐ๋ฅย (doGet, doPost, ...)์ ์ ๊ณตํ๋ค.
์คํ๋ง ์๋ธ๋ฆฟ์ ์์ ๊ด๊ณ
์์ ๊ฐ์ ์์ ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค. HttpServlet๊น์ง๋ย WAS๋ผ ๋ถ๋ฆฌ๋ ํฐ์บฃ์์ ๊ตฌํ๋๊ณ , ์คํ๋ง์ย WAS๋ก ๋ถํฐ ์์๋ฐ์ย HttpServlet์ ์ด์ฉํ์ฌ ์คํ๋ง์์ ์ฐ์ด๋ย Servlet๋ค์ ๊ตฌํํ๋ค.