관리 메뉴

공부한것들을 정리하는 블로그 입니다.

JSP 와 Servlet, 왜 같이 쓸까? 본문

CS 운영체제 네트워크 등/공부

JSP 와 Servlet, 왜 같이 쓸까?

호 두 2019. 11. 19. 11:43
반응형

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 으로 바꾸어서 돌립니다. 그림을 보시지요.

웹 브라우저 -> 웹 서버 -> JSP 컨테이너 -> *.jsp ->*.java ->*.class -> 웹 서버 -> 웹 브라우저



결국엔 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]

 

 

반응형
Comments