모델 1 개발 vs 모델 2 개발

2010. 8. 26. 00:53plming/Java - Spring

모델은 웹 애플리케이션이 동작하기 위한 구조라고 할 수 있다.
동작시키기 위해 애플리케이션을 개발하는 개발자가 구현하는 구조와도 같은 의미이다.
어떤 단계와 어떤 구조들을 가지는가에 따라 모델을 1과 2로 구분할 수 있다.


1. 모델 1 개발 방식



웹 애플리케이션 등장 초기부터 가장 일반적으로 사용해온 개발 방식이다.
모든 Request의 최초 진입 지점은 JSP로부터 시작된다.
사용자들이 전달한 입력 값에 대한 유효성 체크, 비즈니스 계층과의 통신, 화면 구성을 위한 프리젠테이션 로직 구현 등의 모든 작업을 JSP에서 전담한다.

- 장점
> 초기 개발 속도가 빠르다.
> 웹 애플리케이션 개발을 처음 시작하는 개발자들도 쉽게 접근할 수 있다.

-단점
> 초기 개발 속도가 빠른 반면 프로젝트 중,후반부로 갈수록 요구사항 변경에 따른 대응 속도가 느리다.
> JSP에서 너무 많은 일을 전담하고 있으므로 JSP 파일이 너무 복잡해져 유지보수하기 힘들다.
> 정교한 UI 계층을 개발하는 것이 힘들다.  JSP 모든 일을 전담하고 있기 때문에 유효성 체크, 에러 처리, 다국어 지원 등과 같이 UI 계층을 정교하게 개발하기 힘들다.
> 서블릿 컨테이너에 종속되어 있기 때문에 서블릿 컨테이너에 배포한 상태에서만 UI 계층을 테스트하는 것이 가능하므로 테스트하기 힘들다.

위와 같은 단점을 가지고 있다고 해서 사용하지 말아야 하는 개발 방식은 아니다.
단순하면서도 배우기 쉽다는 장점을 가지고 있으므로, 다음과 같은 경우에는 굳이 모델 2를 적용할 필요는 없다.

- 개발 기간은 짧은데 모델 2로 개발한 경험이 없는 개발자들과 같이 일할 경우
- 개발하는 애플리케이션의 규모가 작을 경우
- 잦은 변경이나 요구사항 변경이 많지 않은 경우


2. 모델 2 개발 방식



모델 1이 가지고 있는 문제점을 극복하기 위한 대안으로 등장한 개발 방식이다.
모델 2는 MVC (Model, View, Controller) 개념을 기본으로 하며 이는 애플릿과 같은 GUI 개발에서 사용하던 개념이다.  이 MVC 개념을 웹 애플리케이션에 도입하고자 하는 시도가 모델 2이다.  웹 애플리케이션에 MVC 개념을 도입하도록 지원하는 웹 프레임워크가 많다.

모델 1에서는 최초 진입 지점이 JSP였지만, 모델 2에서는 컨트롤러를 담당하고 있는 서블릿이 최초 진입 지점이 된다.  클라이언트의 요청은 컨트롤러, 모델, 뷰 세 개의 영역으로 나뉘어서 처리된다.  세부 처리과정은 다음과 같다.

- 모델 2개발 방식에서의 모든 요청은 제일 먼저 컨트롤러인 서블릿으로 진입하게 된다.
- 컨트롤러는 클라이언트의 요청을 받아 비즈니스 계층에 작업을 위임한다.
- 컨트롤러가 비즈니스 계층에 작업을 위임할 때 클라이언트로부터 전달된 데이터(모델)를 같이 전달하게 된다.
- 비즈니스 계층이 작업을 완료한 다음 컨트롤러에 결과물을 반환한다.
- 컨트롤러는 비지니스계층으로부터 반환된 결과물(모델)의 상태와 클라이언트가 전달한 인자에 따라 클라이언트에게 출력할 뷰(JSP)를 결정한다. 호출되는 뷰에는 모델 데이터를 같이 전달한다.
- 뷰(JSP)는 최종적으로 컨트롤러로부터 전달된 모델 데이터를 클라이언트에게 보여준다.

※ Model의 의미는 일반적으로 UI 계층과 비즈니스 계층 사이에서 주고받는 데이터를 의미한다.

- 장점
> 정교한 UI 계층의 개발이 가능해진다. 모든 요청이 컨트롤러를 거치기 때문에 컨트롤러를 통하여 화면에 대한 정교한 제어가 가능하며, 에러처리, 유효성 체크등의 기능을 추가할 수 있다.
> JSP는 단지 프리젠테이션을 위한 로직만을 가지고 있기 때문에 구현 코드가 상당히 단순해진다. 그러므로 인해 유지보수성이 향상된다.
> 뷰를 위한 기술로 JSP만이 아닌 XML, Velocity와 같은 다양한 기술들을 이용하는 것이 가능해진다.
> 컨트롤러에 대한 테스트는 서블릿 컨테이너에 배포하지 않아도 테스트가 가능하다. 그러므로 테스트가 쉬워진다. 최종 뷰에 대한 테스트는 여전히 서블릿 컨테이너에 배포한 상태에서 진행해야 한다.

- 단점
> 모델 1 개발 방식에 비하여 배우는데 많은 시간을 투자해야한다.
> 새로운 기술을 익혀야한다는 부담감이 있다.


모델 2가 UI 계층을 개발하기 위한 최선의 선택은 아니다.
모델 1로도 충분한 프로젝트에 모델 2를 적용함으로써 프로젝트의 복잡도만 증가시킬 수도 있다.  그러므로 프로젝트의 기간, 구성원들의 기술요소 등을 충분히 고려한 후에 선택해야 한다.


[출처] http://www.javajigi.net/pages/viewpage.action?pageId=28377090
[출처] Spring 프레임워크 워크북