'FrontController'에 해당되는 글 2건

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

지난 번에 이어서 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 박재현
,

지난 번 1편을 쓴 이후에 한 분께서 현재 쓰고 있는 WAP가 자바 언어에 대한 WAP에 대한 것이라는 지적이 있으셨습니다. 결론은 맞습니다. 제가 정리하고자 하는 것은 JWAP에 대한 것 입니다. 여러 이유가 있겠지만 먼저 현재 나와 있는 WAF중 자바 WAF 가 가장 널리 사용되고 있기 때문입니다. 또한 제가 제일 잘 이해하고 있는 분야이기도 하구요...^-^ 현재  WAF 의 언어별 숫자는 다음과 같습니다.

 ASP.NET : 2 ,  ColFusion : 4 , Perl : 5 , Ruby : 7 , Physon : 12 , PHP : 15 , Client-Side : 18 , Java 25
- 출처 위키 : http://en.wikipedia.org/wiki/List_of_web_application_frameworks

그런데 중요한 것은 WAF 가 언어에 따라 엄청나게 다른 것이 아니라는 것 입니다. 물론 차이점이 없다는 것은 아니지만 웹을 개발하는 데 있어 필요한 프레임웍이 모여 있어 이를 이용할 경우 개발자의 생산성이 높아진다는 공통점이 있습니다.

WAF를 이해하기 위해 먼저 S/W 아키텍쳐 - S/W 프레임웍 - S/W 패턴의 관계를 정확히 이해하는 게 중요합니다. S/W 아키텍쳐는 S/W를 개발하는 데 있어 뼈대가 되는 근간 모델을 말합니다. 만약 이를 웹 S/W에 적용한다면 OS - TCP/IP 네트웍 - 자바 이런 식의 참조 모델을 의미할 수도 있고 , 분산 객체 기반의 웹S/W의 경우 CORBA 같은 아키텍쳐를 들 수 있을 것 입니다. 이러한 아키텍쳐하에서 실제 S/W를 개발하다 보면 유사한 문제에 대한 공통적인 해결 방안을 얻을 수 있습니다. 가령, 클라이언트의 요청을 받고 이를 처리하는 PageController 나 널리알려진  MVC 모델 등을 예로 들 수 있습니다. 이러한 웹 개발에 있어 얻은 경험을 바탕으로 반복해서 발생하는 문제를 해결하기 위한 권고안이 바로  S/W패턴입니다. 정답이 아니라 권고안이기 때문에 실제 적용은 개발자의 몫이긴 합니다. 웹 개발에 있어 공통적으로 발생하는 문제들의 해결 패턴들을 하나의 라이브러리로 정리하여 개발에 있어 공통으로 적용하는 것이 바로 웹 개발 프레임웍(WAF)입니다. 따라서 자바로 개발을 하든, 루비로 하든 기본적으로 WAF는 웹 개발에 있어 필요한 공통의 사안이 지원돼야 합니다.  바로 이러한 것들의 차이가 WAF 의 차이라 할 수 있습니다. 언어보다는 패턴과 프레임웍상의 기능 차이가  WAF를 평가하는 주된 기준이라 보는 게 더욱 소프트웨어 개발을 즐기는 시야일 것 입니다.

아키텍쳐 - 프로그램 혹은 컴퓨팅 시스템의 소프트웨어 아키텍처란, 소프트웨어 컴포넌트, 이들 컴포넌트의 가시적인 속성, 그리고 컴포넌트 사이에 관계로 구성된 시스템의 전체적인 구조를 말한다. Bass, Clements, Kazman, 1998

WAF - 웹 응용 프로그램와 서비스 등을 개발하는 데 필요한 공통의 컴포넌트를 제공하여 개발자의 오버헤드를 덜어주고 개발과 유지보수 상의 생산성을 높여주는 프레임웍. - Jhpark, 2007( 접니다. ^-^)

이제  WAF 에 대한 정의가 끝났다면 , 다음으로는  WAF 를 이해하기 위해  WAF 에 적용되는 여러 유용한 패턴들에는 무엇이 있을까요?

하나 , MVC(Model-View-Controller) 모델  :  모델 1, 모델2 , Push& Pull model
둘, Page Controller VS  FrontController 모델
셋 ,  Request  based VS Component Based  모델

이들 패턴들외에 WAF 에는 개발자들에게 유용한 공통의 컴포넌트들을 제공합니다. 이들 공통 컴포넌트로는  Ajax 프레임웍 지원, i18n(internalization) & l10n(localization), O-R mapping , Testing , Security , Template & Form validation , Caching 등 을 들 수 있습니다.  다음은 위의 기준으로 정리한 자바 WAF를 정리한 표 입니다[위키참조].

사용자 삽입 이미지
 
다음에는 위의 패턴들과 공통 컴포넌트를 이해하면서  WAF를 다양한 기준으로 분류해 보겠습니다.


Posted by 박재현
,