Perry vs Electron
Electron은 Chromium과 Node.js를 앱과 함께 묶어 웹 기술 (HTML/CSS/JS)로 크로스 플랫폼 데스크톱 앱을 만들 수 있게 해줍니다. Perry는 TypeScript를 곧바로 네이티브 머신 코드로 컴파일하고, UI는 실제 플랫폼 위젯 — AppKit, UIKit, GTK4, Win32, JNI — 을 통해 그립니다. Electron의 메시지는 웹 기술 재사용이고, Perry의 메시지는 TypeScript에서 작은 네이티브 바이너리와 네이티브 UI를 만드는 것입니다.
Electron란 무엇인가?
Electron은 렌더링에 Chromium, 시스템 접근에 Node.js를 사용해 크로스 플랫폼 데스크톱 애플리케이션을 만드는 오픈소스 프레임워크입니다. 모든 Electron 앱은 자체 Chromium과 Node 사본을 함께 배포하기 때문에 hello world 수준이라도 설치 파일이 보통 80–150 MB에 달합니다. Electron은 VS Code, Slack, Discord, Figma 데스크톱 클라이언트 등 널리 쓰이는 앱을 구동해 왔습니다. 타겟은 Linux, macOS, Windows 데스크톱이며, 공식적인 모바일·워치·TV 지원은 없습니다.
Perry란 무엇인가?
Perry는 브라우저 엔진도, Chromium도, Node 런타임도 없이 TypeScript를 곧바로 네이티브 머신 코드로 컴파일합니다. UI 레이어 (perry/ui)는 SwiftUI 스타일의 선언적 시스템으로, macOS의 AppKit, iOS/iPadOS/tvOS의 UIKit, Linux의 GTK4, Windows의 Win32, Android의 JNI를 통해 네이티브 플랫폼 위젯에 매핑됩니다. hello world 바이너리는 약 330 KB이며, 표준 라이브러리를 모두 포함한 풀 앱 (Fastify, mysql2 등)도 약 48 MB 수준입니다.
나란히 비교
| 기능 | Perry | Electron |
|---|---|---|
| 렌더링 | 네이티브 플랫폼 위젯 (AppKit, UIKit, GTK4, Win32, JNI) | 번들된 Chromium (HTML/CSS/JS) |
| 번들된 엔진 | 없음 (--enable-js-runtime 시에만 V8) | Chromium + Node.js |
| Hello-world 설치 파일 크기 | 약 330 KB | 약 80–150 MB |
| 풀 앱 설치 파일 (표준 라이브러리 + 프레임워크) | 약 48 MB | 보통 100–200 MB 이상 |
| RAM 사용량 | 네이티브 (보통 수십 MB) | 여러 Chromium 프로세스 (보통 수백 MB) |
| 모바일·워치·TV | 지원 — iOS, iPadOS, Android, watchOS, tvOS, Wear OS | 지원하지 않음 (데스크톱 전용) |
| UI 언어 | 선언적 SwiftUI 스타일 API의 TypeScript | HTML/CSS/JS (웹 스택) |
| 자동 업데이트·패키징 | perry publish (Homebrew, APT, App Store, Play Store) | electron-builder, electron-updater (성숙한 생태계) |
| 성숙도 | 1.0 이전 | 안정, 10년 이상 프로덕션 운영 |
Perry가 앞서는 점
- +바이너리 크기. Perry hello world는 약 330 KB이고, Electron hello world는 모든 앱이 자체 Chromium을 함께 배포하기 때문에 보통 80–150 MB입니다.
- +메모리 사용량. Perry 앱은 단일 네이티브 프로세스로 실행되지만 Electron 앱은 여러 Chromium 프로세스 (렌더러, GPU, 유틸리티 등)를 띄우고 유휴 상태에서도 수백 MB의 RAM을 사용합니다.
- +네이티브한 보임새와 동작. Perry는 실제 플랫폼 위젯으로 그리기 때문에 OS 관습 (포커스 링, 접근성, IME, 스크롤 물리)을 자동으로 물려받습니다.
- +모바일, 워치, TV. 하나의 Perry 코드베이스가 iOS/iPadOS/Android/watchOS/tvOS/Wear OS로 컴파일됩니다. Electron은 데스크톱 전용입니다.
- +콜드 스타트. 네이티브 바이너리는 Chromium과 Node 시작 비용을 지불하지 않습니다.
- +타이트한 코드에서의 실제 CPU 성능. Perry는 (Electron이 사용하는) Node 대비 대부분의 커널에서 연산 마이크로벤치마크를 몇 배의 차이로 앞섭니다 (perry/benchmarks 참고).
Electron이 앞서는 점
- +성숙도. Electron은 10년 넘게 프로덕션에 있어 왔고 VS Code, Slack, Discord 등 수많은 앱을 검증된 도구와 함께 구동합니다.
- +웹 스택 재사용. 팀이 이미 웹 UI를 만들고 있다면, Electron은 그것을 다시 작성하지 않고 데스크톱 앱으로 배포하게 해줍니다.
- +플랫폼 간 UI 일관성을 쉽게 얻을 수 있습니다 — Chromium은 모든 OS에서 동일하게 그리며, 일부 제품에는 바로 그것이 필요한 특성입니다.
- +런타임에 작동하는 방대한 npm 라이브러리 생태계. Perry는 일부를 네이티브로 실행하고 옵트인 V8이 나머지를 처리합니다.
- +성숙한 패키징 도구 (electron-builder, electron-updater, 코드 서명 헬퍼)와 폭넓은 커뮤니티 지원.
- +DevTools, 핫 리로드, 유연한 CSS/HTML 반복 속도 같은 웹 네이티브 기능의 속도는 따라가기 어렵습니다.
Perry을 선택해야 할 때
작은 네이티브 바이너리, 낮은 메모리 사용량, 플랫폼별 네이티브한 보임새와 동작이 필요할 때, 또는 데스크톱 외에 모바일·워치·TV에도 배포되는 하나의 TypeScript 코드베이스가 필요할 때 Perry를 선택하세요.
Electron을 선택해야 할 때
이미 웹 UI가 있고 최소한의 재작성으로 그것을 데스크톱 앱으로 배포하고 싶을 때, 데스크톱에서 최대한의 크로스 플랫폼 UI 일관성이 필요할 때, 또는 런타임에 광범위한 순수 JS 라이브러리에 의존할 때 Electron을 선택하세요.
결론
Electron과 Perry는 크로스 플랫폼 스펙트럼의 양 끝에 있습니다. Electron은 웹 기술 재사용을 위해 바이너리 크기와 메모리를 양보하고, Perry는 네이티브 바이너리와 네이티브 UI를 위해 웹 스택을 양보합니다. Electron 앱의 설치 파일이 150 MB를 넘기거나 유휴 RAM이 0.5 GB를 넘는 것을 본 적이 있다면, Perry가 바로 그 문제에 대한 답입니다 — 그 대가는 다른, 네이티브 스타일의 UI 모델입니다.