Wails로 데스크톱 앱 만들기 #1 Wails란 — Go로 만드는 가벼운 데스크톱 앱
고 기초 강좌에서 Go의 기본기를 익히고 나면 대부분의 실습은 웹 서버와 CLI로 이어집니다. 그런데 Go로 만들 수 있는 것이 서버만은 아닙니다. 팀에서 쓸 작은 유틸리티, 로컬 파일을 다루는 도구, 사내 대시보드 클라이언트처럼 창이 있는 데스크톱 앱이 필요한 순간이 있습니다. 이때 Go 코드와 웹 프론트엔드 기술을 그대로 들고 데스크톱으로 갈 수 있게 해 주는 프레임워크가 Wails입니다.
총 8편(본편 6편 + 심화 2편)입니다.
- #1 Wails란 — Go로 만드는 가벼운 데스크톱 앱 ← 이번 글
- #2 프로젝트 구조와 개발 루프 — wails dev와 바인딩
- #3 Go와 프론트엔드 연결 — 메서드 바인딩과 이벤트
- #4 시스템 통합 — 다이얼로그·메뉴·창 제어
- #5 실전 기능 — 설정 저장과 에러 처리
- #6 빌드와 배포 — 플랫폼별 패키징
- #7 프론트엔드 프레임워크 붙이기 — Svelte·Vue·React (심화)
- #8 디버깅 — 개발자 도구·로그·흔한 에러 (심화)
이번 글은 데스크톱 앱 프레임워크 지형에서 Wails가 어디에 해당하는지부터 확인하고, 설치와 환경 진단을 거쳐 첫 앱의 창을 띄우는 데까지 진행합니다.
데스크톱 앱 프레임워크 지형 #
웹 기술로 데스크톱 앱을 만드는 접근은 이미 주류가 됐습니다. VS Code, Slack, Discord가 모두 이 방식입니다. 대표 선택지 세 가지를 비교하면 Wails의 위치가 분명해집니다.
| 구분 | Electron | Tauri | Wails |
|---|---|---|---|
| 백엔드 언어 | Node.js | Rust | Go |
| 렌더링 | Chromium을 앱에 번들 | OS 내장 WebView | OS 내장 WebView |
| 배포물 크기 | 수십〜수백 MB | 수 MB | 수 MB |
| 메모리 사용 | 큼 (Chromium 프로세스) | 작음 | 작음 |
| 생태계 성숙도 | 가장 큼 | 큼 | 성장 중 |
Electron은 Chromium 브라우저 전체를 앱에 담아 배포합니다. 어느 OS에서든 같은 렌더링을 보장하는 대신, 간단한 메모 앱도 설치 파일이 100MB를 넘고 메모리를 크게 차지합니다. Tauri와 Wails는 반대 접근입니다. OS에 이미 들어 있는 WebView(Windows의 WebView2, macOS의 WKWebView, Linux의 WebKitGTK)를 빌려 쓰므로 배포물이 수 MB 수준으로 줄어듭니다.
Tauri와 Wails의 차이는 백엔드 언어입니다. Tauri는 Rust, Wails는 Go입니다. 이미 Go를 쓰고 있다면 고루틴, 표준 라이브러리, 기존 Go 코드를 그대로 데스크톱 앱의 백엔드로 가져올 수 있다는 점이 Wails를 선택하는 이유가 됩니다.
Wails의 동작 구조 #
Wails 앱은 두 층으로 구성됩니다.
┌─────────────── 네이티브 창 ───────────────┐
│ │
│ 웹 프론트엔드 (HTML/CSS/JS, WebView) │
│ 화면 그리기, 사용자 입력 │
│ │
│ ▲ 호출 │ 결과/이벤트 │
│ │ ▼ │
│ Go 백엔드 (단일 바이너리) │
│ 파일, 네트워크, 비즈니스 로직 │
└────────────────────────────────────────────┘UI는 웹 기술로 그리고, 파일 접근이나 무거운 연산처럼 브라우저가 못 하는 일은 Go가 맡습니다. 두 층은 Wails가 자동 생성하는 바인딩으로 연결되어, 프론트엔드의 자바스크립트에서 Go 메서드를 함수 호출하듯 부를 수 있습니다. 이 연결이 시리즈 전체를 관통하는 핵심 개념이고, #3에서 자세히 다룹니다.
빌드 결과물은 프론트엔드 산출물까지 내장한 단일 실행 파일입니다. 별도 런타임 설치 없이 파일 하나를 전달하면 실행됩니다.
v2와 v3 — 이 시리즈의 기준 #
Wails는 현재 v2가 안정판이고, 차기 버전 v3는 2026년 7월 기준 알파 단계입니다. v3는 다중 창 지원과 새 API 구조를 예고하며 개발이 활발하지만, 정식 릴리스 일정은 아직 공지되지 않았습니다. 이 시리즈는 안정판 v2를 기준으로 진행하고, v3에서 달라지는 지점은 마지막 편에서 전망으로 정리하겠습니다.
설치와 진단 #
Go 1.21 이상과 npm이 설치되어 있어야 합니다. Wails CLI는 go install 한 줄로 설치됩니다.
go install github.com/wailsapp/wails/v2/cmd/wails@latest데스크톱 앱은 OS별 의존성이 있으므로, 설치 직후 진단 명령으로 환경을 확인하는 것이 좋습니다.
$ wails doctor
Wails CLI v2.10.1
...
# Diagnosis
Your system is ready for Wails development!wails doctor는 Go, npm, 플랫폼 의존성의 설치 상태를 표로 보여 주고 빠진 항목의 설치 방법까지 안내합니다. 마지막 줄에 ready 메시지가 나오면 준비가 끝난 것입니다.
webkit2gtk 계열)를 설치해야 하며, 구체적인 패키지명은 wails doctor가 알려 줍니다.첫 앱 실행 #
이제 프로젝트를 만들고 창을 띄웁니다. wails init에 프로젝트 이름과 템플릿을 지정합니다.
wails init -n hello-wails -t vanilla
cd hello-wails
wails dev첫 실행은 프론트엔드 의존성 설치와 빌드 때문에 시간이 조금 걸립니다. 완료되면 네이티브 창이 열리고, 입력란에 이름을 넣으면 인사말이 표시되는 기본 앱이 나타납니다. 겉보기에는 평범한 웹 페이지지만, 인사말을 만들어 돌려주는 것은 브라우저의 자바스크립트가 아니라 뒤에서 실행 중인 Go 코드입니다.
-t vanilla는 프레임워크 없는 순수 HTML/JS 템플릿을 지정합니다. React, Vue, Svelte 템플릿도 준비되어 있는데, 템플릿 선택지와 프로젝트 구조는 다음 글에서 하나씩 열어 봅니다.
마무리 #
이번 글의 핵심은 세 가지입니다.
- Wails는 Go 백엔드와 웹 프론트엔드를 하나의 네이티브 창으로 묶는 데스크톱 프레임워크입니다.
- Electron과 달리 OS 내장 WebView를 사용하므로 배포물이 수 MB 수준의 단일 실행 파일로 나옵니다.
- 안정판은 v2이고 v3는 알파 단계이므로, 이 시리즈는 v2를 기준으로 진행합니다.
다음 글인 “Wails로 데스크톱 앱 만들기 #2 프로젝트 구조와 개발 루프 — wails dev와 바인딩"에서는 wails init이 만들어 준 파일들을 하나씩 열어 각각의 역할을 확인하고, 핫 리로드 개발 루프와 바인딩의 첫 동작을 살펴보겠습니다.