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.rs — 작은 바이너리 진입점(run() 호출).
  • src/lib.rsrun()이 실제로 사는 곳: Builder, 플러그인, command, setup.
  • tauri.conf.json — 프론트엔드와 코어를 엮는 설정(다음 레슨).
  • capabilities/ — 보안 허가(security 트랙).
  • icons/ — 모든 플랫폼용 앱 아이콘.
  • build.rs + gen/ — 생성된 빌드 접착제랑 스키마. 손으로 거의 안 고쳐.

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

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

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