저자: 카메론 레어드(Cameron Laird), 역 전순재
"내가 필요로 하는 모든 것은 다 해준다." 이것이 바로 많은 애플리케이션 개발자들, 특히 유럽 개발자들이 입을 모아 Qt에 대해 평가하고 있는 것이다. 오라일리 네트워크(O"Reilly Network)에서는 이에 대해 그래픽 사용자 인터페이스(GUI) 도구모음인 Qt의 전반에 대해 살펴보고, 누가 그것을 사용하며 왜 사용하는지를 설명하고자 한다.
구이(GUI) 구성을 위한 위젯 모음(Widget sets)
버튼, 메뉴, 텍스트 표시, 그래픽 이미지, 마우스를 비롯하여 그와 비슷한 포인팅 장치들은 작금의 대다수의 컴퓨터 사용자가 마주치는 화면 표시의 기본 요소들이다. 최종 사용자들은 버튼이 일관되게 클릭되고 폰트가 부드럽게 표시되는 것을 중요하게 생각한다. 직접적으로 이러한 시각적인 요소들을 코딩하는 프로그래머는 거의 없다. 대신, 프로그래머들은 구이(GUI) 툴킷 또는 바로 얼마 전까지만 해도 종종 "위젯 모음(widget sets)"이라고 불려진 것에 의존한다. 이러한 것들은 버튼, 라벨, 그리고 다른 표시 요소들을 담은 "부품 상자(parts boxes)"로서 개발자들은 이 부품들을 조합하여 작동하는 인터페이스를 합성해낸다. "위젯(Widget)"이라는 용어는 이러한 표준 그래픽 부품들에 대한 산업용 은어(industry jargon)이다.
외부에서 보면 도구모음은 그 모습이 두 가지다. 첫째, 애플리케이션 프로그래밍 인터페이스(API)는 코더가 API를 어떻게 사용할지 지정한다. 둘째 모습은 도구모둠이 제공하는 시각적 모습의 가지 수이다. Qt는 이 두 영역 모두에서 이점이 있다.
Qt의 이식성
지난 십 년간 가장 유명한 도구모음은 윈도우용으로는 MFC(Microsoft Foundation Classes)가, 유닉스(Unix)와 맥(MacOS)에는 모티프(Motif)가 있었다. 이러한 도구모음은 자신의 홈을 떠나면 이식성이 거의 없었다. 예를 들어 윈도우에 모티프(Motif)를 이식하고자 많은 사람들이 노력했으나 그 결과는 일반적으로 너무 비용이 많이 들고, 약하며, 불완전한 것이었다.
이러한 사실과는 대조적으로, 노르웨이에 기반을 둔
Trolltech AS사의 웹사이트에서 얻은 정보에 의하면 Qt는 의도적으로 이식성이 있도록 디자인 되었고 현재는 "마이크로소프트 윈도우와 모든 주요 유닉스 브랜드"에도 사용할 수 있는 버전을 만들고 있다고 한다. 이 외에도 트롤테크(Trolltech)는 Qt/Embedded를 배포하였다. 이 Qt 버전은 리눅스용 임베디드 애플리케이션으로서 유닉스 워크스테이션에 보편적인 X11이라는 윈도우 처리 소프트웨어를 요구하지 않는다. 이는 처음으로 프로그래머들이 데스크탑과 임베디드(dedicated-embedded) 하드웨어 모두에서 실용적인 같은 구이 도구모음을 사용할 수 있게 되었다는 것을 뜻한다. 이렇게 하면 완전한 기능을 갖춘 텔레비젼 콘솔, 부엌용 기구, 자동 제어 센터, 휴대용 통신기기를 비롯하여 수많은 기타 임베디드 디바이스들을 똑같은 도구모음으로 사용할 수 있다.
그렇지만 Qt는 Qt/Embedded를 소개하기 전에도 빠르게 성장하였다. 프로그래머들이 Qt의 깔끔한 디자인을 좋아했기 때문이다. GUI 작업은 오랫동안 객체지향에 적합한 영역으로 특별하게 간주되어 왔다. 다시 말해 "객체" 구성이라는 관점에서 프로그래밍 해결책을 표현한 것으로 간주되어 왔다. 컴퓨팅의 관점에서 보면 위젯(Widgets)은 객체의 자연스런 예이다. 그렇지만 역사적인 우연때문에 주류를 이루던 위젯 모둠들은 불완전하게 객체 지향적이 되었고 그에 따라 효율적으로 코딩하기가 어색하게 되어 버렸다.
트롤테크(Trolltech)사의 지능적인 이식성 디자인을 보여주는 예가 바로 QPainter 렌더링 클래스이다. QPainter는 처리가 효율적인 동시에 애플리케이션에 보편적이다. 여기에서 "보편적(General)"이라는 의미는 QPainter가 다음과 같은 것들을 어떻게 그려낼 것인지에 대해 프로그래머가 완전히 제어할 수 있다는 뜻이다.
- 기존 것들과 일맥상통하는 화면표시 가능한 위젯,
- (애니메이션과 다른 고속 작업용) 오프-스크린 화소짝짓기(pixmap),
- 디스크-저장 그림(메타 파일) 또는 ...
- ... 포스트스크립트 프린터.
이것이 바로 Qt API의 유연성과 통일성을 보여주는 전형적인 예이다.
컴포넌트와 다른 장점들
디자인에는 이러한 배려 역시 중요하다. 왜냐하면 기존 애플리케이션 작업과 다르게 구이(GUI) 프로그래밍은 근본적으로 "이벤트(event)"을 다루어야 하기 때문이다. 예전 컴퓨팅 모델은 작업 하나를 마치고 나면 그 다음 다른 하나를 완성하고 완료될 때까지 계속한다는 점에서 오히려 순차적이었다.
그렇지만 구이(GUI)에서 컴퓨터 작업은 대략적으로 화면을 구성하고 (예를 들어 화면의 특정 부분을 클릭을 하거나 키를 두드리거나 하는 것과 같은) 사용자의 행위를 기다리다가, 그 행위에 반응하고, 또 다시 사용자의 행위를 기다리는 것이다. "역호출(Callback)"이란 이러한 대화를 만들어 내는 기능을 기술적으로 표현한 것이다. 사용자가 선택 대상을 클릭하면 컴퓨터는 이미 정의된 코드 조각에 대하여 "역호출(calls back)" 한다. 그렇지만 C와 C++같은 인기있는 언어들은 애초부터 순차적인 처리를 위해 디자인되었다. 그래서 역호출(Callbacks)은 언제나 C와 C++에서 위치가 확고하지 못하다. 역호출을 나머지 다른 언어와 통합하는 것에는 약간 문제가 있다.
반면,Qt는 C++이라는 객체지향 언어로 구현된 강력한 객체지향 디자인을 가지고 있다. 게다가 Qt사의 디자이너들은 역호출(callback) 요구를 표현하기 위해 "그널과 슬롯(signals and slots)"라는 새로운 메카니즘을 고안해 내어 내었다. 시그널과 슬롯(Signals and slots) 덕분에 GUI를 코딩하면서 훌륭한 C++ 스타일을 쉽게 사용할 수 있다. 특히, 맞춤가능 "컴포넌트(components)" 형식의 제품을 격려하는데 있어 다른 도구모음보다도 Qt가 더 성공적이었다. 다시 말해 컴포넌트란 한번 가공되면 여러 번 사용할 수 있도록 특수처리된 위젯이다. 가장 간단한 "Hello, World" 프로그램에서 조차도 이 능력을 엿볼 수 있다.
#include
#include
int main(int argc, char **argv)
{
QApplication example(argc, argv);
QPushButton quit("Quit", 0);
quit.resize(75, 30);
QObject::connect(&quit, SIGNAL(clicked()), &example, SLOT(quit()));
quit.show();
return example.exec();
}
트롤테크(Trolltech)에서 컴포넌트 기반(component-based) 개발에 대한 더 자세한 설명을 볼 수 있다.
Qt를 더 자세히
Qt는 "국제화(internationalization)"에 있어서 선도자이기도 하다. 즉, 서로 다른 나라와 문화에 적절하게 화면표시를 생성해 내는 능력이 있다는 말이다. 예를 들어 Qt는 완전하게 유니코드(Unicode)를 지원한다. 유니코드 덕분에 Qt는 영어권에서 사용되는 알파벳과 다른 모든 서구 유럽 언어뿐만 아니라 러시아어, 아랍어, 헤브루어, 다른 동양권 언어들, 그리고 본질적으로 인간의 언어로 쓰여진 모든 문자들을 표시할 능력을 갖추고 있다.
듣기로는 많은 프로그래머가 Qt를 좋아하는 이유중의 하나는 뛰어난 문서화에 있다고 한다. 트롤테크(Trolltech)는 프로그래머들이 Qt라는 툴킷에 "편안함"을 느끼도록 레퍼런스와 튜토리얼을 제공하는데 상당히 성공적이었다.
트롤테크(Trolltech)는 적극적으로 개발 목표들을 지원하는 사업 계약을 체결해 왔다. Qt OpenGL은 Qt에 대한 확장으로서 Qt 프로그래머는 OpenGL 라이브러리를 완전하게 사용할 수 있다. 트롤테크(Trolltech)는 한편으로는 자사의 수입을 확보함과 동시에 투명성과 설명에 대한 개발자의 요구를 보호하는 라이센스를 혁신적으로 만들어 왔다.
이 개론의 범위를 넘어서는 더 많은 기술적인 능력과 더불어 이와 같은 모든 능력 덕분에 복잡한 구이(GUI) 애플리케이션을 Qt로 쉽게 개발하고 관리할 수 있다. Qt는 특히 고속 또는 고난도 구이(GUI) 프로그램과 같은 "고성능"과 관련된 능력이 있다. 그렇기 때문에 지난 몇 년간 나타난 대단히 중요한 구이 프로젝트중 일부 프로젝트들은 Qt에 기반을 두고 있다.
- 수세(SuSE)의 YaST2 설치와 설정 도구
- Maptek 3차원 채광 지질학적 시각화
- 유럽 우주국(European Space Agency)의 인공위성 시뮬레이션
- 아날로그 회로망과 기계 도구 같은 물리적 장치의 시뮬레이션과 실시간 통제를 결합해 주는 여러 컴퓨터 보조 엔지니어링 애플리케이션
가장 유명한 Qt-기반 프로젝트는
KDE 데스크탑 환경으로서 여러 리눅스 배포판에 장착되어 있다. KDE는 Qt의 유연성과 성능을 잘 보여주는 전형적인 예이다.
최종 사용자의 경험
개발자를 위한 기능이 이렇게 기가 막히게 멋지다면 과연 최종 사용자에게는 어떤 이익이 있는가? Qt기반 애플리케이션이 만들어 내는 화면 표시를 보고 사용자들은 어떻게 생각하는가?
대대수 개발자들은 위젯 모퉁이의 모양과 경계선 두께의 계산이 본질적으로 패션 산업(fashion industry)이라는 것을 알고 있다. 그럼에도 불구하고 Qt를 이 무대에서 승리자처럼 보이도록 만들어 주는 특징에는 두 가지가 있다.
첫 번째 디자인 능력은 Qt가 합당한, 심지어 마음을 설레게 하는 기본값을 가진다는 것이다. 고객이 명령어 라인 프로그램을 사용하고 설정하는 것을 시스템 관리자가 아주 작은 Qt 기반 제어판을 작성해서 조정한다고 생각해 보자. 그 간단한 Qt 애플리케이션이 가지는 독특한 모습과 행위는 "전문가적으로" 그리고 "예쁘게" 보인다. 이러한 아주 간단한 예에서 조차도, Qt는 최종 사용자에게 편안함을 준다.
그와 동시에 Qt의 맞춤 능력 중 하나는 "테마(themes)"를 지원한다는 것이다. 최종 사용자에 대해서 이 의미는, 예를 들어 Qt 애플리케이션이 윈도우에서 돌아가든 유닉스 머신에서 돌아가든 간에 전적으로 윈도우 애플리케이션처럼 보일 수 있다는 뜻이다. 또한 Qt는 모티프(Motif) 애플리케이션처럼 보일 수도 있다. 사실 같은 애플리케이션이라면 밑에 깔린 운영체제와는 별개로 여러 다른 선택중의 하나 또는 같은 모습을 가진다. 더욱이 여러 모습 중에서 선택하는 것은 프로그래머에게만 개방된 것이 아니라 최종 사용자 역시 그러하다는 것을 말해준다. 사용자는 적절하게 작성된 "테마화(themed)" 애플리케이션을 선택하여 개인적인 기호나 조직의 표준을 만족시킬 수 있다.
피부색 바꾸기
이와 같은 가능성들은 그 감동이 현재 구이(GUI) 도구모음의 세계를 뒤흔들고 있다는 것을 시사한다. 과거에 많은 프로그래머들을 비롯하여 독립적인 소프트웨어 판매상(ISVs)은 "윈도우 프로래머"나 "유닉스 가게"로 전문화되어 있었다. 이제 충분한 매력을 갖춘 애플리케이션만이 더욱 더 보편적이 될 수 있는 잠재적인 능력이 있다. Qt 기반 애플리케이션은 이 조류에 보조를 맞추고 있다. 왜냐하면 윈도우와 유닉스에서 올바르게 실행되고 각 운영체제에서 훌륭한 모습을 보이기 때문이다. 원칙적으로 Qt 그리고 이와 비견되는 능력을 가진 다른 도구모음은 단 하나의 OS나 CPU라는 한계를 벗어나 성장할 잠재적인 능력이 있다.
누가 Qt를 사용하고 있는가?
그래서 모든 사람들이 Qt를 사용하고 있는가? 아니다, 적어도 아직까지는 아니다. 많은 개발 회사는 예전 도구모음과 그 도구모음의 기능을 향상시켜 주는 제 3자 패키지를 포함하여, 상당한 투자를 한다. 아직까지는 Tk와 Visual Basic이 적어도 일반적인 여러 상황에서는 초보에게 더 쉽다. 더욱 심각한 것은 MacOS에 관심을 가진 회사들이 일반적으로 Tk를 사용하거나 특수 툴킷 중의 하나를 사용한다는 것이다. 왜냐하면 Qt를 MacOS에서 사용할 수 없기 때문이다. 트롤테크(Trolltech)사의 제품 관리자인 에릭 아비스랜드(Eirik Aavitsland)는 "MacOS용 Qt 개발이 시작되었지만, 배포 시기를 예측하기에는 너무 이르다"고 평가한다. 아비스랜드에 의하면 트롤테크사의 프로그래머들은 현재 "MacOS 8/9와 MacOS X 모두를 지원하는 것"을 목표로 하고 있다고 한다.
Qt의 라이센스 접근법
Qt를 반대하는 가장 큰 이유는 라이센스와 관련된 것처럼 보인다. GUI 툴킷 라이센스는 자유롭기 때문에 널리 퍼졌다. 이에 비해 Qt는 그 위치가 중간쯤에 있다. 아비스랜드(Aavitsland)는 다음과 같이 요약한다. "상업적 개발자에 대해서, Qt는 정상적인 상업적 라이브러리 라이센스를 소유하지만 실행시간 라이브러리에 부과되는 요금이라든가 로얄티는 전혀 없다."
트롤테크(Trolltech)사의 Free Edition은 관례적인 라이센스와 다르다. 이 회사는 의도적으로 거의 유일한 사업 모델을 선택했다. 아비스랜드(Aavitsland)의 설명에 의하면 "오픈 소스 세계에는 완전한 자유를 부여하지만 그와 동시에 전문 회사의 적극적인 개발과 지원을 보증한다. 이 때문에 Qt는 상업적 개발과 오픈 소스 개발 모두에 매력적인 선택이다"라고 한다. 자바소프트(JavaSoft), 디지털 크레이션즈(Digital Creations), 메트로 링크(Metro Link), 칼데라(Caldera), 등을 비롯한 다른 회사들과는 다르게 균형을 찾기 위해 트롤테크(Trolltech)는 두 세계 모두를 목표로 하여 확실하게 구분되기는 하지만 서로 관련된 라이센스를 만들어 내었다.
트롤테크(Trolltech)사는 유닉스 기반 개발, 오픈 소스와 비상업적 애플리케이션의 개발과 관련하여 무료 배포판(Free Edition)을 제공한다. 비상업적 애플리케이션은 라이센스 비용을 치루지 않고도 윈도우 최종 사용자에게 배포되어도 좋다. 그렇지만 윈도우용으로 사용할 수 있는 유일한 개발 패키지는 가격이 (2000년 6월 미달러로 1,500불) 취미삼아 개발을 하는 평범한 사람들의 의욕을 꺾을만큼 높다.
가격만이 그 라이센스에 대한 제기되는 유일한 불평은 아니다. 아주 다양한 이념적 이유와 전략적 이유 때문에 어떤 회사들은 Qt를 멀리하고 종종 GNU 프로그래머 라이센스인(GPLed) 그놈 툴킷(GTK)
[1]으로 관심을 돌린다. 트롤테크사도 이 갈등을 잘 알고 있다.
Qt 사용자 공동체에 대한 트롤테크의 반응중에는 1999년 3월에 "QPL(Qt Programming License)"을 도입한 것이 있다. 이 라이센스는 무료 배포판이라는 용어를 세련되게 다듬었다. QPL은 상업적 회사 내부에서 사용되는 작품을 다루는 방식에서 GPL과는 원초적으로 다르다. 예를 들어 한 사업에서 관리를 위해 작성된 애플리케이션들에 대해, QPL은 그러한 사업에 대해서는 트롤테크사에 상업적 라이센스에 대한 비용을 지불하라고 요구한다. 아비스랜드(Aavitsland)는 다음과 같이 결론을 짓는다. "Free Edition 라이센스에 남아 있는 문제를 해결하는 작업을 하고 있는 중이다."
카메론 레어드(Cameron Laird)는 Phaseit, Inc. 사의 부사장이며, 자주 오픈 소스 테크놀러지에 관한 글을 쓴다.
[1] GNU Programmers Licensed (GPLed) Gnome toolkit (GTK)