"100MB 앱에서 코드 1줄 바꿨는데 전체를 다시 다운로드한다?" — 차등 업데이트는 변경된 부분만 전송하여 업데이트를 크게 빠르게 합니다.


차등 업데이트란

방식다운로드 크기속도
전체 업데이트100MB+느림
차등 업데이트수 MB빠름

전체 인스톨러 대신, 이전 버전과 새 버전의 차이(diff) 만 다운로드합니다.


electron-builder의 차등 업데이트

electron-builder는 NSIS(Windows)에서 차등 업데이트를 지원합니다.

YAML
# electron-builder.yml
win:
  target:
    - target: nsis
      arch:
        - x64
nsis:
  differentialPackage: true  # 차등 업데이트 활성화

동작 원리

  1. 빌드 시 blockmap 파일 생성 (파일의 블록별 해시)
  2. 업데이트 확인 시 blockmap을 다운로드하여 비교
  3. 변경된 블록만 다운로드
  4. 로컬에서 합쳐서 새 인스톨러 조립

macOS에서의 차등 업데이트

macOS는 .zip 형식으로 차등 업데이트가 동작합니다.

YAML
mac:
  target:
    - dmg
    - zip  # 자동 업데이트에 사용 (차등 지원)

서버 설정

PLAINTEXT
배포 서버 구조:
├── latest.yml                    # 최신 버전 정보
├── MyApp-1.2.0-x64.nsis.7z      # 전체 인스톨러 (압축)
├── MyApp-1.2.0-x64.nsis.7z.blockmap  # 블록맵
├── MyApp-1.1.0-x64.nsis.7z      # 이전 버전
└── MyApp-1.1.0-x64.nsis.7z.blockmap

latest.yml 예시:

YAML
version: 1.2.0
files:
  - url: MyApp-1.2.0-x64.nsis.7z
    sha512: abc123...
    size: 85000000
    blockMapSize: 50000
path: MyApp-1.2.0-x64.nsis.7z
sha512: abc123...
releaseDate: '2026-12-26T12:00:00.000Z'

차등 업데이트 모니터링

JAVASCRIPT
autoUpdater.on('download-progress', (info) => {
  log.info(`다운로드 진행: ${info.percent.toFixed(1)}%`);
  log.info(`속도: ${(info.bytesPerSecond / 1024).toFixed(0)} KB/s`);
  log.info(`${info.transferred} / ${info.total} bytes`);

  // 차등 업데이트가 적용되면 total이 전체 크기보다 훨씬 작음
  const isSizeMB = info.total / (1024 * 1024);
  if (isSizeMB < 10) {
    log.info('차등 업데이트가 적용되었습니다');
  }
});

차등 업데이트 실패 시 폴백

electron-updater는 차등 업데이트가 실패하면 자동으로 전체 다운로드로 폴백합니다. 별도의 처리가 필요하지 않습니다.


면접 포인트 정리

  • 차등 업데이트는 blockmap으로 변경된 블록만 다운로드
  • electron-builder가 NSIS(Windows), ZIP(macOS)에서 자동 지원
  • 실패 시 자동으로 전체 다운로드로 폴백
  • 업데이트 파일 크기가 작아질수록 사용자 경험이 크게 개선

차등 업데이트를 다뤘으면, 다음은 앱 패키징을 알아봅시다.

댓글 로딩 중...