JSP
Servlet, 같이 쓸까
?

기술을 공부하지 않았던 나에게 항상 JSPPHPASP 이런 것들은 탐험 가능하지만 재미없을 같은 그런 그러다 올해 8월부터 갑자기 1 반동안 하지 않던 코딩을 다시 시작하고 기술을 공부하면서, Java 다시 손에 쥐니 눈앞에 있는게 JSP 

다들 아시겠지만 
JSP  공부하다 보면 항상 처음에 마주치는 관문이 있습니다Servlet  무엇인가JSP 뭐가 다르지? ? 인터넷 뒤져보면 같이 쓴다는데Servlet 만으로도 페이지를 만들고JSP 만으로도 되네. ? 근데Model 1 뭐고 Model 2  무엇이지MVCSpring 좋다던데 이건 뭐냐

이렇게 제대로 공부하지도 못하고 없이 이어져 나오는 프레임워크의 늪에 빠져 방황하다가 다시 정신차리고 보니 눈앞엔 
JSP 있었습니다... 

Back to the basics

그래서 다시 기본부터 시작하기로 했습니다. JSP 무엇이고, Servlet 무엇인가

Servlet

servlet 톰캣 위에서 동작하는 java 프로그램입니다. 정확히 말하자면 servlet  초기화 되는 과정을 보면 됩니다여기  의하면, 서블릿 초기화는 다음과 같은 과정을 거칩니다




톰캣과 같은 
WAS  java 파일을 컴파일해서 Class 만들고 메모리에 올려 Servlet 객체 만들게 되고 Servlet 객체 doPostdoGet 통해 요청에 응답합니다. 초기화 과정을 자세히 보면 




initServicedestory 이런 콜백이 시점에 불리는걸 있지요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 보다 더요. 가장 잘나가니까

Ref :) 
http://atlas49.tistory.com/128 
http://www.javajigi.net/pages/viewpage.action?pageId=73


Posted by wychoi
,