본문 바로가기
C.W.K.
Stream
Lesson 02 of 06 · published

Tauri 프로젝트 해부학

~13 min · tauri, structure, project, files

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"한 번도 안 걸어본 집에선 길을 못 찾아. 트리를 한 번, 작정하고 걸어봐."

두 반쪽이 폴더로

create-tauri-app이 만든 프로젝트를 열면 2-프로세스 모델이 디렉터리로 펼쳐진 게 보여. 루트엔 프론트엔드가 살아. 웹 앱에서 기대할 그대로야 — index.html, 컴포넌트가 든 src/, package.json, vite.config.ts 같은 번들러 설정. 이 반쪽은 Tauri가 아니라 네 웹 툴체인이 빌드해.

src-tauri/ 안엔 네이티브 반쪽이 살고, 그 자체로 온전한 Rust 크레이트야. 제일 자주 만지게 될 파일은 이거:

  • Cargo.toml — Rust 의존성(tauri = "2"랑 플러그인을 여기 적어).
  • src/main.rsrun()만 부르는 작은 바이너리 진입점.
  • src/lib.rsrun()이 실제로 사는 곳. Builder, 플러그인, command, setup.
  • tauri.conf.json — 프론트엔드랑 코어를 엮는 설정(다음 레슨).
  • capabilities/ — 보안 허가(security 트랙).
  • icons/ — 플랫폼별 앱 아이콘.
  • build.rsgen/ — 자동으로 만들어지는 빌드 접착제랑 스키마. 손으로 고칠 일은 거의 없어.

main.rs랑 lib.rs를 쪼개놓은 이유

중복처럼 보여. main.rslib.rsrun()을 부르는 두 줄이 전부니까. 이유는 모바일이야. iOS랑 Android엔 네가 쥐는 main()이 없어 — OS가 네 라이브러리 안으로 직접 들어와. 그러니 진짜 로직을 전부 lib.rsrun()(모바일 진입점 어트리뷰트를 붙여둔)에 몰아두면, 같은 코드 한 줄기가 데스크톱 이랑 모바일을 같이 먹여살려. 오늘 데스크톱만 노려도 스캐폴드에 미리 박아둔 미래 대비인 셈이야.

Code

트리를 한 번 걸어봤어·text
my-app/
├─ index.html              # 프론트엔드 진입점 (웹 반쪽)
├─ package.json
├─ vite.config.ts
├─ src/                    # 네 React/Svelte/등 컴포넌트
│   ├─ main.tsx
│   └─ App.tsx
└─ src-tauri/              # 네이티브 반쪽 — Rust 크레이트
    ├─ Cargo.toml          # tauri = "2", 플러그인, 네 의존성
    ├─ tauri.conf.json     # 프론트엔드 ⇄ 코어 엮기
    ├─ build.rs            # 생성된 빌드 접착제
    ├─ capabilities/       # 보안 허가 (default.json)
    ├─ icons/              # 플랫폼별 앱 아이콘
    ├─ gen/                # 생성된 스키마 (손으로 고치지 마)
    └─ src/
        ├─ main.rs         # 2줄 → run() 호출
        └─ lib.rs          # run(): Builder, 플러그인, command

External links

Exercise

스캐폴딩한 앱에서 src-tauri/src/main.rs랑 src-tauri/src/lib.rs를 나란히 열어. main.rs가 run()만 부르는지 확인해. 그다음 lib.rs에서 command가 등록되는 줄(generate_handler! 매크로)을 찾아 — 비어 있을 수도 있어. bridge 트랙이 꽂힐 자리를 미리 찾아두는 거야.
Hint
generate_handler![]는 lib.rs(또는 run()) 안 Builder 체인에 있어. 갓 만든 스캐폴드라면 비어 있는 게 정상이야 — 거기가 네 첫 command가 꽂힐 소켓이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.