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

plugin-updater로 자동 업데이트

~14 min · tauri, updater, security, distribution

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"업데이트 채널은 사용자 기계로 곧장 들어가는 파이프야. 거기 흐르는 걸 서명해, 안 그럼 공격자의 꿈을 지은 거야."

updater가 하는 일

updater 플러그인은 출시된 앱이 새 버전을 스스로 확인하고, 다운로드하고, 설치하게 해 — 스토어 들를 필요 없이. 앱이 네가 호스팅하는 엔드포인트를 주기적으로 확인하고, 버전을 비교하고, 더 새 게 있으면 다운로드해 적용해. 직접 배포하는 데스크톱 앱엔, 모든 사용자한테 수동 재다운로드를 요구하지 않고 수정을 미는 방법이야.

서명이 신뢰 앵커야

여기가 틀리면 안 되는 부분이야. 업데이트는 사용자 기계에서 곧 돌릴 바이너리니까, 암호학적으로 서명돼야 해. tauri signer generate로 키페어를 생성해: 공개 키는 tauri.conf.json에 가고(앱에 박혀), 비공개 키는 릴리스 때 각 업데이트 번들에 서명해. 설치 전에 앱이 번들 서명을 자기 내장 공개 키로 검증해. 즉 공격자가 네 업데이트 서버를 장악해도 악성코드를 못 밀어 — 네 비공개 키가 없으니 서명 확인이 실패해. 신뢰는 서명에 있지 URL에 절대 없어.

매니페스트와 흐름

네 업데이트 엔드포인트가 최신 버전, 플랫폼별 다운로드 URL, 서명을 묘사하는 작은 JSON 매니페스트를 서빙해. 플러그인이 그걸 가져와, 업데이트가 적용되는지 정하고, (맞는 capability로) 다운로드해 설치해. UX는 네가 정해: 조용한 백그라운드 업데이트, 또는 프롬프트하고 확인. 어느 쪽이든, 그 비공개 서명 키를 왕국의 열쇠처럼 지켜 — 정확히 그거야.

Code

업데이트 서명 키페어 생성·bash
# updater 키페어 생성 (한 번; 비공개 키를 안전하게 보관).
npm run tauri signer generate -- -w ~/.tauri/myapp.key
# 공개 키 출력 → tauri.conf.json updater.pubkey에 붙여넣기
# 비공개 키(랑 비밀번호)는 릴리스 때 업데이트 번들에 서명.
(검증된) 업데이트 확인하고 적용하기·tsx
import { check } from "@tauri-apps/plugin-updater";
import { relaunch } from "@tauri-apps/plugin-process";

const update = await check();   // 네 매니페스트 엔드포인트를 침
if (update) {
  // 이게 resolve되기 전에 플러그인이 서명을 검증해.
  await update.downloadAndInstall();
  await relaunch();             // 새 버전으로 재시작
}

External links

Exercise

앱의 전체 업데이트 신뢰 체인을 네 말로 묘사해: 키페어가 어디서 오는지, 어느 키가 앱에 가고 어느 게 릴리스에 서명하는지, 매니페스트가 뭘 담는지, 그리고 뚫린 업데이트 서버가 왜 여전히 악성코드를 못 미는 정확한 이유. 그다음 비공개 키를 어디 저장할지 말해. URL이 아니라 서명이 자동 업데이트를 지키는 이유를 이해했다는 걸 증명하는 거야.
Hint
tauri signer generate → 공개 키 tauri.conf에(앱에 실림), 비공개 키가 번들에 서명. 매니페스트는 버전 + 플랫폼별 URL + 서명. 탈취된 서버는 비공개 키 없이 서명 위조 못 해서, 앱이 나쁜 번들을 거부해. 비공개 키 → 보호된 CI 시크릿 + 안전 백업.

Progress

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

댓글 0

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

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