투더제이 코딩 클래스
한 번 팔고 계속 고친다
일렉트론 자동 업데이트 기능 탑재하기
프로그램 개발 4-3 · 실습편
학습 목표

이 강을 다 들으면

1자동 업데이트가 어떤 흐름으로 동작하는지 안다
2electron-updater + GitHub Releases로 구현한다
3새 버전을 배포하는 루틴을 만든다
1. 왜 필요한가

업데이트가 없으면 생기는 일

😵 수동 배포
  • 고객마다 새 파일 전달
  • 구버전 사용자 문의 폭주
  • 사이트가 바뀌면 전원 먹통
😎 자동 업데이트
  • 업로드 한 번 → 전 고객 반영
  • 버그 수정이 곧바로 도착
  • 상위 패키지 판매 포인트
2. 동작 흐름

앱이 스스로 새 버전을 찾는다

앱 실행
→
GitHub Releases
latest.yml 확인
→
새 버전 다운로드
→
재시작 시 설치
💡 비교 기준은 package.json의 version — 숫자가 올라가야 “새 버전”으로 인식.
3. 설치

패키지 하나 추가

npm install electron-updater
package.json — 어디에 올릴지 지정
"build": {
  "appId": "com.ttj.typingtool",
  "publish": { "provider": "github", "owner": "내깃허브ID", "repo": "typing-tool" },
  "win": { "target": "nsis" },
  "mac": { "target": ["dmg", "zip"] }
}

※ electron-updater는 실행 중에 쓰이므로 devDependencies가 아닌 dependencies에 설치

4. main.js

업데이트 확인 코드

const { app, BrowserWindow, dialog } = require('electron');
const { autoUpdater } = require('electron-updater');

app.whenReady().then(() => {
  createWindow();
  autoUpdater.checkForUpdatesAndNotify();   // 실행 시 확인
});

autoUpdater.on('update-downloaded', async () => {
  const { response } = await dialog.showMessageBox({
    type: 'info',
    buttons: ['지금 재시작', '나중에'],
    message: '새 버전이 준비되었습니다. 재시작할까요?',
  });
  if (response === 0) autoUpdater.quitAndInstall();
});
5. 배포

GitHub Releases에 올리기

1GitHub에서 토큰(GH_TOKEN) 발급 → 환경변수로 등록
2"version": "1.0.1" 처럼 버전 올리기
3npx electron-builder --publish always
4GitHub의 Draft 릴리스를 Publish → 고객 앱이 감지
🔒 토큰은 코드에 넣지 말 것 — 환경변수로만 사용.
6. 테스트

업데이트가 되는지 확인하는 법

1.0.0 설치
→
1.0.1 릴리스 공개
→
1.0.0 실행
→
재시작 알림 → 1.0.1
⚠ 주의

npm start(개발 모드)에서는 업데이트가 동작하지 않습니다. 반드시 설치한 앱으로 테스트.

7. OS별 차이

Windows는 바로, Mac은 서명 후

항목🪟 Windows (NSIS)🍎 Mac
코드 서명없어도 업데이트 동작필수 — 없으면 업데이트 실패
필요 비용없음Apple Developer Program (유료)
추가 작업—인증서 등록 + 공증(notarize)
업데이트 파일.exe + latest.yml.zip + latest-mac.yml
8. 운영 루틴

프로그램 판매자의 업데이트 루틴

1고객 문의 · 사이트 변경 감지
2수정 → 버전 올리기 → 릴리스 노트 작성
3배포 → 고객에게 업데이트 공지
정리 “자동 업데이트 = A/S 비용은 줄이고, 신뢰와 재구매는 늘리는 장치”
🎬 NEXT

다음 강 예고

4-4 — 코드 난독화로
프로그램 로직 보호하기