JAVA & Open Framework2012. 2. 26. 21:46

JSP Model 2 Architecture

JavaWorld에 기고한 Govind Seshadri의 아티클
'Understanding JavaServer Pages Model 2 architecture'(12/29/99)
에 보면 JSP 초창기 스펙에 Model 1과 Model 2에 대해 다음과 같이 설명하고 있다.

This model(Model 2) can also be seen as a server-side implementation of the popular Model-View-Controller (MVC) design pattern.
The early JSP specifications advocated two philosophical approaches for building applications using JSP technology

그래서, 도대체 초창기 JSP 스펙에서 어떻게 언급되었는지가 궁금해서 스펙을 찾아보기로 결정했다.
강의할때는 그냥 '초창기 JSP 스펙에서 언급되었었다'라는 간단한 언급만 하고 넘어가던 차에 이제서야 할일을 한 느낌이다. ;; 하지만, 스펙을 생각만큼 빨리 찾지는 못했다. SUN 사이트에서는 1.0 이후 스펙들만 확인이 가능했기 때문에..

JavaServerTM PagesTM - Specification 0.92, October 7, 1998

다음은 번역내용이다.

JavaServer Pages Access Model

JSP를 다음 두가지 방식으로 사용할 수 있습니다.

Model 1: A request sent to a JavaServer Pages file
    - 클라이언트 웹 브라우저를 사용하는 사용자가 직접 JavaServer Pages(.jsp)에 요청을 날린다.
    - 클라이언트의 요청을 받은 후, JSP는 JavaBean에 정보를 요청한다.
    - JSP는 JavaBean의 내용을 조회하거나 뿌려줄 수 있다.


Model 2: A request sent to a Java Servlet
    : JSP를 사용하는 다른 방법은 Servlet에 request를 보내는 것이다.(JSP가 보내는게 아님)
    - 예제에서 클라이언트는 Servlet에 request를 보낸다.
    - Servlet이 동적 컨텐츠를 생성한다.
    - 예제에서 Servlet은 DB와 통신하기 위해 JDBC를 사용했다.
    - Servlet은 동적 컨텐츠를 Bean에 담는다.
    - JSP는 Bean으로부터 동적 컨텐츠에 접근하고, 클라이언트 웹 브라우저에 컨텐츠를 뿌려준다.



Common to both access models

    - Model 1, Model 2 둘 다 JSP파일은 .jsp 확장자로 구분이 된다.(이는 서버에 특별한 처리가 필요하다는 것)
    - 브라우저로부터의 직접요청이든, Servlet으로 부터의 요청이든 JSP에 요청이 들어오면, .jsp 파일은 오브젝트로 컴파일된다. (이 이유로, 최초 JSP요청에 대해 응답지연이 발생)
    - 오브젝트로부터의 결과는 브라우저에서 해석하고 뿌려줄 수 있는 표준 HTML이다.


내용을 정리해 보자면, 딱히 특별할게 없다. MVC에 대한 언급도 없다.
Model 2 아키텍처 자체는 
    JSP와 Servlet중에 무엇이 클라이언트의 요청을 받는가와 JSP의 역할에 따른 차이를 구분한 것일뿐이었다.
다시 생각해보면, Model 2는 JSP 스펙에서 Access Model을 규정하면서 나온것들이다.
다분히, JSP입장에서 생각해야 한다.

다시 Govind Seshadri의 아티클로 돌아가자.
사실 난 여기에서 강한 의문을 갖게 되었다. 과연, JSP 스팩에서 Model 2를 구분할때 MVC 디자인 패턴을 염두에 두고 구분을 했을까라는 점이다.
MVC 디자인 패턴이야 1970년대 Smalltalk에서 나온 개념이니, JSP가 생기기 훨씬 이전부터 존재하던 개념이었으니 말이다. 구글링을 통해 일단 단서를 찾았다.

   Model 1 Model 2 MVC

Model-View-Controller 패턴은 Trygve Reenskaug에 의해서 발명된 GUI 코드에서 Separate Of Concern을 위한 일반 기술이었다. 이는 곧 동등한 레벨의 분리를 위해 Java EE 어플리케이션에도 적용될 수 있다는점이 분명해지게 되었다. 그렇게 함으로써, Model 영역은 JavaBeans나 POJO로 작성하고, Controller로써 Servlet을, 모든 작업이 끝나고 결과를 포맷하거나 마크업하기 위해 JSP로 포워딩하게 되었다. MVC 패턴을 사용하여 작성된 Servlet/JSP 어플리케이션이 Model 2 JSP Programming으로 알려지게 되었다.
이 패턴은 Servlet/JSP 어플리케이션에서 사용되기 이전부터 다른 형식으로 존재해왔기 때문에, "MVC2"로 언급되기도 하였으나 MVC1이 존재하는 것 같은 혼란을 야기하므로, MVC로만으로도 충분하다.

주목할 부분은 MVC 패턴을 사용하여 작성된 Servlet/JSP 어플리케이션이 Model 2로 알려지게 되었다라는 부분이다. Model 2가 MVC를 염두에 두고 나온 아키텍처인가에 대한 물음은 위키페디아를 통해서도 확인할 수 있었다.

    Model-view-controller

MVC는 일반적으로 썬용어로는 Model 2 아키텍처로 구현되었다.

Model 2로 위키페디아를 검색해보니 더 명확해졌다.

Model 2는 컨텐츠로부터 프리젠테이션을 분리하기 위해 Model-View-Controller(MVC) 디자인 패텬을 사용한다.
MVC에 대한 Brian McCallister의 블로깅에서도 다음 내용이 나온다.

Then the Web happens and Sun starts talking about Model2 in terms of MVC.

출처 : http://ericlove.tistory.com/12
Posted by 아로나