"command는 스티커 하나 붙인 Rust 함수야 — 그리고 명단에 올라간 이름이고. 명단을 빠뜨리면 통째로 사라져."
두 단계, 항상 둘 다
네이티브 힘을 프론트엔드에 열어주는 건 두 단계인데, 두 번째를 깜빡하는 게 제일 흔한 초보 버그야:
- 함수에 표시하기 —
#[tauri::command]어트리뷰트. Tauri 매크로한테 이놈이 쓸 IPC 접착제를 만들어달라고 알려주는 거야. - 등록하기 — 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는 전부 싣는 짐만 다른 같은 모양이야.