1. 개요
Window에서 사용할 GUI 프로그램을 개발하기 위해 GUI관련 조사를 해본적이 있었다.
그때 결국 내 당시 상황에서 빨리 배워서 빨리 쓸 수 있는게 Qt였어서 Qt로 개발을 해봤었다.
다음번에 다른 언어나 플랫폼에서 개발할 상황이 생기면 보고 써먹기 위해 남겨둔다.
2. 웹 기반 프레임워크
Electron과 Tauri가 있다.
Electron은 상대적으로 출시된지 좀 됐고 Tauri는 비교적 최근에 출시됐다.
Electron은 크로미움 기반이고 Tauri는 로컬 웹프로그램 기반이라 Tauri가 상대적으로 빠르고 가볍다.
1) Electron
- 개발사 : GitHub
- 사용언어 : HTML, CSS, JavaScript
- 사용된 프로그램 : GitHub Atom, Microsoft Visual Studio Code, 라이트 테이블, Discord, Notion, Skype, Slack, Spotify 등
- 크로스 플랫폼 유무 : O(Window, Mac, Linux), 단 하나의 OS에서 타OS를 위한 빌드는 불가능해서 각 OS마다 빌드해야 한다.
- 성능 : 용량이 크고 메모리를 많이 쓴다.
- 사용자 인터페이스 : 다양한 UI와 테마를 제공하기때문에 시각적으로 보기좋은 어플리케이션을 만들기 쉽다.
- 개발 경험 : 개발도구나 레퍼런스나 커뮤니티가 활성화되어있다. 디버깅과 핫리로딩이 잘 지원된다.
- 커뮤니티 : 다양한 플러그인과 확장기능을 쉽게 사용할 수 있는 활동적인 커뮤니티를 자랑한다.
- 그 외 특징
크로미움 기반으로 프로그램을 실행시키기 때문에 웹을 사용할 수 있는 데스크탑 플랫폼에선 모두 사용이 가능하다.
일렉트론의 단점은 크로미움의 단점과 같다고 볼 수 있는데 용량이 크고 메모리 자원을 많이 사용하는 것이 특징이다.
디자인은 HTML/CSS로 처리하고, 내부 로직은 C++로 처리하는 방법도 가능하다. 하지만 JS보다 오류가 발생할 여지가 좀 더 많다고 한다.
역사가 길고 사용하는 사람이 많아서 정보가 많다.
2) Tauri
- 개발사 : MIT, Apache
- 사용언어 : HTML, CSS, JavaScript, Rust(프론트엔드는 HTML/CSS, JavaScript, 백엔드는 Rust로 구현)
- 사용된 프로그램 : LosePass, Mailspring
- 크로스 플랫폼 유무 : O(Window, Mac, Linux)
- 성능 : 일렉트론은 크로미움 기반이라 용량도 크고 메모리를 많이 차지하지만 타우리는 네이티브 웹 기반이라 상대적으로 훨씬 가볍다. 또한 Rust의 장점덕에 웹기반 앱이라는 단점이 많이 상쇄된다. 물론 네이티브로 번역되는 프레임워크보다는 느릴 수 있다.
- 사용자 인터페이스 : 다른 프레임워크들만큼 UI요소를 제공하지는 않지만 사용자 인터페이스를 엄격하게 제어할 수 있기때문에 직접 디자인을 하는 상황에선 도움이 될 수 있다.
- 개발경험 : 출시된지 오래되지 않아서 커뮤니티나 레퍼런스가 상대적으로 부족할 수 있지만 Rust와 JS로 단순하게 개발이 가능하다.
- 커뮤니티 : 꾸준히 성장중이다. 출시된지 오래되지 않아서 레퍼런스나 커뮤니티가 적다.
- 그 외 특징
클라이언트 자체 웹엔진을 사용한다.(윈도우라면 엣지)
Vue, React, Angular등의 프레임워크와 호환성이 높다.
상업용 라이센싱으로 릴리즈할 수 있다.
3. 모바일 프레임워크에서 데스크탑까지
모바일 어플리케이션 제작 프레임워크의 양대산맥인 React Native와 Flutter 또한 데스크탑 프로그램을 제작하는데에 사용할 수 있다.
1) Flutter
- 개발사 : Google
- 사용언어 : Dart
- 사용된 프로그램 : Google Ads, Alibaba, Reflectly
- 크로스플랫폼 유무 : O(Window, Mac, Linux)
- 성능 : 네이티브코드로 컴파일되고 GPU가속화를 사용해서 빠르고 부드럽다.
- 사용자 인터페이스 : 다양한 위젯을 제공한다.
- 개발 경험 : 위젯 기반 아키텍처와 강력한 문서화덕분에 개발경험이 간소화된다. 핫리로딩이 지원된다.
- 커뮤니티 : 주로 모바일 개발에 초점을 맞추지만 데스크톱으로 확장하면서 관련 커뮤니티도 점점 늘어가고 있다.
- 그 외 특징
미디어가 풍부한 애플리케이션을 위한 선택으로 좋다
많은 UI 위젯을 제공하고 네이티브 코드로 컴파일된다.
2) React Native
- 개발사 : Facebook
- 사용언어 : JavaScript
- 사용된 프로그램 : Discord 확장시 사용되었음
- 크로스플랫폼 유무 : O, 하지만 다른 프레임워크들만큼 매끄럽지는 않거나 추가적인 작업이 필요할 수 있음. 네이티브 API에 액세스할 수 있는 방법을 제공한다.
- 성능 : 데스크탑 어플리케이션 개발용으로써는 다른 플랫폼들에 비해 아쉬운점들이 있는듯하다.
- 사용자 인터페이스 : 타사 라이브러리와 구성요소를 사용해서 UI를 디자인할 수 있다. 직접 디자인하려면 추가작업이 필요할수 있다.
- 개발 경험 : 웹 및 모바일 개발자에게 친숙한 개발경험을 제공한다. 하지만 데스크탑 애플리케이션을 위해 추가적인 학습이 필요할 수 있다.
- 커뮤니티 : 주로 모바일 개발에 초점을 마춘 커뮤니티이며 데스크탑 프로그램 커뮤니티는 작지만 성장해가고 있다.
4. 컴파일 기반 개발환경
1) Qt
- 개발사 : Trolltech -> 노키아 -> Qt
- 사용언어 : QML and C++, python, javascript 중 선택
- 사용된 프로그램 : 산업용 소프트웨어 및 자동차 정보시스템
- 크로스플랫폼 유무 : O(Window, Mac, Linux)
- 성능 : 네이티브 언어로 컴파일해주기 때문에 성능면에서 뛰어나다. C++기반이라 하드웨어 접근이나 속도면에서 월등하다. 그냥 C++로만 작성한 코드와 Qt로 만든 코드의 속도차이는 거의 없는편이라고 봐도 된다. 네이티브와 같은 속도라고 보면 된다. 리소스집약적인 상황이나 성능중시상황에 적합하다.
- 사용자 인터페이스 : 타겟 플랫폼과 원활하게 통합되는 네이티브와 같은 UI를 제공하는데 탁월하다. 세련된 외관을 만들 수 있다.
- 개발경험 : 다양한 IDE와 툴을 제공하며 사용된지 오래됐어서 성숙한 개발환경을 제공한다. 안정성과 문서화가 뛰어나다.
- 커뮤니티 : 오랜 역사와 방태한 툴을 자랑하는 만큼 위젯, 확장 라이브러리를 많이 갖춘 확실한 생태계를 구축하고 있다.
- 그 외 특징
일렉트론이나 타우리는 웹기반으로 돌아가기때문에 어느정도 무겁고 느려질수밖에 없지만 Qt는 네이티브 코드로 컴파일되는거라 속도면에서 유리하다.
GUI는 Qt의 qml로 작성하고 내부 로직은 C++로 작성하면 C++로만 작성한 네이티브 코드와 거의 같은 성능을 보여준다.
내부 로직을 python으로 작성할 수 있는 pyQt도 있다.
2) Win32 Api 및 MFC
전통적인 Window 기반 프로그램의 UI 개발 환경이다.
하지만 이제는 과거의 기술로 취급되는 경향이 강하며 MFC의 경우는 여전히 속도가 중요한 환경에서 사용되고는 있지만 유지보수에 가깝고 신규 프로젝트를 MFC로 진행하는 것은 권장되지 않는 듯 하다.
5. 닷넷 기반 개발환경
1) Winform 및 WPF
Winform은 개인프로젝트 구현시 쉽고 빠르게 구현 가능하다는 장점이 있지만 팀프로젝트에서 사용하기에 좋은 환경은 아니다.
WPF의 경우는 데스크탑 프로그램뿐 아니라 장비나 자동화기계같은 분야에서 사용하는곳도 많고 윈도우 프로그램을 만들기에 아주 좋은 선택지이다. 다만 .NET 환경에서만 작동 가능하다는 점이 위에서 나열한 크로스플랫폼 지원 프레임워크에 비해 아쉬운점이겠다. 또한 닷넷 가상 머신위에서 돌아가므로 네이티브 컴파일 환경보단 다소 느릴 수 있다.
6. 그 외 다양한 개발환경
아래의 개발환경들은 크로스플랫폼을 지원하는 환경들이다. 내가 프로젝트를 진행할 당시 선택사항에서 벗어나 깊게 조사하진 않았지만 필요한경우 조사해보고 사용할 가치가 있는 개발환경들이다.
몇몇은 다소 오래되었거나 너무 최근에 나와서 자료가 없는 경우들도 있다.
- Uno Platform : C#과 XAML을 사용하며 무료 오픈소스 플랫폼이다.
- .Net MAUI : WPF처럼 xaml로 디자인한다.
- Xamarin : WPF처럼 xaml로 디자인한다.
- Avalonia : .NET 기반의 크로스플랫폼 GUI, WPF처럼 xaml로 디자인하지만 완전히 호환되지는 않는다.
- GTK : C/C++뿐 아니라 .NET프레임워크, python, Vala언어를 지원한다.
- wxWidgets : C++ GUI 라이브러리
- C++ Builder : C++ GUI 개발환경인데 사용률이 적어 자료가 적고 IDE가 한국어를 지원하지 않는다.
- nana C++ Library : modern C++(C++ 11/14/17)을 지원하는 GUI라이브러리
- Dear ImGUI : 크로스플랫폼 C++ 라이브러리
- VCL(Visual Component Library) : 오브젝트 파스칼(델파이) GUI, Windows/Mac/Linux뿐 아니라 IOS나 Android도 지우너한다.
- Compose Multiplatform : Kotlin 기반의 GUI 라이브러리
- WinUI 3.0
- UWP
※ 참고 문헌
https://namu.wiki/w/GUI%20%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC