TRENDSHIFT DEEP-DIVE · 2026.05.21 · velopack/velopack

Velopack —
데스크탑 앱 자동 업데이트의 Squirrel 후속

Rust로 다시 짠 크로스플랫폼 인스톨러 + 자동 업데이트 프레임워크. 컴파일러 출력 폴더 하나로 — 설치자·델타 패키지·포터블 버전을 명령 하나로 만들어 준다. Squirrel 사용자에게 자동 마이그레이션 제공. C#·C++·JS·Rust SDK.

0먼저, "자동 업데이트 프레임워크"가 뭔가

데스크탑 앱 배포의 숨겨진 큰 문제.

웹앱은 사용자가 새로고침만 하면 최신 버전이다. 모바일 앱도 앱 스토어가 자동 업데이트해 준다. 그런데 데스크탑 앱은 — 사용자가 직접 새 버전을 다운로드하고 설치하지 않으면 영원히 옛 버전에 머문다. 이 문제를 푸는 게 자동 업데이트 프레임워크다.

2010년대에 표준이 됐던 게 Squirrel(특히 .NET 진영의 Squirrel.Windows, JS 진영의 Squirrel.Mac). Slack·Discord·VSCode 같은 유명 앱이 다 Squirrel 기반이었다. 하지만 — Squirrel.Windows는 유지보수 중단, 코드는 낡았고 Windows 한정, 보안 이슈도 있다.

Velopack은 그 "포스트 Squirrel" 자리를 노리는 후속 프로젝트다. Rust로 처음부터 다시 짜서 Windows·macOS·Linux 모두 커버, Squirrel 사용자는 자동 마이그레이션, "한 명령으로 설치자·업데이트·델타·포터블 다 생성".

용어
Installer (인스톨러, 설치자)
사용자 컴퓨터에 앱을 설치해 주는 작은 프로그램. .exe(Windows), .dmg/.pkg(macOS), .deb/.rpm/.AppImage(Linux) 같은 형식. 단순 압축 해제만 하는 게 아니라 — 단축키 생성, 레지스트리 등록, 권한 설정, 이전 버전 정리, 코드 서명 검증까지 처리.
용어
Delta Package (델타 패키지, 차분 패키지)
새 버전과 이전 버전 사이의 "바뀐 부분만" 모은 작은 패키지. 100MB짜리 앱의 새 버전이 5MB만 바뀌었으면 5MB만 받게 한다. 매번 전체 앱을 다운로드하는 것보다 훨씬 빠르고 대역폭 절약. bsdiff·zstd·xdelta 같은 차분 알고리즘으로 생성.
용어
Auto-Update (자동 업데이트)
앱이 자기 자신을 백그라운드에서 업데이트하는 기능. 1) 새 버전이 있는지 서버에 물어보기 → 2) 있으면 델타 패키지 다운로드 → 3) 다음 실행 시 새 버전으로 교체. 핵심 도전"실행 중인 앱이 자기 자신의 파일을 어떻게 덮어쓰나?". Velopack은 별도 업데이트 도우미 프로세스로 이를 해결.
용어
Squirrel (스쿼럴)
2010년대 Windows·macOS의 사실상 표준 데스크탑 업데이트 프레임워크. GitHub 출신. Slack·Discord·Atom·VS Code가 모두 Squirrel 기반. 하지만 Windows 버전(Squirrel.Windows)은 2020년대 들어 유지보수 중단. Velopack은 그 빈자리를 메우려는 프로젝트.

1한 줄 요약

전체 글의 핵심 메시지.

핵심 메시지

"설치자 만들기, 더 이상 복잡한 작업이 아니다."

InstallShield 시대엔 전용 IDE + 별도 스크립트 언어 + 며칠 작업이 필요했다. WiX는 그보다 낫지만 여전히 XML 지옥. NSIS는 자체 스크립팅. 모두 한 플랫폼만.

Velopack은 "한 명령(vpk pack)으로 — 컴파일러 출력 폴더 → 인스톨러·업데이트·델타 패키지·포터블 zip이 한 번에" 나온다. Windows·macOS·Linux 모두. 사용자 측에선 업데이트 적용 후 재시작이 2초 안. UAC 프롬프트도 없다.

2왜 지금 주목받는가

트렌딩 10위까지 올라온 맥락.

2024~2026년 데스크탑 앱 시장의 흐름이 두 가지로 정리된다 — 1) Electron·Tauri로 데스크탑 앱이 다시 늘어남, 2) 기존 인스톨러 도구들이 노후화. Velopack은 이 두 흐름의 교차점에 있다.

기존 도구의 함정 1
Squirrel.Windows 유지보수 중단

10년 넘게 표준이었던 도구가 사실상 죽었다. 새 Windows 11·macOS Sequoia에서 미묘한 버그들이 누적, 코드 서명 정책 변화 대응 안 됨. 큰 회사 앱들은 그래도 자체 fork로 버티지만, 새 프로젝트엔 부담스럽다.

Velopack의 해결
Squirrel 자동 마이그레이션

Squirrel 기반 앱은 Velopack으로 — 코드 한 줄 수정 없이 자동 마이그레이션. 사용자가 옛 버전에서 새 버전(Velopack 기반)으로 업데이트하면 자동으로 이행. Squirrel의 모든 앱이 Velopack으로 갈아탈 수 있는 경로 제공.

기존 도구의 함정 2
InstallShield·WiX의 진입장벽

전통적 인스톨러 도구는 — XML 천 줄, GUI 클릭 백 번, 별도 스크립트 언어 학습. "Hello World" 인스톨러 만드는 데 하루.

Velopack의 해결
vpk pack 한 명령

컴파일러 출력 폴더 위치만 넘기면 끝.

vpk pack --packId MyApp --packVersion 1.0.0 \ --packDir ./bin/Release/net8.0 \ --mainExe MyApp.exe

이 한 명령이 인스톨러·업데이트·델타·포터블을 다 만든다. "제로 설정(zero config)"이라는 표어가 헛말이 아니다.

기존 도구의 함정 3
"플랫폼마다 다른 도구"

Windows는 WiX/InstallShield, macOS는 .pkg/notarization, Linux는 deb/rpm/AppImage. 한 앱을 3OS에 배포하려면 3개의 다른 빌드 시스템.

Velopack의 해결
한 도구로 3OS

같은 vpk pack 명령이 OS별로 적절한 포맷을 생성. CI/CD 한 워크플로우로 3OS 배포 가능. 크로스플랫폼 데스크탑 앱(Electron/Tauri) 시대의 표준 인프라.

3기술 스택 전체 지도

Rust 코어 + 다언어 SDK.

3.1 코어 — Rust

스택 1

