페이지

2006년 12월 25일 월요일

어플리케이션 프레임워크의 진화 - Mozilla Application Framework

Firefox를 사용하십니까?

제 아내도 즐겨 사용하는 Firefox를 단순히(?) 웹브라우저라고 보시면 안됩니다. 물론 Firefox 그 자체는 웹브라우저가 맞습니다. 하지만 기반을 이루고 있는 기술을 보면 모질라에서 인터넷 익스플로러에 대항하기 위해 얼마나 많은 준비를 하였고 혁신을 추구했는지 알 수 있습니다.

Firefox는 여러 운영체제에서 실행됩니다. 즉, 크로스 플랫폼(cross-platform) 기반의 어플리케이션이라고 할 수 있습니다. 즉, 같은 소스코드를 기반으로 리눅스, 매킨토시, 윈도 등과 같은 여러 운영체제를 지원한다는 의미입니다. 인터넷 익스플로러도 마찬가지로 매킨토시를 지원해 왔으며, 예전에는 솔라리스용 인터넷 익스플로러 3.0도 있었습니다. 하지만 인터넷 익스플로러가 진정한 크로스 플랫폼을 지원하다고 말하기 힘들었습니다. 운영체제마다 지원하는 기능이 조금씩 달랐으며 특히 HTML렌더링 결과가 달라 사용자로 부터 많은 불평을 들었습니다. 윈도로 개발된 것을 다른 운영체제용 개발팀이 그러저럭 따라 개발하는 수준이였으리라 짐작해 봅니다.

Netscape 브라우저도 별반 다르지 않았습니다. 매킨토시와 리눅스/유닉스를 지원해 왔으며 특히 리눅스/유닉스 쪽에서는 거의 유일한 웹브라우저였기 때문에 크로스 플랫폼에 대한 지원은 Nescape의 막중한 임무였습니다. 하지만 여러 플랫폼을 지원하는 것은 쉽지 않은 일이였고 운영체제에 맞게 최적화가 덜 된 탓에 인터넷 익스플로러의 발전속도를 따라잡기 힘들었습니다.
그 결과, 모질라에서는 Netscape 브라우저가 가진 문제를 개선하고 좀 더 효과적인 크로스 플랫폼 지원을 위해 모질라 어플리케이션 프레임웍(Mozilla Application Framework)을 개발하였습니다.

어플리케이션 프레임웍(Application Framework)

특정 운영체제를 위한 어플리케이션의 표준 구조를 클래스나 라이브러리의 꾸러미로 구현된 형태를 "어플리케이션 프레임워크"라고 합니다.[1] 윈도 어플리케이션 개발에 많이 쓰이고 있는 MFC(Microsoft Foundation classes), Mac OSX을 위한 Cocoa, 리눅스 어플리케이션을 위한 KDE(K Desktop Environment)가 대표적인 예라고 할 수 있겠습니다. 대부분 특정 개발툴이나 운영체제에 의존적입니다.(KDE는 예외)

모질라 어플리케이션 프레임웍(Mozilla Application Framework)[1]

모질라 어플리케이션 프레임워크'(Mozilla Application Framework)모질라 응용 프로그램을 구성하는 크로스 플랫폼 소프트웨어 컴포넌트의 꾸러미입니다. 네트워크를 기반으로 한 응용 프로그램 개발을 쉽게 할 수 있도록 다양한 기술이 포함되었습니다. Gecko라는 레이아웃 엔진과 XUL(XML User Interface Language)을 통해 GUI를 구성할 수 있으며 JavaScript와 XPCOM이라는 컴포넌트 기술을 이용해서 코딩을 할 수 있습니다. 그 밖에 Necko, XBL, XPConnect, XPInstall과 같은 기술을 제공하고 있습니다. 각각의 기술에 관해 짧게 살펴보겠습니다.

Gecko
성능과 이식성을 위헤 설계된 표준기술 기반의 레이아웃(layout) 엔진입니다. 단순히 HTML을 위한 레이아웃 엔진이 아닌 대화상자, 위젯과 같이 브라우저를 구성하는 기본 GUI까지 표시할 수 있습니다. 현재 다음과 같은 표준기술을 지원합니다.

