공부한것들을 정리하는 블로그 입니다.
JSP 와 Servlet, 왜 같이 쓸까? 본문
Servlet
servlet은 톰캣 위에서 동작하는 java 프로그램입니다. 더 정확히 말하자면 servlet 이 초기화 되는 과정을 보면 됩니다. 여기 에 의하면, 서블릿 초기화는 다음과 같은 과정을 거칩니다.
톰캣과 같은 WAS 가 java 파일을 컴파일해서 Class로 만들고 메모리에 올려 Servlet 객체를 만들게 되고 이 Servlet 객체는 doPost, doGet을 통해 요청에 응답합니다. 초기화 과정을 더 자세히 보면
init, Service, destory 이런 콜백이 각 시점에 불리는걸 볼 수 있지요. init은 서블릿이 메모리에 로드 될때 실행됩니다. destory는 마찬가지로 언로드되기 전에 수행되는 콜백이구요. service 메소드는 HTTP Method 타입에 따라 doGet 혹은 doPost를 호출합니다.
기억해야 할 점은, 초기화된 서블릿이 클라이언트의 요청이 있을 때 마다 Thread를 생성해서 병렬적으로 service를 수행한다는 것. 서블릿 객체는 여러개 생성되지 않습니다. 생명주기 까지 길게 왔는데, 요약하면
WAS 를 통해 컴파일 된 후 메모리에 적재되어 클라이언트의 HTTP Get, Post 등의요청을 처리하는 자바 프로그램임.
Servlet 샘플 코드를 보시면 알겠지만, HTML 을 넣기 굉장히 불편합니다.
public class HelloServlet extends HttpServlet {
public void doGet(HttpServletRequest req,HttpServletResponse res)
throws ServletException,IOException {
res.setContentType("text/html;charset=UTF-8");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("Hello World!!");
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
}
JSP
그래서 JSP가 나왔답니다. HTML을 코딩하기 너무 불편해서, HTML 내부에 Java 코드를 삽입하는 형식의 JSP!! 샘플 코드를 보시겠습니다. 여기서 펌
<%@page import="java.util.Calendar" %>
<%@ page contentType="text/html; charset=UTF-8"%>
<% String str=String.format("%tF",Calendar.getInstance()); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
오늘은 <%=str%><br/> 한시간만 참으면 점심....
</body>
</html>
보시면 알겠지만, HTML 내부에 Java 코드가 있어 HTML 코드를 작성하기 쉽습니다. 단, 로직과 디자인이 한 파일내에 섞여있어 유지보수가 어렵답니다. 클래스 단위로 분해해서 OOP적으로 코드를 짜기도 어렵구. 하나가 편한대신, 다른 불편한 점들이 온 것이지요.
JSP 라는 새로운 개발 방법이 나왔지만, 사실 이 JSP 도 내부적으로는 Tomcat 이 Servlet 으로 바꾸어서 돌립니다. 그림을 보시지요.
결국엔 java 클래스 파일로 변환되어 메모리 상에 적재되지만, 개발자들이 HTML 부분을 편하게 코딩할 수 있게 만든건가봐요. 그리고 사람들이 이런 JSP를 이용해서 코딩을 하다보니 다음과 같이 하게 되더랍니다.
Model 1
여기 에 의하면, 사용자로부터 요청을 JSP가 받아(더 정확히는 JSP 에서 사용자가 요청을 합니다.) Java Bean(DTO, DAO)을 호출해 처리합니다. 이런 방식을 Model1 이라고 한답니다.
- 개발 속도가 빠르고
- 배우기 쉽지만
- 프레젠테이션 로직과 비즈니스 로직이 혼재
- JSP 코드가 복잡해져 유지 보수가 어려워집니다.
Model 2
단순히 JSP 만 사용하거나, Servlet만 사용하는 것이 아니라 두개의 장단점을 모두 취해 View 는 JSP로, Controller 는 Servlet 을 사용한 것이 바로 Model2 지요. 보여지는 부분은 HTML이 중심이 되는 JSP, 다른 자바 클래스에게 데이터를 넘겨주는 부분은 Java 코드가 중심이 되는 Servlet 이 담당하게 됩니다. 그리고 Model 영역 에서는 DTO, DAO를 통해 Mysql 과 같은 Data Storage 에 접근합니다.
익스프레션, 스크립틀릿 등 탐구할 영역이 많이 남았지만, 그것 이외에 공부하면서 얻을 수 있는 부분이 다른 Backend 와는 조금 다를 것 같다는 생각이 들어요.
Java 웹 서비스 진영의 디자인패턴이나 OOP적 노하우가 축적되면서 Spring 나왔고, 이것이 의미하는 바는 제가 '경험적'인 부분을 배울게 많다는 뜻이겠지요 ^^; 다른 Backend-language 보다 더요. 가장 잘나가니까.
출처: https://anster.tistory.com/128 [Old Lisper]
'CS 운영체제 네트워크 등 > 공부' 카테고리의 다른 글
Timeout : Connection Timeout / Socket Timeout / Read Timeout (0) | 2022.05.18 |
---|---|
자료구조와 알고리즘 (0) | 2022.05.18 |
운영체제 (0) | 2022.05.18 |
네트워크 (0) | 2022.05.18 |
TCP/IP 소켓 통신 (0) | 2020.06.11 |
대용량 웹서비스를 위한 마이크로 서비스 아키텍쳐의 이해(MSA의 이해) (0) | 2019.11.23 |
Web Server, Server Side, Client Side 이해 (0) | 2019.11.19 |
Tomcat saveOnRestart 속성 : 끊기지 않는 세션 유지 (0) | 2019.06.11 |