본문 바로가기
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 코어가 필요할 때 띄우는 거지. Rust로 다시 만들기엔 비현실적인 무거운 네이티브 기능을 Tauri 앱이 전달하는 방법이야.

적어두고 이름 붙이기

바이너리를 tauri.conf.jsonbundle.externalBin 아래 적어. 그리고 여기서 다들 한 번 걸리는데 — 실제 파일 이름엔 target-triple 접미사를 붙여야 플랫폼마다 맞는 바이너리가 실려. ffmpeg-aarch64-apple-darwin, ffmpeg-x86_64-pc-windows-msvc.exe 이런 식으로. Tauri가 빌드할 때 맞는 걸 골라주고, 돌아갈 땐 접미사 없는 이름으로 찾아. 접미사를 빼먹으면 번들러가 네 바이너리를 못 찾아.

실행은 shell을 거쳐 — 그러니 좁혀

사이드카는 shell 플러그인의 Command.sidecar(...)로 실행해. 그러니까 같은 보안 규율이 그대로 걸려. shell capability가 그 사이드카 하나를, 되도록 허용할 인자까지 지정해서 허락해야 해. 사이드카는 권한을 쥔 네이티브 실행이니까 다른 셸 명령이랑 똑같이 조심해서 다뤄 — 이 바이너리 하나만 허락하고 그 이상은 안 돼. (참고로 모든 앱이 사이드카를 필요로 하진 않아. 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를 어떻게 좁힐지 한 문장으로 써.
Hint
rustc -vV로 triple을 찾아('host:'를 봐). 파일 이름은 binaries/<name>-<triple> 꼴로. capability는 이름으로 이 사이드카만 허락해야 하고, 프론트엔드가 아무거나 실행하는 걸로 못 바꾸게 인자를 제한하거나 검사해.

Progress

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

댓글 0

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

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