Cross platform GUI toolkit의 선택

aero의 이미지

장기적으로 프로그램을 계속 유지,보수,발전 시켜야 하는 프로젝트에서는
GUI toolkit의 선택에 많은 고민을 하게 되는것 같습니다.
나중에 개발에 사용한 GUI toolkit이 개발중단이나 지원중단되는 경우를
고려해 보지 않을 수 도 없고.

윈도우하나를 대상으로 할 경우 거의 win32api나 MFC,ATL,WTL같은
OS벤더에서 제공하는 native api를 쓰지만.

다중 플랫폼 환경을 타켓으로 할 경우 선택의 범위는 광범위 하다고
볼 수 있지요.

제가 아는것만 대강 나열해 봐도
*JAVA
. JDK안에 포함된 AWT,SWING
. IBM의 eclipse project에서 사용하는 swt

*C/C++
Qt,wxWindows,FLTK,FOX,GTK+, mozilla의 XUL 등등..

*scipt
tk, python(tkinter, pyQt등 위 C/C++툴킷을 래핑한것들 그것들을 또다시
래핑하는 anyGui 등등)
perl, ruby, php 등의 C/C++툴킷 래핑라이브러리 등등

구현 방식도 라이브러리 레벨에서 멀티플랫폼을 일일이 지원하는 방식
각각의 native라이브러리를 래핑만 하는방식
wine처럼 아예 라이브러리를 에뮬레이션하는 방식

제 생각으로는 XML같은것을 사용하여 위젯이나 이벤트를 정의하는
표준을 만들고 이것을 가지고 어떤 GUI toolkit을 사용하더라도
인터페이스를 만들어 내는 방식이 최선일것 같은데 (mozilla의
XUL이 이런 방식을 사용하는것 같음)

참고 Link:
http://home.pacbell.net/atai/guitool/

여러분들의 생각은 어떤가요?

큰괭이의 이미지

저도 예전에 PDA에서 사용되는 자체 GUI ToolKit등과 관련해서 아주 잠깐 일을 한적이 있습니다. 그 기억에 답글을 쓰게 되었는데요.

우선 기본적으로 어떤 OS에도 적용가능한 API를 만들겠다는 것 자체가 매우 어려운 일이며 거기다가 GUI ToolKit을 그러한 방식으로 만들겠다는 것 자체가 매우 어려운 일일 것이라는 생각이 듭니다.
(다 아시는 일일 테지만 :wink: )

우선 그러한 목적으로 만들어진 대표적인 것을 생각하면 자바쪽의 AWT,SWING과 C나 C++용으로 만들어진 GTK,wxWindows등을 들수가 있겠죠.
하지만 이러한 것들도 매우 한정적인 상황에서밖에는 쓸수가 없는 현실이 있고 Performance가 제대로 나느냐에 대한 숨겨진 문제가 있습니다.

거기다 저의 개인적인 환경과 맞물려 생각하면 X86 계열이 아닌 CPU를 쓰는 사람들 (일반적으로 Embedded환경이라고 불리우는..)에 대한 지원은 어떻게 하느냐 등의 많은 문제들이 있다고 생각됩니다.

그래서 어떤 방법이 제일 좋은지에 대한 결론은 저 개인적으로서는 무엇이 맞는 것인지 모르겠더군요 ^.^

아무튼 님이 이야기 하신.
============================
제 생각으로는 XML같은것을 사용하여 위젯이나 이벤트를 정의하는
표준을 만들고 이것을 가지고 어떤 GUI toolkit을 사용하더라도
인터페이스를 만들어 내는 방식이 최선일것 같은데 (mozilla의
XUL이 이런 방식을 사용하는것 같음)
============================
방법의 기본정신은 이미 AWT에서 위와 같은 기본정신 아래에서 만들어진 것입니다.
다만 자바는 JVM위에서는 OS 독립적이라는 제한이 있는 것이죠.

Mozilla의 Interface와 같은 것도 OS Level의 Graphic Layer를 GUI 개발자에게 보이지 않도록 한다는 정신자체는 의미가 있지만... 이것역시....

X Windows System과 MS Windows System에 한정적이라는 문제가 있습니다. (제말은 딱 두개만 지원하는 것이 과연의미가 있느냐는 것이죠.)
MAC용이 존재하는지는 잘모르겠구요. :wink:

