"플러그인은 세 곳에 존재하기 전엔 설치된 게 아냐. 셋 중 둘은 조용한 실패 함정이야."
세 표면, 매번
Tauri 플러그인을 올바르게 엮으면 항상 세 파일을 건드려. 체크리스트로 쥐어:
- Cargo.toml — Rust 크레이트 의존성(
tauri-plugin-store = "2"). - lib.rs — 빌더 체인에 등록(
.plugin(tauri_plugin_store::Builder::new().build())). - capabilities — permission 부여(
"store:default").
그리고 보통 더 가벼운 네 번째: 프론트엔드에서 부르면 JS 패키지(@tauri-apps/plugin-store). Cargo 의존성 빠지면 컴파일 안 돼(시끄러움, 쉬움). 빌더 빠지면 플러그인이 아무것도 안 해. capability 빠지면 프론트엔드 command가 permission 에러로 실패해. 셋 중 둘 상태는 조용히 실패해서, 이 규칙을 외울 가치가 있어.
제거도 세 표면이야
규칙은 양방향이야. 플러그인을 제거할 때 세 표면 다 되돌려야 해, 안 그럼 죽은 무게를 남겨: 빌드를 부풀리는 안 쓰는 크레이트, 쓸모없는 걸 등록하는 빌더 줄, 사라진 플러그인의 permission을 부여하는 capability. Cinder가 정확히 이걸 learning으로 기록했어 — 플러그인 빼기는 Cargo 의존성, lib.rs 빌더, 그리고 capabilities 파일을 발맞춰 편집하는 거였어. 추가랑 제거를 대칭의 세 표면 작업으로 대해.
왜 이 설계냐
의식처럼 느껴질 수 있지만, 각 표면이 기본 거부 모델을 섬겨: Cargo 의존성이 코드를 가져오고, 빌더가 코어에서 그걸 활성화하고, capability가 '그래, 프론트엔드가 이걸 써도 돼'라고 말하는 명시적 부여야. 그 분리가 플러그인이 네 바이너리에 있되 네가 opt-in 하기 전엔 웹뷰에서 못 닿게 해 — 구조에 의한 보안, 세 편집으로 지불.