Tauri + React 로 1인 창업가용 데스크톱 AI 비서를 7일 만에 만든 일지 (2026)

1인 창업가가 자기 도구를 직접 만들면 세 가지가 좋습니다. 외부 SaaS 비용이 없고, 내 워크플로에 정확히 맞춰지고, 만드는 과정에서 도메인 이해가 깊어집니다. 문제는 "혼자서 데스크톱 앱을 처음부터 만들 수 있나?" 라는 두려움입니다. 2026년 3월 첫 주에 그 두려움을 깨려고 7일 sprint 를 잡았습니다. Tauri + React + Rust 조합으로 1인 창업가용 AI 비서 데스크톱 앱의 첫 동작 가능 버전을 만들었고, 그 7일을 그대로 정리합니다.
왜 Tauri + React 인가
데스크톱 앱 만들 때 흔한 선택지는 Electron, Tauri, Flutter Desktop 입니다. 내 기준 결정 매트릭스:
| 기준 | Electron | Tauri | Flutter Desktop |
|---|---|---|---|
| 설치 파일 크기 | 120MB+ | 3~10MB | 20MB+ |
| 메모리 사용 | 200MB+ | 40~80MB | 100MB+ |
| UI 라이브러리 | 웹 기반 (React 등) | 웹 기반 | Flutter 전용 |
| 1인 학습 곡선 | 낮음 | 중간 (Rust) | 중간 (Dart) |
Tauri 를 고른 이유는 두 가지입니다. 설치 파일이 작아서 사용자 첫인상이 좋고, Rust 백엔드를 끼워두면 Python 파이프라인 호출이나 SQLite 직접 접근이 깔끔합니다. React 는 이미 익숙해서 학습 시간 0.
Day 1 — 환경 세팅 + 첫 창 띄우기 (4시간)
Rust toolchain 설치, Node.js 20 설치, Tauri CLI 설치, 첫 hello-world 창 띄우기. Windows 11 환경에서 진행했습니다. 막힘 없이 4시간 안에 끝났습니다. Claude Code CLI 가 환경 변수, 권한 오류, MSVC 빌드 도구 누락 같은 자잘한 함정을 미리 잡아줘서 시간이 절약됐습니다.

Day 2 — React 19 + 라우팅 + 사이드바 레이아웃 (5시간)
React 19 + TypeScript + Vite. 라우터는 React Router v7. 사이드바 - 콘텐츠 - 헤더 3분할 레이아웃을 직접 짰습니다. 디자인 시스템은 따로 안 쓰고 Tailwind 4 + 직접 정한 컬러 토큰 5종으로 시작. 시간 압박 있을 때 Material UI 같은 풀스택 라이브러리는 오히려 무겁습니다.
Day 3 — Rust 백엔드 명령 + Tauri invoke (6시간)
Tauri 의 핵심 패턴: 프론트엔드에서 invoke('command_name', args) 호출 → Rust 함수 실행 → 결과 반환. 첫 commands 5개 (db_init, list_projects, save_note, ai_call, settings_get) 를 짰습니다. 여기서 ts-rs crate 가 큰 도움이 됐습니다 — Rust struct 를 TypeScript 인터페이스로 자동 export 해서 타입 안전성 확보.
Day 4 — SQLite 통합 + 첫 진짜 데이터 흐름 (6시간)
rusqlite 로 로컬 SQLite DB. 마이그레이션은 sqlx-migrate 대신 단순 SQL 파일 + run_pending_migrations 함수 직접 작성. 1인 프로젝트 초기엔 이게 더 빠릅니다. 첫 진짜 데이터 흐름 (프로젝트 생성 → 메모 저장 → 목록 조회) 이 동작했습니다.
Day 5 — Anthropic SDK 통합 + 첫 AI 응답 (5시간)
Rust 측 reqwest 로 Anthropic API 직접 호출. 모델은 Sonnet 4.6. 첫 prompt 결과가 React UI 로 흘러왔습니다. 이때 비용 모니터링도 같이 짰습니다 — 매 호출 토큰 수를 SQLite 에 기록해서 일일 사용량 대시보드 표시. 이게 나중에 결제 청구서랑 매칭해서 실측 데이터 만드는 기반이 됐습니다.

