"기업 환경이나 비공개 앱은 GitHub Releases를 쓸 수 없는 경우가 있다" — 자체 서버나 S3로 업데이트를 제공하면 됩니다.


Generic Server (정적 파일 서버)

가장 간단한 방법입니다. 정적 파일 서버에 빌드 결과물을 업로드합니다.

YAML
# electron-builder.yml
publish:
  - provider: generic
    url: https://updates.example.com/releases

서버 디렉토리 구조

PLAINTEXT
https://updates.example.com/releases/
├── latest.yml
├── latest-mac.yml
├── latest-linux.yml
├── MyApp-1.2.0-win-x64.exe
├── MyApp-1.2.0-win-x64.exe.blockmap
├── MyApp-1.2.0-mac-x64.zip
└── MyApp-1.2.0-linux-x64.AppImage

latest.yml 형식

YAML
version: 1.2.0
files:
  - url: MyApp-1.2.0-win-x64.exe
    sha512: base64encodedHash==
    size: 85000000
path: MyApp-1.2.0-win-x64.exe
sha512: base64encodedHash==
releaseDate: '2027-01-02T00:00:00.000Z'

S3 호스팅

YAML
# electron-builder.yml
publish:
  - provider: s3
    bucket: my-electron-updates
    region: ap-northeast-2
    acl: public-read
BASH
# AWS 인증 설정
export AWS_ACCESS_KEY_ID=AKIA...
export AWS_SECRET_ACCESS_KEY=...

npx electron-builder --publish always

Nginx로 업데이트 서버 구축

NGINX
# nginx.conf
server {
    listen 443 ssl;
    server_name updates.example.com;

    ssl_certificate /etc/ssl/certs/cert.pem;
    ssl_certificate_key /etc/ssl/private/key.pem;

    root /var/www/electron-updates;

    location / {
        autoindex on;
        # CORS 헤더 (electron-updater가 필요)
        add_header Access-Control-Allow-Origin *;
        add_header Access-Control-Allow-Methods "GET, HEAD";
    }
}

업로드 스크립트

BASH
#!/bin/bash
# deploy-update.sh
VERSION=$1
REMOTE="user@updates.example.com:/var/www/electron-updates"

scp release/latest*.yml "$REMOTE/"
scp release/*.exe "$REMOTE/"
scp release/*.exe.blockmap "$REMOTE/"
scp release/*.dmg "$REMOTE/"
scp release/*.zip "$REMOTE/"
scp release/*.AppImage "$REMOTE/"

echo "업데이트 v${VERSION} 배포 완료"

업데이트 채널 분리

PLAINTEXT
https://updates.example.com/
├── stable/          ← 안정 채널
│   ├── latest.yml
│   └── MyApp-1.0.0-win.exe
├── beta/            ← 베타 채널
│   ├── latest.yml
│   └── MyApp-1.1.0-beta.1-win.exe
└── alpha/           ← 알파 채널
    └── ...
JAVASCRIPT
// main.js — 채널에 따라 업데이트 URL 변경
const channel = store.get('updateChannel', 'stable');
autoUpdater.setFeedURL({
  provider: 'generic',
  url: `https://updates.example.com/${channel}`,
});

면접 포인트 정리

  • Generic 서버: 정적 파일만 제공하면 되므로 가장 간단
  • S3: 확장성이 좋고 CDN과 연동 가능
  • latest.yml 파일이 업데이트 메타데이터의 핵심
  • 채널별 디렉토리 분리로 stable/beta/alpha 배포 가능
  • CORS 헤더 설정이 필요 (Access-Control-Allow-Origin)

Private Update Server를 다뤘으면, 다음은 모노레포 구성을 알아봅시다.

댓글 로딩 중...