아무튼 GUI Toolkit에 관련된 것은 모든 사람의 요구에 대응할 수 있는 시스템을 만들어야 하면서 여러 OS에서 쓸 수 있는 것을 만들어야 한다는 점에서 굉장히 어려운 문제라는 생각이 들구요.

솔직히 제 생각에는 사람들이 제일 많이 쓰는 것을 선택해서 일을 하는것이 젤 편하다.. 카카... ^^

암튼 옛날에 고민했던 것들이 생각나서 주절주절 거렸습니다.

?

죠커의 이미지

파이어버드가 XUL을 쓰는 것 처럼 보이던데 로딩에만 일정시간 (아마도 익스플로러가 부팅에 뜨는 탓이겠죠 ? :-)) 을 소비하더군요. 쓸만했습니다. (넷스 6가 XUL때문에 무겁다는 글도 검색엔진에 걸렸지만 안정화된 모양이네요.)

그 XUL 툴킷을 응용하면 괜찮지 않을까란 생각이 듭니다. 작업결과를 툴킷을 통해서 보여주면서 GUI를 작성할수 있도록 한다면 꽤나 편리하게 UI를 구성할수 있을것 같습니다.

fender의 이미지

dummy999님의 글에 자세히 썼지만 제 생각에는 XUL + SWT가 최상의 크로스플랫폼 GUI 솔루션이 될 것으로 생각합니다. 그래서 Luxor의 SWT버전이나 JellySWT 등을 주의 깊게 보고 있는 중입니다.

물론 XUL + wxWindows의 조합도 똑같은 이유로 이상적이지만 제가 이 쪽에는 프로그래밍 경험이 없어서 평가하기 어렵군요.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

mykldp의 이미지

항상 많은 사람들이 고민을 하고 있는 문제죠..^^ /. 이나 여기 게시판(예전 geek firum 포함) 에서도 몇 번 이야기가 나왔었습니다. 쓰레드 전체가 그 이야기 였던 적도 있고 GUI 와 관련된 쓰에드의 답글에서 조금씩 이야기가 나왔던 적도 있구요.

저도 최근에 업무 때문에 그 문제로 고민을 했었습니다. 위에 말씀하신 툴킷들 중에 제가 검토해본 것들에 대해 이야기 해보자면..

FOX 는 윈도에서 한글 입력에 문제가 있습니다. 메일링 리스트를 찾아보니 그 문제에 대해 자주 이야기가 있었지만 아직 해결이 안된듯 합니다.
FLTK 는 복잡한 GUI 를 개발하기에는 지원되는 위젯이 부족하다는 평이 일반적입니다. FLTK 2 가 개발 중이던데 아직 베타입니다. FLTK 2 에서는 보다 많은 위젯이 지원되는 듯 하더군요.
SWT 는 리눅스 GTK 기반에서 느리고 버그가 상당히 많습니다. 한 예로 제 젠투 머신에서는 이클립스가 갑자기 죽어버리는 경우가 대단히 많더군요. 다른 배포판 상에서도 같은 경험에 대해 이야기를 들은적이 있습니다.
GTK+ 는 win32 포트가 불안정합니다. 설치시 기본적으로 제공되는 예제가 크래쉬를 내는 경우가 있더군요. 그리고 locale 같은 glibc 의존적인 리소스들을 필요로하므로 런타임 환경이 크고 복잡해지는 경향이 있습니다. 리눅스에서라면 당연히 시스템 차원에서 지원되는 것들이 win32 에서는 지원되지 않으니 별도의 런타임 환경으로 설치를 해주어야 합니다. 어쩌면 현재의 포팅 방법의 문제일 수도 있겠다는 생각이 들더군요. gdk 차원에서 그런 문제가 해결이 안되는지 궁금합니다. 어쨌든 win32 포트는 불안정합니다.
스윙은 결정적으로 아직 너무 무겁습니다..

그나마 쓸만한 것이 qt와 wxWindows 그리고 qt에 기반하고 있는 볼랜드 VCL 입니다. 하지만 Qt 도 한글 입력에 약간 문제가 있지요. 리눅스에는 패치가 존재하지만 win32 포트는 어쩐지 잘 모르겠습니다. 볼랜드 VCL 은 C++ builder 와 델파이, kylix 에서 사용할 수 있지요. Qt 기반이지만 왠지 한글 입력에는 큰 문제가 없는 듯 합니다.(확실치는 않습니다. 그리고 리눅스에서는 어쩐지 모르겠습니다.) 그리고 둘 다 상용으로 써야할 경우에는 돈주고 사야합니다. 또 하나 문제는 ansi C++ 이 아니라 이를 확장한 언어를 사용한다는 것입니다. 따라서 qt 의 경우는 qt 만의 전처리기를 돌려야 합니다. 그리고 VCL 은 소스가 공개되어 있지 않으므로 컴파일러에 종속적일 수 밖에 없습니다.

