출처 : http://anster.tistory.com/128
Framework 의 늪
웹 기술을 공부하지 않았던 나에게 항상 JSP
, PHP
, ASP
이런 것들은 탐험 가능하지만 재미없을 것 같은 그런 곳 ㅠ 그러다 올해 8월부터 갑자기 1년 반동안 하지 않던 코딩을 다시 시작하고 웹 기술을 공부하면서, Java를 다시 손에 쥐니 눈앞에 있는게 JSP
다들 아시겠지만 JSP
를 공부하다 보면 항상 처음에 마주치는 관문이 있습니다. Servlet
은 무엇인가, JSP
랑 뭐가 다르지? 어? 인터넷 뒤져보면 같이 쓴다는데, Servlet
만으로도 페이지를 만들고, JSP
만으로도 되네. 응? 근데 Model 1
은 뭐고 Model 2
는 무엇이지? MVC
? Spring
이 좋다던데 이건 또 뭐냐.
이렇게 제대로 공부하지도 못하고 끝 없이 이어져 나오는 프레임워크의 늪에 빠져 방황하다가 다시 정신차리고 보니 눈앞엔 JSP
가 있었습니다...
Back to the basics
그래서 다시 기본부터 시작하기로 했습니다. 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 보다 더요. 가장 잘나가니까.
Ref :)
- http://atlas49.tistory.com/128
- http://www.javajigi.net/pages/viewpage.action?pageId=73
'JSP > Explain' 카테고리의 다른 글
DBMS 별 JDBC 설정 시 사용하는 Class 및 URL (0) | 2015.12.24 |
---|