* HTML 4.0
* XML 1.0
* XHTML 1.1
* MathML
* XForms (via an official extension)
* SVG (Partial SVG 1.1 support*)
* CSS Level 1 (partial support for CSS 2 and 3, see Mozilla CSS support chart for details)
* DOM Level 1 and 2 (partial support for DOM 3)
* RDF
* JavaScript 1.7

XPCOM(Cross Platform Component Object Model)
XPCOM은 크로스 플랫폼 컴포넌트 모델입니다. 코바(CORBA)나 마이크로소프트 COM가 유사하다고 보면 됩니다. XPCOM은 다중언어바인딩과 IDL을 제공하여 개발자로 하여금 자신이 만든 기능을 프레임워크에 껴 넣고 다른 컴포넌트와 연결시킬 수 있도록 합니다. 이 기술은 Gecko의 모든 기능을 가상적으로 컴포넌트화하여 브라우저나 다른 모질라 어플리케이션에서 스크립트를 이용해서 접근할 수 있도록 합니다. 다양한 모질라 XPCOM 라이브러리(네트워킹, 보안, DOM, 등)에 접근하려면 XPConnect라는 XPCOM의 레이어를 사용하면 됩니다. XPConnect를 이용하면 자바스크립트로 XPCOM 라이브러리를 이용할 수 있습니다. XPCOM 컴포넌트는 C,C++, Java Script로 개발할 수 있습니다.

XUL(XML User Interface Language)
모질라 어플리케이션 프레임워크에서 사용되는 사용자 인터페이스 기술 언어입니다. XML로 작성되었으며 대화상자, 위젯, 템플릿 등 다양한 사용자 인터페이스 구성 요소를 정의할 수 있습니다. CSS, 자바스크립트, DTD, RDF와 같이 이미 존재하는 표준 기술을 사용하여 웹개발이나 디자인 배경을 가진 사람들이 쉽게 배울 수 있도록 하였습니다.

Necko
Necko는 네트웍 프로토콜과 파일 시스템 접근을 다루기 위한 추상 레이어를 제공하는 역할을 합니다. 이 역시 크로스 플랫폼을 지원하기 위해 개발되었습니다. 개발자는 운영체제에서 제공하는 네이티브 인터페이스를 고려하지 않고 Necko에서 제공하는 API를 이용해서 네트웍이나 파일에 접근할 수 있습니다.

XBL(XML Binding Language)
시용자는 XBL을 이용하여 XUL 위젯의 모습과 동작을 새로 정의할 수 있습니다.

XPInstall
XPInstall는 XPI라고 알려진 설치 아카이브 형식으로 확장기능과 테마와 같은 작은 패키지를 모질라에 설치하기 위한 기술입니다.

웹서비스
모질라 어플리케이션 프레임워크에서는 XML-RPC, SOAP, WSDL와 같은 여러 다양한 웹서비스 표준을 기본 지원할 뿐만 아니라 인터넷 익스플로러와 유사한 XMLHttpRequest 개체도 지원하고 있습니다. 이들 표준기술 지원을 통해 서버와의 XML 데이터 연동 기능을 지원하고 있습니다.

기타
그 밖에 DTD, RDF, XSLT/XPath, MathML, SVG, JavaScript, SQL, LDAP 등과 같은 표준 기술을 지원하고 있습니다.

어플리케이션 프레임워크의 전망

앞서 언급했듯이 운영체제별로 다양한 어플리케이션 프레임워크가 존재하고 있으며 서로 다른 장점을 배경으로 경쟁하고 있습니다. 이들 어플리케이션 프레임워크의 첫번째 목표는 배우기 쉽고 사용하기 쉬어야 한다는 점입니다. 하지만 대부분 C,C++언어를 알아야 하며 객체지향적인 개념에도 익숙해져야 합니다. UI를 만드는 것은 여전히 까다롭고 시간이 많이 걸리는 작업입니다. 게다가 이식성 문제에서는 MFC나 Cocoa처럼 답이 없는 어플리케이션 프레임워크도 있습니다. 자바가 그 대안으로 사용되고 있으나 순수 자바만으로는 UI를 구성하는데 속도 문제 등 부족한 부분이 있습니다.(그 대안으로 이클립스 프레임워크가 있으나 나중에 다시 논의하도록 하겠습니다)

