DataScience
article thumbnail
728x90

TAURI VS ELECTRON

TAURI

Tauri는 웹을 기반으로 Desktop Application을 빌드할 수 있는 툴킷이며, 거의 모든 프론트엔드 프레임워크와 호환된다는 것이 큰 장점입니다. 백엔드 언어는 Rust기반이며 CLI(Command line interface)은 Node.js가 사용되었습니다. 웹 기반 데스크탑 앱을 개발한다는 점에서 비슷한 프레임워크인 Electron과 유사한 점이 많습니다.

 

Electron

Electron은 크로미움과 Node.js에 기초하여 HTML, CSS, JavaScript를 이용하여 웹앱을 제작하듯 데스크탑 기반의 앱을 제작할 수 있는 프레임워크입니다. Cheng Zhao가 개발한 오픈소스 프레임워크로 현재는 깃허브에 의해 개발이 계속 진행 중입니다. 2013년에 최초 출시한 만큼 역사가 길며, Electron을 사용하여 개발된 앱은 Discord, GitHub, Facebook Messenger, MongoDB, Notion, Skype, Visual Studio Code 등이 있습니다. Electron은 개발자가 작성한 한 코드로 Linux, Mac, Window를 모두 빌드할 수 있다는 점에서 굉장한 이점을 가지고 있지만, 그에 상응하는 단점도 많이 가지고 있습니다.

 

Tauri 장점

  1. 거의 모든 프론트엔드 프레임워크들 간 호환이 가능하며, 기본적인 스택인 HTML/CSS/JavasScript부터 Next.js, SvelteKit, Vite를 통해 더욱 쉽고 빠르게 사용할 수 있습니다. (기존 프로젝트에도 연동하여 사용할 수 있습니다.)
  2. Tauri는 Webview를 자체 개발한 WRY를 사용함으로써 런타임 퍼포먼스에서 상당한 이점을 가져다줍니다. 또한 인스톨러 2.5MB, 총설치 용량 3.64MB라는 가벼운 크기가 장점입니다.
  3. CLI만 설치하면 핫 리로딩, 번들링, 앱 생성 등을 바로 사용할 수 있습니다.
  4. Rust 언어를 기반으로 구동이 되기 때문에 Rust의 도구들을 직접적으로 사용할 수 있으며, 웹 기반 앱이라는 점이 가져다주는 취약점을 대부분 상쇄시켜줍니다.
  5. 내장된 Updater를 통해 자동으로 앱을 업데이트할 수 있습니다.

Tauri 단점

  1. Tauri는 2019년 12월 Pre-Alpha로 처음 출시되었고 2022년 6월에 정식 버전이 출시되었습니다. 그렇다 보니 커뮤니티가 상대적으로 작으며, 국내에선 정보를 많이 다루고 있지 않은 편입니다. 공식 사이트에선 Blog, GitHub, Discord 등에 방법으로 소통하고 있으며, 그중에서도 Discord가 가장 활발하게 활성화되어 있습니다.

Electron 장점

  1. OS에 제약받지 않고 한번 작성된 코드로 크로스 플랫폼(Linux, Mac, Window) 애플리케이션을 빌드할 수 있도록 도와줍니다.
  2. 자바스크립트를 사용하기 때문에 웹 기술을 사용할 수 있고, 그렇다 보니 웹 개발자도 데스크톱 애플리케이션을 만들 때 새로운 언어를 익힐 필요 없이 개발할 수 있다는 점에서 진입 장벽이 낮으며, 그만큼 개발 속도가 빠르다는 장점을 가지고 있습니다.
  3. NPM 레지스트리에 등록된 대부분의 모듈을 이용할 수 있으며 Node.js를 통해 파일 시스템에 접근 및 네트워크 리소스를 제약 없이 사용할 수 있습니다.
  4. Webview에서 Node.js에 대한 접근 권한을 관리할 수 있고, Webview 페이지 내에 Require나 Process와 같은 Node.js API를 직접 사용할 수 있다. 이를 통해 Webview 페이지 내부에서 로우레벨 리소스로 접근이 가능해 고급스러운 네이티브 데스크톱 애플리케이션을 만들 수 있습니다.
  5. 역사가 길고 많은 사람이 사용하다 보니 커뮤니티 및 오픈소스가 방대합니다.

