본문 바로가기
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)을 쓸 수 있어. 반환 타입은 직렬화만 되면 뭐든 괜찮아 — 실패할 일이 없으면 값을, 실패할 수 있으면 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

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

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