모질라 어플리케이션 프레임워크이 주목받는 이유는 이런 문제를 해결할 수 있다는 점입니다. 우선 Firefox라는 브라우저를 기반으로 자바스크립트와 XUL기술만 익히면 쉽게 크로스 플랫폼을 지원하는 어플리케이션을 개발할 수 있습니다. 기존 웹개발자나 디자이너들도 쉽게 어플리케이션 개발에 참여할 수 있습니다. 스크립트로 어플리케이션을 개발하기 때문에 좀 더 빠르고 유연하게 개발에 임할 수 있습니다.

요즘 C로 웹서용 어플리케이션을 개발하는 경우는 드믑니다. 많은 경우 PHP, ASP와 같은 서버 측 스크립트 언어로 개발되고 있습니다. 클라이언트 측면도 이와 마찬가지로 스크립트 기반으로 발전될 것입니다. 여러 운영체제에서 이미 스크립트 기반의 어플리케이션 개발을 지원하고 있습니다. Mac OSX의 애플 스크립트도 그중 하나입니다. 그리고 UI를 표현하는데 있어서 XML을 사용하는 것도 현재의 추세입니다. 마이크로소프트의 새로운 운영체제인 윈도 비즈타에서 사용되는 WPF(Windows Presentation Fountdation)도 XAML(Extensible Application Markup Language)를 사용하고 있습니다.

Firefox는 성공적이며 대중적인 웹브라우저입니다. 그 성공에는 잘 설계되고 확장성이 뛰어나며 크로스 플랫폼을 지원하는 모질라 어플리케이션 프레임워크가 큰 역할을 하고 있습니다. 이미 수 많은 컴퓨터에 Firefox가 설치되어 있으며 이는 모질라 어플리케이션 프레임워크가 기본적으로 동작하고 있다는 것을 의미합니다. 가장 쉽고 빠르게 크로스 플랫폼을 지원하고 싶다면 과연 어떤 어플리케이션 프레임워크를 선택해야 할까요? 모질라 어플리케이션 프레임워크가 좋은 대안일 수 있습니다.

참고문헌
[1] 위키피디아, http://en.wikipedia.org/wiki/Application_framework (일부내용을 번역하였습니다)
[2] 위키피디아, http://en.wikipedia.org/wiki/XPCOM
[3] 위키피디아, http://en.wikipedia.org/wiki/XUL

댓글 4개:

  1. 지금까지 사용하던 크로스플랫폼 GUI 라이브러리은 뭔가 부족한 감이랄까, 그런 게 있었는데, 그게 바로 컴파일 환경 차이에서 오는 게 아니었나 싶습니다. 아주 고성능의 작업을 요하는 프로그램만 아니라면 javascript + XUL의 구성으로 프로그램을 만드는 것이 더 효율적일 수도 있겠죠. (뭐, 성능이 중요한 부분만 C/C++ 등으로 짜서 컴포넌트화시켜도 될테구요)
    여러 운영체제를 쓰다보니 이식성 있는 프로그램을 만들고자 하는 강박관념(?) 같은 게 생겨버렸는데, 그런 욕구를 해소해줄 수 있을지 궁금합니다.

    답글삭제
  2. 이식성에 대한 욕구도 있지만 여전히 네이티브 환경에 대한 최적화에도 미련이 많습니다. 특히 해당 OS에 최적화된 UI를 제공하려면 기본 프레임워크를 사용하는 것이 좋겠지요.
    Camino가 좋은 예인데 firefox에 UI만 cococa를 입혔습니다. 적어도 UI부분은 맥에 최적화되어 있어서 두가지 측면을 모두 만족시켜줍니다.

    답글삭제
  3. 위키백과 모질라 어플리케이션 프레임워크 항목에 일부 내용을 반영을 하였습니다.

    답글삭제
  4. Stronly typed 언어가 아니어서 그런지 개발할때 외어야 하는게 많아서 영 불편하다고 느껴집니다. 혹시 제가 무식해서 그런걸까요? 혹은 다들 그렇게 힘들게 사나요? ^^
    스크립트로는 간단한 코딩만 하기 때문에 별 상관 없다고 할 수 있지만 그런 한계 때문에 간단한 코딩만 하게 되는거 같기도 하구요.

    답글삭제