윈도우 스토어 가이드
윈도우 10과 함께 기존의 win32 실행 파일에 새로운 형식이 추가되었다. 바로 유니버설 윈도우 플랫폼(UWP)이다. 새로운 .appx
포맷은 코타나나 푸시 알림과 같은 강력한 API를 제공할 뿐만 아니라, 윈도우 스토어를 통해 설치와 업데이트를 간편하게 만들어준다.
마이크로소프트는 Electron 앱을 .appx
패키지로 컴파일하는 도구를 개발했다. 이를 통해 개발자들은 새로운 애플리케이션 모델의 장점을 활용할 수 있다. 이 가이드에서는 이 도구를 사용하는 방법과 Electron AppX 패키지의 기능 및 제한 사항에 대해 설명한다.
배경과 요구 사항
Windows 10 "Anniversary Update"는 win32 .exe
바이너리를 가상화된 파일 시스템과 레지스트리와 함께 실행할 수 있다. 이 파일 시스템과 레지스트리는 Windows 컨테이너 내에서 앱과 설치 프로그램을 실행하여 컴파일 중에 생성된다. 이를 통해 Windows는 설치 과정에서 운영체제에 어떤 변경이 일어났는지 정확히 파악할 수 있다. 실행 파일과 가상 파일 시스템, 가상 레지스트리를 함께 사용하면 Windows에서 원클릭 설치 및 제거가 가능해진다.
또한, exe 파일은 appx 모델 내에서 실행된다. 이는 Universal Windows Platform(UWP)에서 제공하는 다양한 API를 사용할 수 있음을 의미한다. 더 많은 기능을 활용하기 위해, Electron 앱은 exe
와 함께 실행되는 보이지 않는 UWP 백그라운드 작업과 연결할 수 있다. 이 백그라운드 작업은 사이드킥처럼 동작하여 백그라운드에서 작업을 실행하거나, 푸시 알림을 받거나, 다른 UWP 애플리케이션과 통신할 수 있다.
기존 Electron 앱을 컴파일하려면 다음 요구 사항을 충족해야 한다:
- Windows 10 Anniversary Update(2016년 8월 2일 출시)
- Windows 10 SDK(여기서 다운로드 가능)
- 최소 Node 4 버전(확인하려면
node -v
실행)
그런 다음, electron-windows-store
CLI를 설치한다:
npm install -g electron-windows-store
Step 1: Electron 애플리케이션 패키징
@electron/packager
와 같은 도구를 사용해 애플리케이션을 패키징한다. 최종 애플리케이션에서 필요하지 않은 node_modules
는 반드시 제거한다. 사용하지 않는 모듈은 애플리케이션의 크기를 불필요하게 증가시키기 때문이다.
패키징 결과물은 대략 다음과 같은 구조를 가진다:
├── Ghost.exe
├── LICENSE
├── content_resources_200_percent.pak
├── content_shell.pak
├── d3dcompiler_47.dll
├── ffmpeg.dll
├── icudtl.dat
├── libEGL.dll
├── libGLESv2.dll
├── locales
│ ├── am.pak
│ ├── ar.pak
│ ├── [...]
├── node.dll
├── resources
│ └── app.asar
├── v8_context_snapshot.bin
├── squirrel.exe
└── ui_resources_200_percent.pak
Step 2: electron-windows-store 실행
관리자 권한으로 실행한 PowerShell에서 electron-windows-store
를 필요한 인자와 함께 실행한다. 입력 및 출력 디렉터리, 앱 이름과 버전, 그리고 node_modules
를 평탄화할지 여부를 전달한다.
electron-windows-store `
--input-directory C:\myelectronapp `
--output-directory C:\output\myelectronapp `
--package-version 1.0.0.0 `
--package-name myelectronapp
명령어를 실행하면 도구가 동작을 시작한다. 먼저 Electron 앱을 입력으로 받아 node_modules
를 평탄화한다. 그런 다음 앱을 app.zip
으로 압축한다. 설치 프로그램과 Windows Container를 사용해 "확장된" AppX 패키지를 생성한다. 이 패키지는 Windows Application Manifest(AppXManifest.xml
)와 가상 파일 시스템, 가상 레지스트리를 포함하며, 출력 폴더에 저장된다.
확장된 AppX 파일이 생성되면 도구는 Windows App Packager(MakeAppx.exe
)를 사용해 디스크에 있는 파일들로부터 단일 파일 AppX 패키지를 만든다. 마지막으로 도구는 컴퓨터에 신뢰할 수 있는 인증서를 생성해 새로운 AppX 패키지에 서명할 수 있다. 서명된 AppX 패키지가 생성되면 CLI를 통해 자동으로 패키지를 머신에 설치할 수도 있다.
Step 3: AppX 패키지 사용하기
패키지를 실행하려면 사용자들이 Windows 10의 "Anniversary Update"가 필요하다. Windows를 업데이트하는 방법에 대한 자세한 내용은 여기에서 확인할 수 있다.
기존의 UWP 앱과 달리, 패키지된 앱은 현재 수동 검증 과정을 거쳐야 한다. 이 과정에 대한 신청은 여기에서 할 수 있다. 그동안 모든 사용자는 패키지를 더블클릭하여 설치할 수 있으므로, 더 쉬운 설치 방법을 원한다면 스토어에 제출하지 않아도 된다. 관리되는 환경(일반적으로 기업 환경)에서는 Add-AppxPackage
PowerShell Cmdlet을 사용해 자동화된 방식으로 설치할 수 있다.
또 다른 중요한 제한 사항은 컴파일된 AppX 패키지가 여전히 win32 실행 파일을 포함하고 있다는 점이다. 따라서 Xbox, HoloLens, 또는 휴대폰에서는 실행되지 않는다.
선택 사항: 백그라운드 태스크를 사용해 UWP 기능 추가하기
Electron 앱과 보이지 않는 UWP 백그라운드 태스크를 결합하면 Windows 10의 다양한 기능을 최대한 활용할 수 있다. 푸시 알림, Cortana 통합, 라이브 타일 등이 그 예이다.
백그라운드 태스크를 사용해 토스트 알림과 라이브 타일을 보내는 Electron 앱의 예제는 Microsoft가 제공한 샘플을 참고한다.
선택 사항: 컨테이너 가상화를 사용한 변환
AppX 패키지를 생성하기 위해 electron-windows-store
CLI는 대부분의 Electron 앱에 적합한 템플릿을 사용한다. 하지만 커스텀 설치 프로그램을 사용하거나 생성된 패키지에 문제가 발생한 경우, Windows Container를 사용해 패키지를 생성할 수 있다. 이 모드에서는 CLI가 빈 Windows Container에 애플리케이션을 설치하고 실행하여 운영체제에 어떤 변경을 가하는지 정확히 파악한다.
CLI를 처음 실행하기 전에 "Windows Desktop App Converter"를 설정해야 한다. 이 작업은 몇 분 정도 소요되지만, 한 번만 수행하면 된다. 여기에서 Desktop App Converter를 다운로드한다. DesktopAppConverter.zip
과 BaseImage-14316.wim
두 개의 파일을 받을 수 있다.
DesktopAppConverter.zip
의 압축을 푼다. 관리자 권한으로 실행한 PowerShell에서Set-ExecutionPolicy bypass
를 호출해 시스템 실행 정책을 설정한다. 이 명령어는 필요한 모든 작업을 실행할 수 있도록 보장한다.- Desktop App Converter를 설치한다. 이때 다운로드한 Windows 베이스 이미지(
BaseImage-14316.wim
)의 위치를 인자로 전달한다. 명령어는 다음과 같다:.\DesktopAppConverter.ps1 -Setup -BaseImage .\BaseImage-14316.wim
. - 위 명령어 실행 중 재부팅이 필요하다는 메시지가 나타나면, 머신을 재시작한 후 동일한 명령어를 다시 실행한다.
설치가 완료되면 Electron 앱을 컴파일할 수 있다.