Cross-platform applications(크로스 플랫폼 애플리케이션)은 여러 운영 체제에서 동일한 코드 기반으로 실행될 수 있는 애플리케이션을 의미한다. 즉, Windows, macOS, Linux, iOS, Android 등 다양한 플랫폼에서 동작할 수 있도록 개발된 앱을 의미한다.
🔹 Cross-platform 개발 방식
Web-based (PWA, Electron, Tauri 등)
HTML, CSS, JavaScript 같은 웹 기술을 사용해서 다양한 OS에서 실행 가능한 애플리케이션을 개발.
예: Tauri(네이티브 앱이지만 웹 기술 사용), Electron, Progressive Web App(PWA)
Framework-based (Flutter, React Native, Xamarin 등)
하나의 코드베이스로 네이티브 앱을 빌드할 수 있도록 도와주는 프레임워크 사용.
예: Flutter(Dart 사용), React Native(JavaScript/TypeScript 사용), Xamarin(C# 사용)
Web-based 기술인 Electron과 Tauri를 비교한다.
tauri의 경우 create-tauri-app을 활용하여 보일러 플레이트를 작성한다. electron의 경우 electron-vite를 활용한다.
<크기>


dmg의 경우 약 33배
애플리케이션의 경우 약 27배
Electron은 기본적으로 애플리케이션과 함께 Node.js 런타임, V8 JavaScript 엔진, 전체 웹 브라우저(Chromiun)가 패키징된다.
반면에 Tauri는 OS가 기본 제공하는 WebView(macOS의 WebKit, Windows의 WebView2 등)를 사용한다. WebView를 자체적으로 포함하지 않기 때문에 사이즈면에서 상당한 차이를 보인다.
물론 Electron 기반 애플리케이션의 크기가 현대 하드웨어에 부담을 주는 수준은 아니다.
<실행 속도>
Electron
open -a "electron-app" 0.00s user 0.00s system 16% cpu 0.058 total
open -a "electron-app" 0.00s user 0.00s system 15% cpu 0.055 total
open -a "electron-app" 0.00s user 0.00s system 14% cpu 0.055 total
open -a "electron-app" 0.00s user 0.00s system 14% cpu 0.056 total
open -a "electron-app" 0.00s user 0.00s system 15% cpu 0.054 total
평균 실행 시간 0.0556
Tauri
open -a "tauri-app" 0.00s user 0.00s system 15% cpu 0.053 total
open -a "tauri-app" 0.00s user 0.00s system 14% cpu 0.056 total
open -a "tauri-app" 0.00s user 0.00s system 13% cpu 0.060 total
open -a "tauri-app" 0.00s user 0.00s system 16% cpu 0.052 total
open -a "tauri-app" 0.00s user 0.00s system 15% cpu 0.056 total
평균 실행 시간 0.0554
time 명령어를 통해 애플리케이션이 열리는 속도를 확인한다.
보일러 플레이트 수준이어서 그런 건지, 측정 방식이 잘못되어서 그런 건지 큰 차이는 없다.
https://www.levminer.com/blog/tauri-vs-electron
하지만 다른 분들이 진행한 벤치마크들을 확인해봤을 때 유의미한 차이가 존재한다. 앱이 실행되면 브라우저가 열리고, 그 브라우저가 함께 번들 된 JavaScript 기반 애플리케이션을 로드하기 때문에 Electron 기반 애플리케이션이 실행되기 위한 시간이 더 필요할 것으로 보인다.
Tauri의 장점이 Electron의 단점이자, Electron의 장점이 Tauri의 단점이기 때문에 장점만 적는다.
Electron의 장점
엄청난 수의 사용자를 가진 대규모 애플리케이션들의 기반이다. (VsCode, Discord, Obsidian, Docker Desktop, Slack) (물론 pgMagic, Noor와 같이 Tauri를 기반으로 커가는 애플리케이션들이 있다.)
JavaScript만으로 모든 것들을 처리할 수 있다.
문서화가 잘 되어 있다. (Tauri는 실제 존재하는 기능임에도 불구하고 문서에 내용이 없는 경우가 허다하다.)
Tauri의 장점
작고 빠르다.
프로젝트 시작 단계가 훨씬 간단한다.
다양한 플러그인들을 제공하고 있으며, 그 적용이 간단하다.
FE/BE를 구분하는 src/src-tauri의 폴더 구조가 깔끔하다.
https://www.reddit.com/r/javascript/comments/ulpeea/askjs_tauri_vs_electron/
Electron vs Tauri에 대한 레딧글
확실히 Rust라는 언어가 Tauri를 매력적으로 만들면서도 가장 큰 허들이 된다.
무언가를 배우기 위해서라면 Tauri가 적절할 수 있지만 시장에 내놓아야 하는 상품을 개발한다면 이미 여러 분야에서 검증된 Electron을 사용하는게 좋겠다.
https://felixrieseberg.com/things-people-get-wrong-about-electron/
Electron에 오래 기여한 분이 작성한 글이다.
Web apps are bad.
The argument: All native apps are better than all web apps. Any given web app would be better as a native app.
위의 단락을 한 문장으로 요약하면
Web apps are bad, but they are needed.
web app은 native app에 비해 별로지만, 필요한 이유들이 있다. (번들 사이즈, 배포, 숙련도 등등) web app을 개발하는 개발자들은 bad와 needed 사이의 간격을 좁히는 노력을 해야 한다.