차등 업데이트 — Delta Update로 빠른 배포
"100MB 앱에서 코드 1줄 바꿨는데 전체를 다시 다운로드한다?" — 차등 업데이트는 변경된 부분만 전송하여 업데이트를 크게 빠르게 합니다.
차등 업데이트란
| 방식 | 다운로드 크기 | 속도 |
|---|---|---|
| 전체 업데이트 | 100MB+ | 느림 |
| 차등 업데이트 | 수 MB | 빠름 |
전체 인스톨러 대신, 이전 버전과 새 버전의 차이(diff) 만 다운로드합니다.
electron-builder의 차등 업데이트
electron-builder는 NSIS(Windows)에서 차등 업데이트를 지원합니다.
# electron-builder.yml
win:
target:
- target: nsis
arch:
- x64
nsis:
differentialPackage: true # 차등 업데이트 활성화
동작 원리
- 빌드 시
blockmap파일 생성 (파일의 블록별 해시) - 업데이트 확인 시 blockmap을 다운로드하여 비교
- 변경된 블록만 다운로드
- 로컬에서 합쳐서 새 인스톨러 조립
macOS에서의 차등 업데이트
macOS는 .zip 형식으로 차등 업데이트가 동작합니다.
mac:
target:
- dmg
- zip # 자동 업데이트에 사용 (차등 지원)
서버 설정
배포 서버 구조:
├── 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 예시:
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'
차등 업데이트 모니터링
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)에서 자동 지원
- 실패 시 자동으로 전체 다운로드로 폴백
- 업데이트 파일 크기가 작아질수록 사용자 경험이 크게 개선
차등 업데이트를 다뤘으면, 다음은 앱 패키징을 알아봅시다.
댓글 로딩 중...