Day 6 — 디자인 정돈 + 첫 사용 시나리오 1개 완성 (7시간)
레이아웃을 Pretendard 800 헤더 + 0.5px border 스타일로 정돈. 첫 진짜 사용 시나리오 — "오늘 할 일 1개 → AI 가 30분 단위 행동 계획 생성" 을 end-to-end 동작시켰습니다. 이게 동작하니 앱이 진짜 도구로 보이기 시작했습니다.

Day 7 — 빌드·배포·자체 dogfood (4시간)
Tauri build 로 Windows .msi 파일 생성, 내 PC 에 설치, 다음날 아침부터 내 도구로 사용 시작. 여기서 첫 버그 5개를 직접 사용하면서 잡았습니다 (dogfood). 외부 사용자 풀기 전에 직접 매일 쓰는 게 가장 강력한 QA 입니다.
실측 — 7일 동안 들어간 시간과 산출물
- 총 작업 시간: 약 37시간 (일 평균 5.3시간)
- 총 코드 라인: Rust 1,400줄 + TypeScript 2,100줄 = 3,500줄
- SQLite 테이블: 6개
- Tauri commands: 11개
- Claude Code 사용 시간: 약 26시간 (총 작업 시간의 70%)
- 외부 SaaS 비용: 0원 (Claude Max 구독 외 추가 결제 없음)
Claude Code 의존도가 높았던 이유는 Rust 가 두 번째 언어라 syntax 검색·트레이트 매칭·error 메시지 해석에 시간을 안 쓰고 싶었기 때문입니다. AI 가 1차 답을 주고, 직접 검증하는 식.

