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

사이드카: 외부 바이너리 번들하기

~13 min · tauri, sidecar, shell, bundling

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"가끔 필요한 기능이 이미 커맨드라인 도구로 존재해. 사이드카가 그걸 앱 안에 싣고 구동하게 해줘."

사이드카가 뭐냐면

사이드카는 앱과 함께 번들해 런타임에 돌리는 외부 실행파일이야 — 영상엔 ffmpeg, 바이너리로 컴파일된 Python 스크립트, Go CLI, 뭐든. 사용자한테 의존성 설치를 요구하는 대신, 임베드하고, 네 Rust 코어가 필요할 때 띄워. Tauri 앱이 Rust로 재구현하기 비현실적인 무거운 네이티브 기능을 전달하는 방법이야.

선언하고 이름 짓기

바이너리를 tauri.conf.jsonbundle.externalBin 아래 나열하고 — 누구나 한 번 걸려 — 실제 파일은 플랫폼별로 맞는 바이너리가 실리게 target-triple 접미사를 달아야 해: ffmpeg-aarch64-apple-darwin, ffmpeg-x86_64-pc-windows-msvc.exe 등. Tauri가 빌드 타임에 맞는 걸 고르고 런타임엔 맨 이름으로 풀어. 접미사 까먹으면 번들러가 네 바이너리를 못 찾아.

실행은 shell을 거쳐 — 그러니 scope해

사이드카는 shell 플러그인의 Command.sidecar(...)로 실행해, 즉 같은 보안 규율을 받아: shell capability가 그 특정 사이드카를, 거기에 (이상적으론) 허용 인자로 scope해서 허락해야 해. 사이드카는 권한 있는 네이티브 실행이라, 어떤 셸 명령처럼 같은 주의로 대해 — 딱 이 바이너리만 부여하고 그 이상은 안 돼. (참고: 모든 앱이 사이드카가 필요하진 않아. Cinder는 예를 들어 바이너리 번들 대신 네트워크 서비스로 무거운 이미지 작업에 닿아 — 다른 필요엔 다른 아키텍처.)

Code

사이드카 선언 + 이름 짓기·json
// tauri.conf.json — 사이드카 바이너리 선언.
{
  "bundle": {
    "externalBin": ["binaries/my-tool"]
  }
}
// 디스크에선 파일이 target-triple 접미사를 달아야 해, 예:
//   src-tauri/binaries/my-tool-aarch64-apple-darwin
//   src-tauri/binaries/my-tool-x86_64-pc-windows-msvc.exe
shell 플러그인으로 사이드카 실행·tsx
import { Command } from "@tauri-apps/plugin-shell";

// 번들된 바이너리 실행 (런타임에 맨 이름으로 풀림).
const command = Command.sidecar("binaries/my-tool", ["--version"]);
const output = await command.execute();
console.log(output.stdout);

External links

Exercise

작은 CLI(컴파일된 'hello' 스크립트나 시스템 도구라도)를 골라 사이드카로 엮어: externalBin에 선언하고, 파일을 네 host의 target triple로 이름 짓고, 프론트엔드에서 Command.sidecar로 돌려. 출력이 돌아오는지 확인해. 그다음 딱 이 사이드카만 — 안전한 인자로 — 돌 수 있게 shell capability에 뭘 scope할지 한 문장으로 써.
Hint
rustc -vV로 triple 찾아('host:' 봐). 파일을 binaries/<name>-<triple>로 이름 지어. capability는 이름으로 이 사이드카만 허락해야 해; 프론트엔드가 임의 실행으로 못 바꾸게 인자를 제약하거나 검증해.

Progress

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

댓글 0

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

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