'MVC패턴'에 해당되는 글 1건

  1. 2007.11.20 Web App Framework 전쟁이야기(3)

지난 번에 이어서 WAF 의 전쟁 이야기를 계속해 봅니다.  WAF의 분류를 위해서는 크게 2가지 관점에서 이해가 필요합니다. 하나는  WAF에서 사용하는 주요한 모델(패턴)들에 대한 이해이고 다른 하나는 공통으로 제공하는 컴포넌트(서비스)에 대한 이해입니다.  모델은 일반적으로 프로그램에서 인터페이스와 상속 등의 관계를 통해 해당 문제를 해결하기 위한 방법을 강제하게 해 줍니다. 또한 컴포넌트는 웹 개발에 필요한 각종 라이브러를 제공합니다.

그럼 먼저 현재 WAF에서 사용하는 주요한 모델들에 대해 좀 정리해 보겠습니다.

1. WAF에서 사용하는 주요한 모델들

1.1 MVC(Model-View-Controller) 모델 
일반적으로 MVC 모델은 사용자 인터페이스와 액션을 받아 들이는 View와 해당 응용의 데이타 모델과 이에 대한 조작을 담당하는 Model, 그리고  View를 통해 전달된 사용자의 액션을 처리하고 실제 모든 비지니스 로직을 담고 있는 controller로 구성됩니다.

사용자 삽입 이미지

흔히 MVC를 모델1, 모델2라고 구분합니다. 이는 JSP,ASP 처럼 View를 담당하는 페이지에, Controller부분을 포함할 것인가 아닌가에 따라 구분됩니다. 가령, 모델1은 하나의 JSP 페이지에 View와 Controller가 포함된 것이고 모델2는 JSP에는 View만 두고  Controler는 분리하는 것 입니다. 당연히 모델2가 모델1에 비해 의존성이 떨어지기 때문에 유지보수와 확장이 용이하며 재사용성 등 많은 장점들을 갖고 있습니다. 현재 대부분의  WAF는 모델2 MVC 패턴을 사용하고 있습니다.

모델1,모델2외에  Push& Pull model을 이해해야 합니다. 이 모델에 따라 WAF의 개발 방법이 많이 달라지기 때문입니다. 먼저 Push model은 초기 WAF에서 주로 채택했던 방법으로 사용자의 요청에 의해 처리된 결과를 View에 밀어 넣는(push)하는 방법입니다. 이에 반해 Pull model은  View에서 다수의 controller로 부터 필요에 따라 처리 결과를 땡겨(pull) 오는 것 입니다. Pull model은 View에서 마치 필요한 컴포넌트를 호출하여 처리하는 방식이 가능하기 때문에 이를 컴포넌트 MVC 라고도 부릅니다. 최근에 발표된 많은 WAF는 pull model을 사용합니다. 이 말은 이제 대세가 과거 데스크탑에서 비쥬얼 베이직이나 자바 스윙 컴포넌트를 사용하여 응용 프로그램을 개발하는 것과 동일한 방식과 철학으로 웹 응용 개발이 가능하다는 것을 말합니다. 나중에 보겠지만 실제  JSF (Java Server Face) 표준은 이러한 것을 규정한 개발 표준입니다.

-PageController VS  FrontController 모델

수많은 클라이언트의 요청을 효과적인 처리는 WAF 에 있어 가장 첫번째 중요한 과제입니다. 이러한 상황에서 취할 수 있는 2가지 모델이 있습니다. 하나는  PageController로서 모든 클라이언트 요청을 PageController가 받은 후 처리하는 것 입니다. 초기 대부분의 웹 응용 프로그램을  PageController 방식으로 개발했습니다. 이 방법의 문제는 클라이언트의 요청이 많을 경우 부하 걸린다는 것이고 하나의 페이지마자 하나씩의 PageController를 만들어야 한다는 것 입니다.

사용자 삽입 이미지

PageController의 중앙부하집중 문제점을 해결한 방식이 바로 FrontController입니다.  FrontController에서 controller는 핸들러와 복수개의 커맨드로 구현됩니다. 이렇게 함으로써 부하 집중 문제를 풀 수 있습니다.

사용자 삽입 이미지

실제 현재 모든  WAF 에서 이 모델을 사용하고 있습니다. Structs에서는 ActionServlet, WebWork에서는 ServletDispatcher , Spring MVC 에서는 DispatcherServlet, Tapestry 에서는 ApplicationServlet, JSF 에서는 FacesServlet이 바로 FrontController  패턴으로 클라이어트의 요청을 처리합니다.

생각보다 길어 지네요.. 아무래도 2,3 편은 족히 더 써야 할 것 같습니다. 다음 편에는 WAF 에서 제공하는 주요 서비스들에 대해 살펴보겠습니다.

Posted by 박재현
,