내가 적용한 메모
7일 sprint 가 가능했던 가장 큰 이유는 "스코프를 칼같이 자른 것" 입니다. Day 1 시작 전에 "이 7일에 절대 안 할 것 7개" 를 적었습니다. 다국어 지원, 다크 모드 자동, 클라우드 동기화, 자체 인증, 플러그인 시스템, 모바일 앱, 설치 마법사. 7개 다 미루니 본질에 집중할 수 있었습니다.
추가로 — 7일째 dogfood 시작이 결정적입니다. 만들기만 하고 안 쓰면 그 다음 sprint 의 우선순위를 못 잡습니다. 직접 매일 쓰면 어디가 답답한지 몸으로 압니다. 다음 sprint 의 백로그가 자연스럽게 잡힙니다.
다음 글에서는 이 7일 sprint 끝에 시작한 두 번째 주 — 자동 글 생성 파이프라인 통합 — 을 정리합니다. 도구 만들기에서 도구로 일하기 로 넘어가는 단계입니다.
본 글의 시간 데이터는 git commit 시간 + 작업 로그 (2026년 3월 1일 ~ 3월 7일) 기준입니다.
Tauri 1.x vs 2.x — 1인 개발자 선택 가이드 (2026년 4월)
| 항목 | Tauri 1.x | Tauri 2.x |
|---|---|---|
| 안정성 | 매우 안정 (4년 이상 운영) | 2.0 정식 릴리스 (2024-10), 2.5+ 안정화 진행 |
| 모바일 (iOS/Android) | 미지원 | 지원 (베타 → 정식) |
| 플러그인 생태계 | 풍부 | 1.x 호환성 일부 깨짐, 마이그레이션 필요 |
| 학습 자료 | 풍부 (StackOverflow, 블로그) | 공식 문서만 충실, 커뮤니티 답변 적음 |
| 1인 개발 권장 | 안정 우선이면 적합 | 모바일 동시 빌드 필요 시 적합 |
데스크톱만 필요해서 1.x 로 시작했고, 2.x 로 업그레이드는 모바일 확장 시점에 검토할 계획입니다. 1인 개발 초기에는 학습 곡선 + 문제 해결 자료 풍부함이 더 중요합니다.
Day 8~14 — 7일 sprint 후 발견한 함정 3가지
7일 sprint 가 끝났다고 해서 모든 게 매끄러운 건 아닙니다. 다음 주 (Day 8~14) 에 발견한 진짜 함정 3가지를 정리합니다.
함정 1 — Tauri builder.run() 의 cleanup 처리 누락
Day 8 에 내 PC 가 갑자기 느려져서 작업 관리자 보니 Tauri 앱 인스턴스가 5개 떠있었습니다. 개발 중 자주 빌드·재실행했는데 종료가 깨끗하지 않았던 것. 해결: main.rs 에 graceful shutdown handler 추가, OnEvent::ExitRequested 핸들링.
함정 2 — invoke 호출 시 Rust panic 이 프론트로 안 전달됨
Day 10. Rust 함수에서 .unwrap() 이 panic 나면 프론트엔드가 무한 로딩에 갇혔습니다. 에러 메시지도 안 뜸. 해결: 모든 invoke 핸들러에서 Result 반환 + thiserror 로 명시적 에러 타입 정의. unwrap() 사용 금지를 내 규칙으로 만듦.
함정 3 — SQLite 동시 쓰기 락 충돌
Day 12. AI 응답 저장 + 사용자 메모 동시 저장 시 "database is locked" 에러. 해결: rusqlite 의 connection pool 패턴 적용 (r2d2) 또는 단일 mutex 로 직렬화. 1인 데스크톱 앱은 mutex 로 충분.
이 3개는 첫 7일 sprint 안에선 발견 못 했을 함정입니다. dogfood (직접 매일 쓰기) 가 7일째에 시작된 게 결정적이었습니다.
FAQ — Tauri 1인 개발 자주 묻는 질문 6개
Q1. Tauri 학습에 Rust 모르면 안 되나?
Rust 기초 (소유권, Result, Option) 만 이해하면 시작 가능. 깊은 트레이트 시스템·라이프타임은 나중에. Rust 책 1권 + Tauri 공식 튜토리얼 8시간으로 첫 sprint 시작했습니다.
Q2. Tauri 앱을 macOS 에서 빌드하려면 Mac 이 필요한가?
네. macOS .app 빌드는 Mac 환경 필수 (Apple 코드 서명 때문). 1인 개발자 + 윈도우 사용자라면 GitHub Actions 의 macOS runner 로 우회 가능 (월 무료 2,000분).
Q3. Tauri 앱 자동 업데이트 어떻게 구현?
Tauri Updater plugin 사용. 내 서버에 manifest JSON + 새 버전 binary 업로드 → Tauri 가 주기적으로 polling → 사용자 동의 후 업데이트 다운로드+설치. 1인 개발 초기엔 GitHub Releases + Tauri Updater 조합이 가장 빠름.
Q4. 코드 서명 (Windows EV / macOS Apple ID) 비용?
Windows EV 코드 서명 인증서 연 $300~500. macOS Apple Developer Program 연 $99. 무서명 빌드도 가능하지만 사용자 PC 에서 "알 수 없는 게시자" 경고 뜸. alpha 단계엔 무서명, beta 부터 서명 도입.
Q5. Tauri vs Electron 메모리 차이가 정말 그렇게 큰가?
네. 내 측정: 내 Tauri 앱 (창 1개, 데이터 100건) 메모리 약 65MB. 동일 기능을 Electron 으로 짠 prototype 약 220MB. 3.4배 차이. 사용자 PC 에 띄워두는 백그라운드 도구라면 차이가 체감됩니다.
Q6. Tauri 앱 출시 후 사용자 피드백 받는 채널 추천?
Tauri 자체에 telemetry 안 박음 (사용자 신뢰 위해). 운영 중인 채널: Discord 서버 (alpha 사용자 직접 소통) + GitHub Issues (버그 리포트) + 블로그 댓글 (피처 제안). 사용량 통계는 자체 서버에 opt-in 으로만 수집.
참고 자료
- Tauri 공식 문서: tauri.app
- Tauri 2.0 마이그레이션 가이드: tauri.app/start/migrate
- Tauri Discord (커뮤니티 Q&A 빠름): tauri.app 의 Community 링크
- Rust 책 무료: doc.rust-lang.org/book