그래서 현재는 wxWindows 를 이용해 개발하고 있습니다.

이상은 직접 사용해본 이야기, 들은 이야기를 종합한 내용입니다.^^; 특히 VCL 은 직접 사용해보지를 않아서 정확한 내용은 모르겠습니다.

제 생각에도 앞으로 GUI 툴킷이 가야할 방향은 모질라 XUL 같은 방식이라고 생각합니다. 하지만 현재 실제 응용프로그램 개발에 사용해도 좋는 단계인지는 잘 모르겠습니다. XRE 프로젝트던가요? XUL 런타임 환경을 제공하는 프로젝트가 현재 어떻게 진행되고 있는지... 아직 XUL 환경이 모질라나 firebird 에서 완전히 독립되지 않은 것 같던데.. 만약에 독립된 XUL 환경이 제공된다면 대단히 매력적인 환경이 될 것 같습니다. 기대하고 있습니다.

엇, 죄송 수정합니다. VCL 이 아니라 CLX 입니다.-_-;; 죄송합니다.

죠커의 이미지

mykldp wrote:
그리고 VCL 은 소스가 공개되어 있지 않으므로 컴파일러에 종속적일 수 밖에 없습니다.

정말로 그런가요? 지인 중 한명이 C++ 빌더를 권하시면서 서적이나 참고자료를 물어봤더니 파스칼만 약간 알면 VCL은 무리없다고 하셔서 소스가 공개된줄 알았거든요.

arimae의 이미지

C++ Builder 나 Delphi 의 Enterprise 급 버전을 구매하시면 VCL 소스가 제공됩니다.

학생이시라면 위의 제품을 10만원도 안되는 가격에 정품으로 구입할 수 있을것입니다.
제품의 내용은 원래의 Enterprise 버전과 같고, 메뉴얼은 없이 시디만 발송됩니다.
단, 상용 제품을 개발하면 라이센스에 위반됩니다.

www.borlandforum.com 에 가시면 자세한 정보 얻으실수 있을것입니다.

Dream, Passion and Challenge..

cedar의 이미지

arimae wrote:
C++ Builder 나 Delphi 의 Enterprise 급 버전을 구매하시면 VCL 소스가 제공됩니다.

학생이시라면 위의 제품을 10만원도 안되는 가격에 정품으로 구입할 수 있을것입니다.
제품의 내용은 원래의 Enterprise 버전과 같고, 메뉴얼은 없이 시디만 발송됩니다.
단, 상용 제품을 개발하면 라이센스에 위반됩니다.

www.borlandforum.com 에 가시면 자세한 정보 얻으실수 있을것입니다.

Enterprise Edition 뿐만 아니라 훨씬 저렴한 Professional Editon에도 VCL/CLX 소스가 제공됩니다.
진짜로 엔터프라이즈용 어플 개발이 아닌한 엔터프라이즈 에디션은 절대 필요없습니다. 저렴한 프로페셔널을 사용하세요.
그리고 학생용 버전의 가격은 59,400원입니다.

cedar의 이미지

CN wrote:
mykldp wrote:
그리고 VCL 은 소스가 공개되어 있지 않으므로 컴파일러에 종속적일 수 밖에 없습니다.

정말로 그런가요? 지인 중 한명이 C++ 빌더를 권하시면서 서적이나 참고자료를 물어봤더니 파스칼만 약간 알면 VCL은 무리없다고 하셔서 소스가 공개된줄 알았거든요.

실제로 VCL/CLX 소스를 수정해서 개발하는 경우도 꽤 많습니다.
그리고 VCL/CLX를 제대로 이해하려면 역시 소스 코드를 보아야 합니다.
객체지향의 모범이라고 할 수 있는 주옥같은 코드들이 많지요.
VCL은 GoF의 디자인 패턴이 나오기 전에 나온 것이지만
그 책에 나오는 패턴 같은 것도 많이 발견되지요.

voider의 이미지

작년쯤에 XUL에 감명을 받고 좀 보긴 했지만 그때 막상 써먹긴 힘들었는데.....
앞으로 많은 발전이 있겠죠...

-- 아쉬운 하루 되세요 --