페이지

2006년 12월 31일 일요일

윈도우를 어떻게 찾죠?

How can I find a window?

몇 년전에 그렸던 만화...

제일 처음 알았던 윈도API였죠

지금 보니 무척 썰렁하군요... ^^;

2006년 12월 26일 화요일

어플리케이션 프레임워크의 진화 - 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

2006년 12월 11일 월요일

개발자의 참 즐거움

joone_developer

(KLDP blog에 올렸던 그림입니다) "그림하고는 영 다른 이야기가 됐군요.."

코딩만 하고 살수는 없을까요? 하지만 현실은 그렇지 못합니다. 개발자는 단순히 코딩만 하는 사람은 아니며, 경험이 늘어날 수록 년차가 늘수록 더 다른 능력을 갖추어야 합니다.

- 문서화, Communication Skill, 리더쉽

내 자신의 아이디어를 구체화하려면 남을 잘 설득해야 하고 글도 논리적으로 잘 써야 합니다.
주위를 보면 개발자 출신 영업맨, 기획자는 우대를 많이 받습니는다. 기술적 지식과 함께 깔끔한 마스크와 언변을 갖춘다면 영업으로 더 큰 능력을 발휘할 수 있고 글 잘 쓰고 기술을 보는 시각이 넓으면 좋은 기획자가 될 수 있습니다. 아니면 SE, SQA로 업무를 바꿀 수 있습니다.

개발자는 변해야 합니다. 아니 변하기 싫어도 변하게 되는 것 같습니다.  다만, 개발에서는 멀어질지는 몰라도 개발자와 떠나서는 일하고 싶지는 않습니다. 그들과 함께 기술을 논하고 고민하는 시간은 참 즐겁습니다.

개발자라는 연대감. 기술을 선도하고 세상을 바꿀 수 있다는 자신감. 그리고 계속 발전하는 세상. 힘들때 마다 이 길을 걷게 만드는 힘이 됩니다.