"한 번도 안 걸어본 집에선 길을 못 찾아. 트리를 한 번, 작정하고 걸어봐."
두 반쪽이 폴더로
create-tauri-app이 만든 프로젝트를 열면 2-프로세스 모델이 디렉터리로 펼쳐진 게 보여. 루트엔 프론트엔드가 살아. 웹 앱에서 기대할 그대로야 — index.html, 컴포넌트가 든 src/, package.json, vite.config.ts 같은 번들러 설정. 이 반쪽은 Tauri가 아니라 네 웹 툴체인이 빌드해.
src-tauri/ 안엔 네이티브 반쪽이 살고, 그 자체로 온전한 Rust 크레이트야. 제일 자주 만지게 될 파일은 이거:
Cargo.toml— Rust 의존성(tauri = "2"랑 플러그인을 여기 적어).src/main.rs—run()만 부르는 작은 바이너리 진입점.src/lib.rs—run()이 실제로 사는 곳. Builder, 플러그인, command, setup.tauri.conf.json— 프론트엔드랑 코어를 엮는 설정(다음 레슨).capabilities/— 보안 허가(security트랙).icons/— 플랫폼별 앱 아이콘.build.rs랑gen/— 자동으로 만들어지는 빌드 접착제랑 스키마. 손으로 고칠 일은 거의 없어.
main.rs랑 lib.rs를 쪼개놓은 이유
중복처럼 보여. main.rs는 lib.rs의 run()을 부르는 두 줄이 전부니까. 이유는 모바일이야. iOS랑 Android엔 네가 쥐는 main()이 없어 — OS가 네 라이브러리 안으로 직접 들어와. 그러니 진짜 로직을 전부 lib.rs의 run()(모바일 진입점 어트리뷰트를 붙여둔)에 몰아두면, 같은 코드 한 줄기가 데스크톱 이랑 모바일을 같이 먹여살려. 오늘 데스크톱만 노려도 스캐폴드에 미리 박아둔 미래 대비인 셈이야.