Electron 단점

  1. 설치 파일 용량이 크다. 데스크톱 애플리케이션 UI를 렌더링하기 위해 번들로 제공되는 크로미움과 구동에 필요한 여러 NPM 모듈들도 함께 패키징 되어 있어 간단한 애플리케이션을 개발한다고 해도 기본적으로 100MB 이상은 차지합니다.
  2. 시스템 리소스 및 RAM을 많이 차지하다 보니 애플리케이션 자체가 무거워 PC사양에 따라 UI가 느려질 수 있으며, 오직 하나의 플랫폼을 위해 특별한 네이티브 데스크탑 애플리케이션을 개발할 때는 적합하지 않습니다. (크로스 플랫폼의 역효과)
  3. Node.js를 통합으로 웹 기반 데스크탑 애플리케이션을 만들다 보니 보안에 취약합니다. 사용자가 앱 소스 코드를 디컴파일해서 볼 수 있으며, 그에 따른 여러 공격을 대비해야 합니다.
  4. 크로스 플랫폼을 지원하지만 하나의 플랫폼에서 타 플랫폼을 위한 애플리케이션을 빌드할 수 없습니다. 예전에는 가능했으나 현재는 일반적인 방법으론 불가능합니다. 그렇다 보니 결국엔 여러 환경의 OS가 필요합니다. 가상 머신으로도 대체가 가능하지만 결국 각 OS에서 필요한 최소한의 세팅 역시 해주어야 하기 때문에 번거로운 작업이 될 수밖에 없습니다.

hello_world(가장 최소화했을 때를 기준)를 출력할 때의 결과입니다. 

비교 Tauri Electron
실행 시간 0.427/s 0.505/s
번들 크기 1.8MB 127.47MB
메모리 사용량 311MB 469MB
스레드 수 42 65
시스템 호출 수 24286 30936
램 사용량 80MB 120MB
(리눅스의 경우 500MB이상으로 큰 차이가 발생)
앱 백엔드 Rust Node.js 런타임
보안 Rust 보안 기능들 + 고유한 보안 기능들을 통해 안전 사용자가 앱 소스코드를 디컴파일 할 수 있기 때문에 취약
자동 업데이트 내장 Updater 보유 electron-updater 패키지가 필요
커뮤니티 국내엔 정보가 없는 수준, 해외에서도 여전히 작은 규모 수많은 오픈소스 및 Quick-starter 제공, 방대한 커뮤니티를 통해 이슈 및 샘플소스를 볼 수 있어 개발 시간을 크게 단축할 수 있음
출처 : https://www.incodom.kr/Tauri#h_684362e4c3b17b880af161a336d418a3

 

WRY : WRY는 Windows, macOS 및 Linux와 같은 모든 주요 데스크톱 플랫폼을 지원하는 Rust의 크로스 플랫폼 WebView 렌더링 라이브러리입니다. Tauri는 WRY를 사용되는 웹 보기(및 상호 작용 방식)를 결정하는 추상 계층으로 사용합니다.

FLOSS : (Free/Libre and Open Source Software)

 

Tauri 설치

Windows

먼저 Microsoft Visual Studio C++ Build Tools (https://visualstudio.microsoft.com/ko/visual-cpp-build-tools/)를 설치합니다.

워크로드 설정 영역에서 "C++를 사용한 데스크톱 개발"을 체크, 우측에 설치 세부 정보에서 "C++ build tools"와 "Windows 10 SDK"를 선택 후 설치합니다.

Tauri는 Webview2에 의존하기 때문에 설치가 필요합니다. Window 11에서는 이미 설치되어 있고, 만약 11이 아니라면 (https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section) 이곳에서 에버그린 부트스트래퍼를 설치하면 됩니다.

마지막으로 Rustup을 설치해야 하는데 (https://www.rust-lang.org/tools/install)에서 운영체제에 맞게 다운로드받으면 됩니다.

이제 CMD 혹은 PowerShell에서 아래 명령어를 실행하여 Rustup을 설치합니다.

PS C:\> winget install --id Rustlang.Rustup

 

Linux

시스템 의존성

C 컴파일러와 webkit2gtk 같은 몇몇 시스템 의존성을 설치해야 합니다. 

sudo pacman -Syu
sudo pacman -S --needed \
    webkit2gtk \
    base-devel \
    curl \
    wget \
    openssl \
    appmenu-gtk-module \
    gtk3 \
    libappindicator-gtk3 \
    librsvg \
    libvips
 

Rust설치

Linux에서 Rust를 설치하기 위해, 터미널을 열어 다음 명령어를 입력하세요:

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

이 명령어는 스크립트를 내려받고 Rust의 마지막 안정 버전을 내려받는 rustup 도구 설치를 시작합니다. 암호를 입력해야 할 수도 있습니다. 만약 설치에 성공했다면, 다음 문장이 나타날 것입니다.

Rust is installed now. Great!

터미널을 재시작해 변경 사항을 적용하세요.

 
rustup update          			#업데이트
rustup self uninstall  			#제거
rustc --version				#버전확인
rustc x.y.z (abcabcabc yyyy-mm-dd)	#안정 버전의 커밋 날짜

'Rust' 카테고리의 다른 글

Tauri 개발  (31) 2023.04.13
Tauri 구조  (135) 2023.04.12
Tauri Project 생성(Sveltekit)  (119) 2023.04.11
Rust 기본 개념  (59) 2023.04.10
Arch Linux(아치리눅스)에 Rust install  (36) 2023.04.09
profile

DataScience

@Ninestar

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!