C.W.K.
Stream
Lesson 02 of 07 · published

네 첫 #[tauri::command]

~13 min · tauri, command, rust, ipc

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"command는 그냥 스티커 붙은 Rust 함수야 — 그리고 명단에 올라간 이름이지. 명단을 빠뜨리면 사라져."

두 단계, 항상 둘 다

네이티브 힘을 프론트엔드에 노출하는 건 두 단계고, 두 번째 깜빡하는 게 제일 흔한 초보 버그야:

  1. 함수에 표시#[tauri::command] 어트리뷰트. Tauri 매크로 기계한테 이놈의 IPC 접착제를 생성하라고 알려줘.
  2. 등록 — Builder 안 tauri::generate_handler![]에. 이게 웹뷰가 대화하는 라우터에 command를 실제로 올리는 거야.

1단계만 하고 2단계 안 하면 'command greet not found' 같은 런타임 에러가 나 — 함수는 있는데 다리에 엮은 게 없는 거야. command가 '안 찾아질' 땐 핸들러 명단부터 확인해.

command가 받고 반환할 수 있는 것

command 파라미터는 평범한 타입(String, 숫자, 불리언), 네 serde struct, 또는 나중에 만날 특수 Tauri 타입(State, AppHandle, Window)이 될 수 있어. 반환 타입은 직렬화되는 거면 뭐든 — 실패 없는 command는 값, 실패 가능한 건 Result<T, E>. 특수 타입은 Tauri가 자동 주입하고, 넌 프론트엔드에서 데이터 인자만 넘겨.

고전적인 첫 command

모든 Tauri 프로젝트는 greet command로 시작하고, 한 번 쳐보면서 루프 전체를 느낄 가치가 있어: Rust 함수, 스티커, 명단의 이름, 그리고 웹 쪽의 invoke(다음 레슨). command 하나가 다리를 건너는 걸 느끼고 나면, 다른 모든 command는 화물만 다른 같은 모양이야.

Code

두 단계 배선 전체·rust
// src-tauri/src/lib.rs

// 1단계: 스티커. 이제 이 함수는 IPC command야.
#[tauri::command]
fn greet(name: String) -> String {
    format!("Hello, {name}! Welcome to native.")
}

pub fn run() {
    tauri::Builder::default()
        // 2단계: 명단. 이 줄 없으면 `greet`는 'not found'.
        .invoke_handler(tauri::generate_handler![greet])
        .run(tauri::generate_context!())
        .expect("error while running app");
}
여러 command 등록·rust
// command 여럿: 같은 매크로에 다 나열해.
#[tauri::command]
fn add(a: i64, b: i64) -> i64 { a + b }

#[tauri::command]
fn shout(text: String) -> String { text.to_uppercase() }

// ...
.invoke_handler(tauri::generate_handler![greet, add, shout])

External links

Exercise

스캐폴딩한 앱에 숫자 둘을 받아 합을 반환하는 add command를 더해. generate_handler![]에 등록해. 아직 프론트엔드에서 부르지 마 — 그냥 command가 있는 채로 tauri dev가 컴파일되게 해. 완전 새 command를 Rust 쪽에서 끝까지 엮을 수 있다는 걸 증명하는 거야.
Hint
시그니처: #[tauri::command] fn add(a: i64, b: i64) -> i64 { a + b }. 그다음 generate_handler![] 명단에 greet 옆에 add를 더해. 컴파일되면 1단계랑 2단계 둘 다 된 거야.

Progress

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

댓글 0

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

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