프론트엔드/Electron

Electron으로 데스크탑 앱 만들기 (3) - 배포하고 앱 실행하기

진기명기 2025. 6. 13. 11:20
Electron을 시작하기 전에 약간의 삽질이 있을 수도 있다.. 고 말씀하셨던 개발자 동료분.. 의 말에 정확하게 삽질이 있긴 했다.
하고 나서 생각해 보면 너무 흔한 오류인가? 싶기도 하고, 경험담이겠지? 싶은 🤣
프로젝 생성까지 했으니 배포 레츠고.

🏠 구조 🏠
electron-app/
 - sample-app/  👉🏻 생성 프로젝트
    - src/
 - main.js  👉🏻 Electron 메인 프로세스 (앱 창 띄우기)
 - package.json  👉🏻 Electron + 실행 스크립트 설정
 - node_modules/

🔨 실행 🔨
> nvm use 
> npm run dev

 

NVM 및 Electron 설치는 아래 포스팅 참고 🔽

https://cyjcyj.tistory.com/207

 

Electron으로 데스크탑 앱 만들기 (1) - NVM 설치부터

구구절절 시작 🔽(갑자기 회의에 참여하게 된) "유진님, 저희 데스크톱 앱 만들어야 하는데 먼저 nvm부터 까시고여. nvm이 node 버전 관리해 주는 건데, 아마 기존 프로젝이랑 왔다 갔다 하면서 개

cyjcyj.tistory.com

https://cyjcyj.tistory.com/208

 

Electron으로 데스크탑 앱 만들기 (2) - React + Vite + JavaScript

nvm까지 설치를 했으니, 실제 프로젝트를 생성해서 Electron으로 감싸보자!🔧 개발 환경 : Vite🔨 라이브러리 : React 🤔 언어 : JavaScript NVM 설치 관련은 아래 포스팅 참고 🔽https://cyjcyj.tistory.com/207 El

cyjcyj.tistory.com

 


🏃🏻‍♀️ 목표

 

목표 : 배포하고, 데스크톱 앱으로 실행하기

순서 : 1️⃣ electron-builder 설치 2️⃣ 빌드 설정 및 진행 3️⃣ 앱 실행

 

1️⃣ electron-builder 설치

> npm install --save-dev electron-builder
electron-builder : Electron 앱을 window 👉🏻 .exe / macOS 👉🏻 .dmg, .app 등으로 간단하게 패키징 해주는 도구 

 

🤔 macOS라서 .exe 파일을 만들지 못하지만, 윈도우 PC에서 실행하면 파일 생성이 됨.

 

 

2️⃣ 빌드 설정 및 진행

1) electron-app/package.json 수정
{
  "name": "electron-app",
  "version": "1.0.0",
  "main": "main.js",
  "build": {
    "appId": "com.회사.앱이름", // 앱의 고유 ID
    "productName": "MyElectronApp", // 앱 이름, 설치 파일 이름
    "files": [
      "sapmle-app/dist/**/*",
      "main.js"
    ],
    "directories": {
      "output": "release" // 결과물 저장 위치
    },
    "win": {
      "target": "nsis"
    }
  },
  "scripts": {
    "dev": "concurrently \"npm:dev:react\" \"npm:dev:electron\"",
    "dev:react": "cd electron-app && npm run dev",
    "dev:electron": "wait-on http://localhost:5173 && electron ."
  },
  "devDependencies": {
    "concurrently": "^9.x.x",
    "electron": "^3x.x.x",
    "wait-on": "^8.x.x"
  }
}


✅ "win" : { "target" : "nsis" } : nsis는 Windows에서 사용하는 설치 마법사 .exe 포맷


2) electron-app/sample-app 빌드
> npm run build
dist 폴더 생성


3) main.js 수정

const { app } = require('electron');

const isDev = !app.isPackaged;

if (isDev) {
    win.loadURL('http://localhost:5173');
  } else {
    win.loadFile(path.join(__dirname, 'sample-app/dist/index.html'));
  }​


✅ isDev로 개발 서버와 배포 화면 구분


4) electron-app 빌드
> npm run build
main.js 또는 package.json 등 수정 시 빌드 필요.

 

 

3️⃣ 앱 실행

🔽 Windows일 때
npm run build 진행 시 electron-builder가 실행되고, release/ 폴더 안에 .exe 파일이 생성됨 👉🏻 설치 진행.
🔽 macOS일 때 
npm run build 진행 시 electron-builder가 실행되고, release/mac-arm/앱.app 생성.

 

 


🐸 버그

 

❗️ 빌드까지 완료하고, app을 열어보았으나 내가 작성한 "Hello World"가 보이지 않는 것! 이유가 무엇인가 하면?

 

파악한 상황 🔽

MyElectronApp을 실행해도 빈 화면만 출력.

Contents > MacOs > MyElectronApp 실행 시에는 Hello World 정상 출력.

앱은 정상으로 실행되지만, 렌더링을 하지 못하는 상황.

화면에 출력하는 타이밍 문제일까 싶어 아래 코드 추가.

 

> main.js 수정

win.once('ready-to-show', () => {
  win.show();
});

// new BrowserWindow()에 아래 코드도 추가
show: flase

 

✅ Electron 창은 자동으로 보이도록 (show: true)가 설정되어 있는데, 화면이 준비되지 않은 상태에서 창을 띄워 빈화면 출력.

따라서 show: false 설정 후, ready-to-show 이벤트가 발생할 때만 win.show() 실행.