vpk CLI (C# / .NET dotnet tool)

패키지 생성·서명·업로드를 담당하는 명령줄 도구. "vpk pack" 한 줄로 인스톨러·업데이트·델타·포터블 zip을 동시에 생성. .NET global tool로 배포 — dotnet tool install -g vpk로 설치. (Rust로 작성된 것은 사용자 측 Update Runtime뿐임.)

스택 2

Update Runtime (Rust)

사용자 측 앱에 들어가는 작은 Rust 바이너리. 백그라운드에서 업데이트 체크 + 다운로드 + 적용. 실행 중인 앱이 자기 자신을 못 덮어쓰는 문제는 별도 도우미 프로세스로 해결 — 메인 앱이 종료된 직후 그 자리에 새 버전을 풀고 재시작.

3.2 SDK — 멀티 언어 클라이언트

SDK 1

C# / .NET (Velopack NuGet)

주력 사용자층. dotnet add package Velopack로 설치. WPF·WinForms·Avalonia·MAUI 등 .NET 데스크탑 앱이 첫 번째 타깃. Squirrel의 .NET 사용자가 그대로 옮겨올 수 있게 API 호환성 유지.

SDK 2

JavaScript / TypeScript

Electron·NW.js 같은 JS 기반 데스크탑 앱용. npm 패키지로 배포. UpdateManager 클래스로 업데이트 체크·다운로드·적용을 비동기 API로 제공.

SDK 3

C++ / Rust

네이티브 앱용. Velopack은 자체가 Rust로 작성됐기 때문에 Rust SDK는 단순 wrapper. C++ SDK는 C ABI를 노출. Qt·wxWidgets·네이티브 Win32 앱이 타깃.

SDK 4

Python

Python 기반 데스크탑 앱용. src/lib-python/에 위치하며 PyPI로 배포. Qt(PyQt·PySide)·WXPython 등 Python GUI 프레임워크 앱을 지원. samples/PythonQt·samples/PythonWXPython 예제 앱 포함.

3.3 배포 인프라

인프라 1

릴리스 서버 (Static File Hosting)

Velopack은 특별한 백엔드 없이 정적 파일 호스팅으로 동작. S3·Azure Blob·GitHub Releases·CDN 어디든. 클라이언트가 RELEASES 파일을 받아 어떤 버전이 있는지 확인 후, 해당 nupkg/delta 파일을 다운로드.

인프라 2

코드 서명 통합

Windows의 Authenticode(EV 인증서·OV 인증서), macOS의 notarization(Apple 공증). vpk pack 명령에 인증서·키 경로만 넘기면 자동 서명. CI/CD에서 secrets로 관리 → 빌드 시 자동 서명.

3.4 빌드 형식

4아키텍처 — 업데이트 사이클 깊이 보기

"새 버전이 나왔다"부터 "사용자가 새 버전을 쓰고 있다"까지.

4.1 전체 사이클 (ASCII)

개발자 측 서버 사용자 측 ───────── ──── ──────── 1. dotnet publish → bin/Release/... 2. vpk pack → installer.exe → app-1.2.0-full.nupkg → app-1.2.0-delta.nupkg ───→ S3/CDN 업로드 → RELEASES 파일 ◄──── 4. UpdateManager .CheckForUpdates() ────► RELEASES 파일 응답 ◄──── 5. 델타 패키지 요청 (5MB만) ────► delta.nupkg 응답 6. 다음 실행 시 업데이터 도우미 프로세스 띄움 7. 메인 앱 종료 8. 도우미가 파일 교체 9. 새 버전 실행 10. 사용자 화면 다시

핵심 — "앱이 자기 자신을 업데이트 못 한다"는 OS의 본질적 제약을 별도 도우미 프로세스로 해결. 메인 앱이 종료된 직후 도우미가 일하고, 끝나면 새 버전을 띄운다. 사용자에겐 그냥 "재시작 한 번"으로 보인다.

4.2 핵심 설계 패턴 5가지

패턴 1

Static File Hosting — 서버 없는 업데이트

다른 업데이트 도구들은 종종 자체 서버나 API를 요구하지만, Velopack은 RELEASES 파일 + nupkg 파일을 정적으로 호스팅하면 끝. S3·GitHub Releases·자기 nginx 어디든. "인프라 비용 0원으로 업데이트 시스템 구축"이 가능.

패턴 2

Delta with bsdiff — 다운로드 최소화

새 버전과 이전 버전 사이의 차분을 bsdiff·zstd로 압축. 100MB 앱의 5MB 변경이 1~3MB 델타로 떨어진다. 업데이트 다운로드를 평균 95% 줄임. 사용자 측은 전체 앱 다운로드 없이도 빠른 업데이트.

패턴 3

Update Helper Process — 자기 덮어쓰기 해결

Windows에서 실행 중인 .exe는 잠겨 있어 다른 프로세스가 못 쓴다. Velopack의 해결책 — UpdateExe라는 작은 도우미가 별도 프로세스로 떠서, 메인 앱 종료를 기다린 뒤 파일 교체 + 새 버전 실행. 사용자 시점에선 "재시작" 하나로 보임.

패턴 4

No-UAC Updates — 사용자별 설치

전통적 인스톨러는 Program Files 같은 시스템 폴더에 설치 → 매번 UAC 프롬프트. Velopack은 사용자 폴더(%LocalAppData%)에 설치 → 관리자 권한 불필요 → 업데이트도 UAC 없이 진행. 자동 업데이트 UX가 매끄러워지는 핵심.

패턴 5

VelopackApp.Build() — 앱 라이프사이클 통합

앱 시작 시 첫 줄에 VelopackApp.Build().Run()을 호출하면 — 업데이트 후 첫 실행 시 자동으로 후처리(단축키 갱신·이전 버전 마이그레이션) 처리, 일반 실행 시는 그냥 통과. "업데이트 후처리"를 앱이 자기 코드 안에서 처리 — 별도 인스톨러 스크립트 필요 없음.

5레포 구조 해부

Rust 코어 + 다언어 SDK 모노레포.

velopack/ ├── src/ ← 모노레포 코어 (모든 SDK + 런타임) │ ├── bins/ Rust Update Runtime (사용자 측 도우미 바이너리) │ ├── lib-rust/ Rust SDK │ ├── lib-csharp/ C# / .NET SDK (NuGet 패키지 본체) │ ├── lib-nodejs/ JS / TS SDK (Electron용) │ ├── lib-cpp/ C++ SDK │ ├── lib-python/ Python SDK (PyPI 배포) │ ├── vpk/ vpk CLI (C# dotnet global tool) │ ├── code-generator/ 다언어 코드 생성기 │ ├── l18n/ 지역화 리소스 │ └── mksquashfs/ AppImage용 squashfs 툴 ├── samples/ ← 예시 앱들 (WPF·Electron·Avalonia·Python 등) ├── test/ ← 통합 테스트 └── artwork/ ← 로고·아이콘
폴더 1

src/ — Rust 코어

vpk(개발자 도구) + update(사용자 측 도우미) 두 바이너리가 여기서 빌드된다. 플랫폼별 차이는 platforms/로 격리. 라이브러리 부분은 두 바이너리에서 공유.

폴더 2

src/lib-csharp/ — 주력 SDK

.NET 사용자가 가장 많이 만지는 부분. UpdateManager 클래스, VelopackApp.Build() 라이프사이클, SquirrelAwareApp 호환 레이어 등. 내부에서는 별도 프로세스(Process.Start)로 Rust update 바이너리(Update.exe)를 실행.

폴더 3

examples/ — 학습 자료의 보석

WPF·Avalonia·Electron·React·Vite·QT 등 다양한 프레임워크 예제 앱이 들어있다. 자기 스택에 맞는 예제를 fork해서 시작하면 5분 안에 첫 업데이트 사이클 동작. 학습 곡선이 가파르지 않은 핵심.

폴더 4

docs/ (docs.velopack.io)

Docusaurus 기반 문서 사이트. Quick Start, 코드 서명 가이드, CI/CD 통합, FAQ 등. 컴파일된 결과물이 docs.velopack.io. 문서 품질이 Squirrel과 비교 안 될 정도로 정돈돼 있다 — 채택 가속의 큰 요인.

6학습 포인트 — 이 레포에서 뭘 배울 수 있나

데스크탑 앱 배포의 표준 패턴.

교훈 1

"자기 자신 업데이트는 도우미 프로세스로"

실행 중인 프로세스가 자기 .exe를 못 덮어쓰는 OS 제약은 — 별도 도우미 프로세스로 푼다. 메인 앱이 종료된 직후 도우미가 파일을 교체하고 새 버전을 실행. 자기 데스크탑 도구를 만들 때도 같은 패턴.

교훈 2

"델타 패키지의 효과는 95% 절감"

100MB 앱의 5MB 변경 → 1~3MB 델타. 사용자 다운로드 시간·서버 대역폭 비용이 극적으로 줄어든다. bsdiff·zstd·xdelta 같은 차분 알고리즘 학습 가치 충분.

교훈 3

"%LocalAppData% 설치로 UAC 회피"

Program Files 설치는 매번 UAC 프롬프트. 사용자 폴더 설치는 권한 불필요. 자동 업데이트가 매끄러워지는 핵심 트릭. Chrome·Edge·Discord 등 현대 데스크탑 앱이 다 이 패턴.

교훈 4

"정적 호스팅으로 인프라 비용 0"

RELEASES 매니페스트 + nupkg 파일을 S3·CDN·GitHub Releases에 그냥 올려두면 끝. 전용 API 서버·DB 필요 없음. 작은 앱이 대규모로 성장해도 운영 비용이 거의 안 늘어남.

교훈 5

"코드 서명을 빌드 파이프라인에 통합"

Windows Authenticode + macOS notarization을 — vpk pack 명령의 옵션으로 처리. CI/CD에서 secrets로 인증서 관리. 별도 수동 서명 단계가 사라지는 게 큰 장점.

7시스템 요구사항 & 설치

개발자/사용자 양쪽.

개발자 1

vpk CLI 설치

.NET 환경이면 dotnet tool install -g vpk. 또는 GitHub Releases에서 OS별 prebuilt 바이너리. macOS는 brew install velopack/tap/vpk.

개발자 2

SDK 추가

.NET: dotnet add package Velopack. JS: npm install velopack. Rust: cargo add velopack. C++: 헤더·라이브러리 다운로드.

개발자 3

OS별 빌드 환경

macOS dmg 생성은 macOS 빌드 머신 필요(Apple notarization 때문). Windows exe는 Windows에서 빌드 추천(Authenticode 통합 편의). Linux는 어디서든 OK. CI/CD에선 보통 3개 OS 러너를 매트릭스로 사용.

사용자

OS 요구사항

Windows 10+, macOS 10.15+, Linux(주요 배포판). 사용자는 그냥 인스톨러 받아 실행하면 끝 — Velopack의 존재를 알 필요 없음.

8직접 해볼 수 있는 실습 과제

난이도 ★~★★★★★.

과제 1 · ★

examples/ 폴더의 샘플 앱 빌드

레포 clone → examples/CSharpWpf/ 같은 폴더로 가서 README 따라 빌드. vpk pack 한 번이 어떻게 인스톨러를 만들어 내는지 실제로 확인. 15분 작업.

과제 2 · ★★

자기 작은 앱에 Velopack 통합

WPF·Electron·Avalonia 등 자기가 자주 쓰는 데스크탑 프레임워크의 작은 앱을 — Velopack으로 패키징. v1.0 빌드 + 인스톨 → v1.1 빌드 → 첫 자동 업데이트 사이클 동작 확인.

과제 3 · ★★★

GitHub Releases를 호스팅으로 사용

자기 앱의 RELEASES + nupkg를 GitHub Releases에 자동 업로드(GitHub Actions). UpdateManager가 GitHub Releases URL을 가리키게 설정. 비용 0원의 자동 업데이트 인프라 완성.

과제 4 · ★★★★

코드 서명 + macOS notarization CI

GitHub Actions에 — Windows Authenticode 인증서, Apple Developer ID 인증서를 secrets로 등록. vpk pack 옵션으로 자동 서명 + notarization. "클릭 한 번에 3OS 서명된 인스톨러 배포" 파이프라인 완성.

과제 5 · ★★★★★

Squirrel 사용 앱을 Velopack으로 마이그레이션

실전 Squirrel 기반 앱(또는 그 fork)을 Velopack으로 옮긴다. 기존 사용자의 자동 마이그레이션이 작동하는지 검증. 대규모 사용자 베이스를 깨지 않고 인프라 교체가 핵심 도전.

9관련 기술 심화 학습 로드맵

4주 코스.

1주차

Velopack 일상 사용 + Quick Start 정독

docs.velopack.io의 Quick Start를 자기 스택으로 완주. 실제 인스톨러·업데이트 사이클을 한 번 돌려 봄.

2주차

다른 업데이트 도구 비교 학습

Squirrel(.Windows / .Mac), Sparkle(macOS), ClickOnce(.NET), Tauri Updater, Electron auto-updater 등 — 같은 문제를 푸는 다른 도구들과 비교. 각 도구의 디자인 트레이드오프를 이해.

3주차

코드 서명 깊이 학습

Windows Authenticode(EV vs OV 인증서)·macOS notarization 정독. 보안 정책 변화(SmartScreen·Gatekeeper)도. "코드 서명을 빌드 파이프라인에 자동화하기"는 모든 데스크탑 앱 개발자의 필수 기술.

4주차

델타 알고리즘 깊이 학습

bsdiff·xdelta·zstd 같은 차분/압축 알고리즘 원리. 자기 도메인의 다른 큰 파일(빌드 아티팩트·게임 에셋·ML 모델)에도 같은 패턴 적용 가능. "전체 다운로드 vs 델타 다운로드"의 비용·복잡도 트레이드오프.

10핵심 키워드 사전

짧은 정의 모음.

키워드
Squirrel (스쿼럴)
2010년대 표준 데스크탑 업데이트 프레임워크. Slack·Discord·VS Code가 사용. Velopack은 그 후속.
키워드
Authenticode
Windows의 코드 서명 시스템. .exe·.dll·.msi에 디지털 서명을 붙여 — 사용자에게 "검증된 발행자"임을 알린다. EV(Extended Validation) 인증서면 SmartScreen 경고가 즉시 사라짐.
키워드
Notarization (공증)
macOS의 코드 서명 후 절차. Apple 서버에 앱을 올려 malware 스캔을 받고 — 통과 시 Apple이 공증한다. 공증 안 된 앱은 Gatekeeper가 차단. macOS 데스크탑 앱 배포의 필수 단계.
키워드
bsdiff
바이너리 파일의 차분을 계산하는 알고리즘. 두 버전의 바이너리에서 변경된 부분만 추출 → 차분 패치 생성. Velopack의 델타 패키지 생성에 사용.
키워드
nupkg (NuGet Package)
NuGet 패키지 형식. 기본적으로 zip 파일 + 메타데이터(.nuspec). Velopack은 .NET 생태계 친화성을 위해 자기 패키지 형식을 nupkg로 통일.
키워드
RELEASES 파일
버전 목록과 파일 해시를 담은 매니페스트. 클라이언트가 가장 먼저 받아서 — "어떤 버전이 있고, 어디서 받을 수 있고, 무결성 해시는 무엇인지" 알아냄. 정적 호스팅의 핵심 인덱스.
키워드
UAC (User Account Control)
Windows의 관리자 권한 승격 프롬프트. 시스템 폴더 수정 시 발동. 자동 업데이트마다 이게 뜨면 UX가 망가지므로 — Velopack은 사용자 폴더 설치로 UAC를 피한다.
키워드
Self-update (자기 업데이트)
앱이 자기 자신을 업데이트하는 능력. 실행 중인 프로세스가 자기 파일을 못 덮어쓰는 OS 제약을 별도 도우미 프로세스로 푼다.

11참고 링크

레포·문서·관련 프로젝트.

실용 가이드

오늘 바로 시도해볼 만한 것들

  1. 15분 Quick Start 완주. docs.velopack.io의 자기 스택 Quick Start를 따라가면, 15분 안에 작동하는 인스톨러 + 업데이트 사이클을 손에 잡는다. 데모로 가장 빠른 학습.
  2. 자기 작은 도구를 데스크탑 앱화. 평소 CLI로 쓰던 작은 도구(파일 정리·이미지 변환 등)를 Avalonia·Electron·WPF로 GUI화 + Velopack으로 배포. 자동 업데이트 인프라까지 풀세트 완성.
  3. GitHub Releases를 호스팅으로 활용. 별도 비용 0원으로 자동 업데이트 인프라가 생긴다. 작은 오픈소스 데스크탑 도구에 특히 매력적.
  4. "%LocalAppData% 설치" 패턴 학습. 자기가 만드는 데스크탑 도구는 모두 사용자 폴더 설치로. UAC 회피 + 자동 업데이트 매끄러움이 자동으로 따라온다.
  5. 코드 서명 정책 알아두기. Windows EV 인증서 비용, macOS Developer Program 가격, SmartScreen·Gatekeeper 동작 — 데스크탑 앱 배포를 진지하게 고려한다면 한 번은 정리해 둘 가치가 있다.
원문 · velopack/velopack, 2026.05.21 · github.com/velopack/velopack · TrendShift 10위 기준