Electron
์๋ช
Atom Shell.
Electron 28๋ถํฐ, ESM์ ์ง์ํฉ๋๋ค.
์ฐธ๊ณ : https://github.com/Elanis/web-to-desktop-framework-comparison
NW.js(์๋ช
node-webkit)๋ Electron์ ์ฃผ์ ๊ฒฝ์์๋ก, ๋ ๋ค Chromium+Node.js ์ํคํ
์ฒ์ ํฌ๋ก์ค ํ๋ซํผ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์
์๋ฃจ์
์
๋๋ค.
NW.js๋ Electron๋ณด๋ค 2๋ ๋จผ์ ์ถ์๋์์ง๋ง, Electron์ด ์ด์ NW.js๋ณด๋ค ํจ์ฌ ์ธ๊ธฐ๊ฐ ๋ง์ผ๋ฉฐ, ์์ผ๋ก๋ ์ด ์ํฉ์ด ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ต๋๋ค.
NW.js๋ Electron๋ณด๋ค 2๋ ๋จผ์ ์ถ์๋์์ง๋ง, Electron์ด ์ด์ NW.js๋ณด๋ค ํจ์ฌ ์ธ๊ธฐ๊ฐ ๋ง์ผ๋ฉฐ, ์์ผ๋ก๋ ์ด ์ํฉ์ด ๋ฐ๋ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ต๋๋ค.
- Electron์ ๋ฉ์ธ ํ๋ก์ธ์ค์ ๋ ๋๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋ถ๋ฆฌํ์ต๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค ๋ด๋ ๋ ๊ฐ์ ์ปจํ ์คํธ๋ก ๋๋์ด ์์ผ๋ฉฐ, ๊ฐ๊ฐ Node.js ์ฝ๋์ ๋ธ๋ผ์ฐ์ ์ธก ์ฝ๋๋ฅผ ์คํํฉ๋๋ค.
Electron ๋ชจ๋ธ์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ง๋ง, ์ด๋ฌํ ๊ฐ์ ์ ์ธ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ ์ค๊ณ๊ฐ ์๋ฏธ๊ฐ ์๋์ง๋ ๋งค์ฐ ๋
ผ์์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
์ด์ํ ์ ๋๋ก ๋ฒ๊ฑฐ๋ก์ด IPC ์ค๊ณ์ ๋์์๋ ๋ณด์ ์ฐ์ถ์ ๊ฐ๋ฐ ๊ฒฝํ์ ๋งค์ฐ ๋์๊ฒ ๋ง๋ญ๋๋ค.
์ด์ํ ์ ๋๋ก ๋ฒ๊ฑฐ๋ก์ด IPC ์ค๊ณ์ ๋์์๋ ๋ณด์ ์ฐ์ถ์ ๊ฐ๋ฐ ๊ฒฝํ์ ๋งค์ฐ ๋์๊ฒ ๋ง๋ญ๋๋ค.
- NW.js๋ Chrome ์ฑ ์ํคํ ์ฒ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, Node.js์ Chromium ๋ ๋๋ฌ๊ฐ ๋์ผ ํ๋ก์ธ์ค๋ฅผ ๊ณต์ ํ๋ฏ๋ก ๋ธ๋ผ์ฐ์ ์ธก์์ Node.js ๋ชจ๋์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ์ธก์์ Node.js ๋ค์ดํฐ๋ธ ํ๋ฌ๊ทธ์ธ์ ์ง์ ๋ก๋ํ ์ ์์ผ๋ฏ๋ก, NW.js์ ์ฑ๋ฅ์ IPC์ ์์กดํ๋ Electron ๋ฐ WASM ๊ธฐ๋ฐ ์๋ฃจ์ ๋ณด๋ค ํจ์ฌ ์ฐ์ํฉ๋๋ค.
์ปจํ
์คํธ ๋ถ๋ฆฌ ๋ชจ๋์ ํผํฉ ์ปจํ
์คํธ ๋ชจ๋ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค:
- ์ปจํ ์คํธ ๋ถ๋ฆฌ ๋ชจ๋์์๋ Node ์ปจํ ์คํธ์ Web ์ปจํ ์คํธ ๋ ํ๊ฒฝ์ผ๋ก ๋๋๋ฉฐ, Node ์ปจํ ์คํธ๋ Node.js ๋ชจ๋์ ์คํ ํ๊ฒฝ์ด๊ณ , Web ์ปจํ ์คํธ๋ NW.js ์คํฌ๋ฆฝํธ์ ์คํ ํ๊ฒฝ์ ๋๋ค.
๋ค๋ฅธ ์ปจํ ์คํธ์ ์ ์ญ ๋ณ์๊ฐ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฏ๋ก, ์ฐธ์กฐ ๋๋ฑ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค. - ํผํฉ ์ปจํ ์คํธ ๋ชจ๋์์๋ ํ๋์ ์ปจํ ์คํธ๋ง ์ฌ์ฉํฉ๋๋ค.
์ฐธ์กฐ ๋๋ฑ์ฑ ๋ฌธ์ ๋ ๋ฐ์ํ์ง ์์ง๋ง, ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ํด ์ปจํ ์คํธ๊ฐ ์ค์ผ๋ ์ํ์ด ์์ต๋๋ค.
- Electron์ ์ง์ ์ ์ ๋ฉ์ธ ํ๋ก์ธ์ค์ JavaScript ์คํฌ๋ฆฝํธ์ ๋๋ค.
- NW.js์ ์ง์ ์ ์ ์ฃผ๋ก HTML ํ์ผ์ด์ง๋ง, JavaScript ์คํฌ๋ฆฝํธ์ผ ์๋ ์์ต๋๋ค.
Electron์ ๋ฌธ์๋ NW.js์ ๋ฌธ์๋ณด๋ค ํจ์ฌ ์ฐ์ํ๋ฉฐ, ํ์์ ๋ฌธ์๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ณ ์
๋ฐ์ดํธ๊ฐ ์ฌ๊ฐํ๊ฒ ๋ถ์กฑํฉ๋๋ค.
- Electron์ ๋ค์ดํฐ๋ธ ์์ค ์ฝ๋ ๋ณดํธ ๊ธฐ๋ฅ์ด ์์ผ๋ฏ๋ก, bytenode ๋๋ electron-vite์ ๊ฐ์ V8 ๋ฐ์ดํธ์ฝ๋ ์๋ฃจ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- NW.js์๋ ๊ณต์์ ์ผ๋ก ์ ๊ณต๋๋ ์ฝ๋ ์ปดํ์ผ๋ฌ nwjc๊ฐ ์์ผ๋ฉฐ, ์๋ฆฌ๋ bytenode์ ๋์ผํ์ง๋ง ๊ตฌํ์ ์ฝ๊ฐ ๋ค๋ฆ ๋๋ค:
NW.js๋ V8์ ์ง์ ์์ ํ ์ ์์ผ๋ฏ๋ก bytenode์ ๊ฐ์ ์ธ๋ถ ์๋ฃจ์ ์ด ๊ฐ์ง๋ ๋ง์ ์ ์ฝ ์ฌํญ์ ํผํ ์ ์์ต๋๋ค.
- Electron์ ๋ง์ ์์ ํ์ฌ ์ฌ์ฉ์๋ฅผ ๋ณด์ ํ๊ณ ์์ผ๋ฉฐ, ๊ฐ์ฅ ์ ๋ช ํ ํ๋ก์ ํธ๋ VSCode์ ๋๋ค.
- NW.js๋ ์ผ์ฐ ์์ํ์ง๋ง, ํ์ฌ ์ฌ์ฉ์ ์๊ฐ ๋น๊ต์ ์ ์ต๋๋ค.
RPG Maker๋ก ์ ์๋ ๊ฒ์์ NW.js์ ํ์ฌ ๊ฐ์ฅ ํฐ ์ฌ์ฉ์ ์์ค์ผ ์ ์์ต๋๋ค.
Neutralinojs๋ Chromium์ ํจํค์งํ์ง ์๊ณ , ์ด์ ์ฒด์ ์ WebView๋ฅผ ์ฌ์ฉํฉ๋๋ค.
WebView๋ ์์๋๋ก ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ฏ๋ก, ํ๋ก๋์ ์์ค์ ์๋ฃจ์ ์ผ๋ก ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
WebView๋ ์์๋๋ก ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ฏ๋ก, ํ๋ก๋์ ์์ค์ ์๋ฃจ์ ์ผ๋ก ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
Neutralinojs๋ ๊ตฌํ Windows ์์คํ
์ ์ง์ํ์ง ์์ต๋๋ค: https://github.com/neutralinojs/neutralinojs/issues/486
Tauri๋ Rust์ ์ด์ ์ฒด์ ์ WebView๋ฅผ ์ฌ์ฉํ๋ฉฐ, Node.js ๋ชจ๋์ ์ง์ํ์ง ์์ผ๋ฏ๋ก Rust๋ก API๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
WebView๋ ์์๋๋ก ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ฏ๋ก, ํ๋ก๋์ ์์ค์ ์๋ฃจ์ ์ผ๋ก ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
WebView๋ ์์๋๋ก ํธํ์ฑ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๋ฏ๋ก, ํ๋ก๋์ ์์ค์ ์๋ฃจ์ ์ผ๋ก ๊ณ ๋ ค๋์ง ์์ต๋๋ค.
๋ฐ์คํฌํฑ ํ๋ซํผ ์ธ์๋, Tauri๋ iOS์ Android๋ ์ง์ํ ๊ณํ์
๋๋ค.
- ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ๋ ๋ถํ์ํ ๋ณต์ก์ฑ์ ๋ง๋ญ๋๋ค.
- API์ ํต์ผ์ฑ์ด ๋ถ์กฑํ๋ฉฐ, ์ฐฝ์ ๋ฉ๋ด๋ฐ๋ฅผ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ๋ง ํด๋ ์ฌ๋ฌ ๊ฐ์ง์ ๋๋ค.
- ๋๋ฌด ๋น ๋ฅธ ๋ฉ์ด์ ๋ฒ์ ๋ฐ๋ณต ์ ๋ต.
- ์ ์ฉํ ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ๋ถ์กฑํฉ๋๋ค.
Electron ์ ํ๋ฆฌ์ผ์ด์
์ ๋ฉ์ธ ํ๋ก์ธ์ค๋ก, ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์
์ ์ด๋ฉฐ, ํ๋์ ์ธ์คํด์ค์ ํ๋๋ง ์กด์ฌํ ์ ์์ต๋๋ค.
Electron ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ๋ด๋นํ๋ ํ๋ก์ธ์ค๋ก, ๋ฉ์ธ ํ๋ก์ธ์ค์ ์ํด ์์๋๋ฉฐ, ํ๋์ ์ธ์คํด์ค์ ์ฌ๋ฌ ๊ฐ๊ฐ ์์ ์ ์์ต๋๋ค.
๋ ๋๋ฌ ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ดํฐ๋ธ Node.js ๋ชจ๋์ ์ง์ ์ ๊ทผํ ์ ์์ผ๋ฉฐ,
๋ชจ๋ Node.js ๋ชจ๋์ preload ์คํฌ๋ฆฝํธ์ ์ํด ์์ฑ๋ ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ํธ์ถ๋์ด์ผ ํฉ๋๋ค.
๋ชจ๋ Node.js ๋ชจ๋์ preload ์คํฌ๋ฆฝํธ์ ์ํด ์์ฑ๋ ์ปจํ ์คํธ ๊ฒฉ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๊ฐ์ ์ ์ผ๋ก ํธ์ถ๋์ด์ผ ํฉ๋๋ค.
์ฐฝ ์์ฑ ์
nodeIntegration: true ์ต์
์ ํตํด ๋ ๋๋ฌ ํ๋ก์ธ์ค์ Node.js ํตํฉ์ ํ์ฑํํ ์ ์์ต๋๋ค.๊ธฐ๋ณธ์ ์ผ๋ก, preload ์คํฌ๋ฆฝํธ์ ๋ ๋๋ฌ ํ๋ก์ธ์ค์ ํธ์คํธ ํ๊ฒฝ์ ๊ฒฉ๋ฆฌ๋์ด ์์ผ๋ฉฐ,
๋์ ์ค์ง =contextBridge=์ =window.postMessage=๋ฅผ ํตํด์๋ง ํต์ ํ ์ ์์ต๋๋ค.
๋์ ์ค์ง =contextBridge=์ =window.postMessage=๋ฅผ ํตํด์๋ง ํต์ ํ ์ ์์ต๋๋ค.
=contextIsolation: false=๋ฅผ ํตํด ์ด ๋์์ ์ทจ์ํ ์ ์์ต๋๋ค.
=contextBirdge.exposeInMainWorld=๋ preload ์คํฌ๋ฆฝํธ์์ ๋ ๋๋ฌ ํ๋ก์ธ์ค์ ํธ์คํธ ํ๊ฒฝ์ API๋ฅผ ๋
ธ์ถํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์
๋๋ค.
๋ธ๋ฆฟ์ง ์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฐ์ดํฐ ์ ํ์ ์ ํ์ด ์์ต๋๋ค:
๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐํ ๊ฐ๋ฅํ ํด๋ก ์ ํ ์ธ์๋, ํจ์, Promise, Error ๋ฑ์ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง, ์ฌ์ ํ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑ์ํค์ง ๋ชปํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ธ ๊ตฌ์กฐํ ๊ฐ๋ฅํ ํด๋ก ์ ํ ์ธ์๋, ํจ์, Promise, Error ๋ฑ์ ๊ฐ์ฒด๋ฅผ ๋ณด๋ผ ์ ์์ง๋ง, ์ฌ์ ํ ์ผ๋ฐ์ ์ธ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑ์ํค์ง ๋ชปํฉ๋๋ค.
๋ธ๋ฆฟ์ง์ ๋ค์ ํน์ฑ๋ ๊ฐ์ง๋๋ค:
- preload์ ๊ฒฝ์ฐ, API ๋ ธ์ถ์ ์ผํ์ฑ์ด๋ฏ๋ก ๋ฐ๋ณตํด์ ๋ ธ์ถํ ์ ์์ผ๋ฉฐ, API ๋ณ๊ฒฝ ์ฌํญ์ด ํธ์คํธ ํ๊ฒฝ์ ๋๊ธฐํ๋ ์๋ ์์ต๋๋ค.
- ํธ์คํธ ํ๊ฒฝ์ ๊ฒฝ์ฐ, ์๊ฒฉ ํจ์ ๋ด๋ถ์์๋ native code๋ก ํ์๋ฉ๋๋ค.
- ๋ ธ์ถ๋ ๊ฐ์ฒด๋ ๋๊ฒฐ๋๋ฏ๋ก, ํธ์คํธ ํ๊ฒฝ์์๋ API๋ฅผ ์ธ ์ ์์ต๋๋ค.
- ์ง์๋์ง ์๋ ์ ํ์ ๊ฒฝ์ฐ, =undefined=/๊ฐ์ฒด ์์ฑ ๋ณต์ฌ/์ค๋ฅ ๋ฐ์์ด๋ผ๋ ์ธ ๊ฐ์ง ๋ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ ์ ์์ต๋๋ค.
renderer ํ๋ก์ธ์ค๋ ipcRenderer๋ฅผ ์ฌ์ฉํ์ฌ main ํ๋ก์ธ์ค์ ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
์ด ipc๋ ๋ ๊ฐ์ง ๋ชจ๋๋ฅผ ์ง์ํฉ๋๋ค:
- send: ipcMain์ ๋ฉ์์ง๋ง ์ ์ก
- invoke: request-reply ๋ชจ๋
์ปจํ
์คํธ ๊ฒฉ๋ฆฌ ๋๋ฌธ์ renderer ํ๋ก์ธ์ค์์ =ipcRenderer.send/invoke=๋ฅผ ํธ์ถํ๋ ๊ฒ์ด ๋งค์ฐ ๋ถํธํฉ๋๋ค.
main ํ๋ก์ธ์ค๋ renderer ํ๋ก์ธ์ค์ ์์ฒญ์ ๋ณด๋ผ ์ ์์ง๋ง, ๋จผ์ renderer ํ๋ก์ธ์ค์ WebContents ๊ฐ์ฒด๋ฅผ ์ป์ด์ผ ํฉ๋๋ค.
WebContents ๊ฐ์ฒด๋ฅผ ์ป๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- renderer๊ฐ ๋จผ์ main์ ์์ฒญ์ ๋ณด๋ด๋ฉด, main์ด ๋ฐ๋ =event.sender=๊ฐ WebContents ๊ฐ์ฒด์ ๋๋ค.
- main์ด ์ฐฝ ์์ฑ ์ BrowserWindow๋ฅผ ๋ณด๊ดํ ๋ค์ =BrowserWindow.webContents=๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ปจํ
์คํธ ๊ฒฉ๋ฆฌ ๋๋ฌธ์ renderer ํ๋ก์ธ์ค์์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๋ฑ๋กํ๋ ๊ฒ์ด ๋งค์ฐ ๋ถํธํฉ๋๋ค.
ํ์ค MessagePort ์ธํฐํ์ด์ค.
https://www.electronjs.org/docs/latest/tutorial/message-ports
https://www.electronjs.org/docs/latest/tutorial/message-ports
main๊ณผ renderer, renderer์ renderer ๊ฐ ํต์ ์ ์ ํฉํฉ๋๋ค.
main๊ณผ renderer๋ ipcMain๊ณผ ipcRenderer๋ฅผ ํตํด ํต์ ํ ์ ์์ผ๋ฏ๋ก,
์ด ํต์ ๋ฐฉ์์ ์ฃผ๋ก renderer์ renderer ๊ฐ ํต์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
main๊ณผ renderer๋ ipcMain๊ณผ ipcRenderer๋ฅผ ํตํด ํต์ ํ ์ ์์ผ๋ฏ๋ก,
์ด ํต์ ๋ฐฉ์์ ์ฃผ๋ก renderer์ renderer ๊ฐ ํต์ ์ ์ฌ์ฉ๋ฉ๋๋ค.
ํต์ ์ ์ค์ ํ๊ธฐ ์ ์ ๋จผ์ ipcMain๊ณผ ipcRenderer๋ฅผ ํตํด MessagePort ๊ฐ์ฒด๋ฅผ ์ ๋ฌํด์ผ ํฉ๋๋ค.
๋คํธ์ํฌ ํ๋กํ ์ฝ์ ํตํด IPC๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด HTTP ๋ฐ WebSocket.
Electron์์ Main๊ณผ Renderer(Web ์ปจํ
์คํธ) ๊ฐ ํต์ ์ ์ค์ ํ๋ ๊ฒ์ด ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๋ค๋ ์ ์ ๊ณ ๋ คํ ๋,
๋คํธ์ํฌ ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ IPC๋ก ์ฌ์ฉํ์ฌ ๋ณต์ก์ฑ์ ์ค์ด๋ ๊ฒ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
๋คํธ์ํฌ ํ๋กํ ์ฝ ๊ธฐ๋ฐ์ IPC๋ก ์ฌ์ฉํ์ฌ ๋ณต์ก์ฑ์ ์ค์ด๋ ๊ฒ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋๋ค.
- IPC ์ธํฐํ์ด์ค๊ฐ ๋์ผ ๋คํธ์ํฌ์ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ ธ์ถ๋ฉ๋๋ค.
- ์ฑ๋ฅ์ด ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ณด๋ค ๋จ์ด์ง๋๋ค.
ABI๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ Electron์ Node.js์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ง์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ชจ๋์ Electron ์ ์ฉ์ผ๋ก ์ปดํ์ผ๋์ด์ผ ํฉ๋๋ค.
https://www.electronjs.org/docs/latest/tutorial/devtools-extension
Electron์ Chrome ํ์ฅ ํ๋ก๊ทธ๋จ API๋ฅผ ์ ํ์ ์ผ๋ก ์ง์ํ๋ฉฐ, ์ผ๋ถ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ๋ก๋ํ ์ ์์ต๋๋ค.
Windows ๋ฐ macOS์์ Electron ์์ฒด API๋ ์์ ์ ์๋ ์คํ ์ค์ ์ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค:
https://www.electronjs.org/docs/latest/api/app#appsetloginitemsettingssettings-macos-windows
https://www.electronjs.org/docs/latest/api/app#appsetloginitemsettingssettings-macos-windows
๊ทธ๋ฌ๋ ๊ด๋ จ ๊ธฐ๋ฅ์ ๊ตฌํ์ ๋ค์๊ณผ ๊ฐ์ ๋น๊ทน์ ์ธ ๋ฒ๊ทธ๋ก ๊ฐ๋ํฉ๋๋ค:
- https://github.com/electron/electron/issues/32657
- https://github.com/electron/electron/issues/33308
์ด ๊ตฌํ์ ์ฌ์ฉ์ ์ ์ args๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
์ค์ ํญ๋ชฉ์ JSON ํ์ผ๋ก ์์ํํ๋ ๋ฐ ํนํ๋ ์๋ฃจ์
.
๋ด๋ถ์ ์ผ๋ก ๋์ผ ์ ์์ conf ๋ชจ๋์ ์ฌ์ฉํ๋ฉฐ, JSON Schema ๋ฐ
๋ด๋ถ์ ์ผ๋ก ๋์ผ ์ ์์ conf ๋ชจ๋์ ์ฌ์ฉํ๋ฉฐ, JSON Schema ๋ฐ
package.json ๊ธฐ๋ฐ ๋ฒ์ ๋ง์ด๊ทธ๋ ์ด์
์ ์ง์ํฉ๋๋ค.๋ฉ๋ชจ๋ฆฌ์์ ์คํ๋๋ ๋ฌธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก, ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ผ ์์คํ
์ ์์ํ๋ฉ๋๋ค.
๊ฐ๋ฐ์ด ํ๋ฐํ์ง ์์ต๋๋ค.
์์ JavaScript ๋ชจ๋๋ก, JSON์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ์ฌ์ฉํฉ๋๋ค.
์ด๊ฒ์ ๋ณธ์ง์ ์ผ๋ก JSON์ ์ฝ๊ณ ์ฐ๋ ํด๋์ค์ผ ๋ฟ์ด๋ฉฐ, ํน๋ณํ ์ ์ ์์ต๋๋ค.
์์ฑ์๊ฐ ์ ์ง ๋ณด์๋ฅผ ์ค๋จํ์ต๋๋ค.
RxJS์ PouchDB๋ฅผ ๊ฒฐํฉํ ๊ณ ๊ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค.
PouchDB ์ํ๊ณ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, Electron์ ๊ณต์์ ์ผ๋ก ์ง์ํฉ๋๋ค.
PouchDB ์ํ๊ณ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, Electron์ ๊ณต์์ ์ผ๋ก ์ง์ํฉ๋๋ค.
๋ค์ด๋ก๋ ์์ Github Stars ์๊ฐ ๋น๋กํ์ง ์๋ ์ ํ์ ์ธ ์ฌ๋ก๋ก, ์ค์ ์ฌ์ฉ์ ์๋ ๋ง์ง ์์ต๋๋ค.
์์ฑ์๊ฐ ์ด ํ๋ก์ ํธ์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ด ํ๋ก์ ํธ๋ ์ ๊ท ์ฌ์ฉ์์๊ฒ ์ฌ์ ํ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ ์ ๊ณตํฉ๋๋ค.
์์ฑ์๊ฐ ์ด ํ๋ก์ ํธ์ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์์๋ ๋ถ๊ตฌํ๊ณ , ์ด ํ๋ก์ ํธ๋ ์ ๊ท ์ฌ์ฉ์์๊ฒ ์ฌ์ ํ ๊ฐํ๋ฅธ ํ์ต ๊ณก์ ์ ์ ๊ณตํฉ๋๋ค.
์ด ํ๋ก์ ํธ๋ ๋ํ ์์ฑ์๊ฐ ์ ์ดํ ์ ์๋ ๋๋ฌด ๋ง์ ํจํค์ง์ ์์กดํ์ฌ ๋งค์ฐ ์ทจ์ฝํฉ๋๋ค:
- RxJS
- PouchDB
- pouchdb-find(RxCollection์ find ๋ฉ์๋๋ ์ด ํจํค์ง๋ฅผ ์ง์ ์ฌ์ฉํ๋ฏ๋ก ๋์ผํ ๊ฒฐํจ์ ๊ณต์ )
- mquery(์ฝ๋๋ฅผ ๋ณต์ฌํจ)
v10 ๋ฒ์ ๋ถํฐ RxDB๋ PouchDB์์ ๋ฒ์ด๋ ์ค๋น๋ฅผ ์์ํ์ต๋๋ค.
ํ๋ก์ ํธ์ ์ธ๊ธฐ๋, ์ ์ง ๋ณด์์ฑ, ์ข
์์ฑ์ ์ ๋ขฐ์ฑ ์ธก๋ฉด์์ RxDB๋ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
Node.js์์ PouchDB๋ levelup ๋ชจ๋์ ํตํด LevelDB๋ฅผ ์ ์ฅ์ ํ์ ๊ณ์ธต์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
levelup ๋ชจ๋์ ํ์ ๊ณ์ธต์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ด์ง๋ง, Electron์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก electron-rebuild๋ก ์ฒ๋ฆฌํ ํ์ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
levelup ๋ชจ๋์ ํ์ ๊ณ์ธต์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ด์ง๋ง, Electron์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ํ๋ฏ๋ก electron-rebuild๋ก ์ฒ๋ฆฌํ ํ์ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
PouchDB๋ ๋ค์ค ํ๋ก์ธ์ค ์๋๋ฆฌ์ค๋ฅผ ์ํด ์ค๊ณ๋์ง ์์์ผ๋ฉฐ, ๋ง์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ ์ต์ ํ ๊ธฐ๋ฅ์ด ์๊ณ , Node.js ํ์ ๊ณ์ธต LevelDB๋ ๋ค์ค ํ๋ก์ธ์ค๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ Electron์์ ์ฌ์ฉํ ๋๋ Main ํ๋ก์ธ์ค์์๋ง ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , IPC๋ฅผ ํตํด Renderer์ ๋ ธ์ถํ์ฌ ์ ๊ทผํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ Electron์์ ์ฌ์ฉํ ๋๋ Main ํ๋ก์ธ์ค์์๋ง ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , IPC๋ฅผ ํตํด Renderer์ ๋ ธ์ถํ์ฌ ์ ๊ทผํด์ผ ํฉ๋๋ค.
pouchdb-find๋ Mongo ์คํ์ผ ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์ ๊ตฌํํ๊ธฐ ์ํ ๊ณต์ ํ์ฅ์
๋๋ค.
์ด ํจํค์ง์๋ ๋ค์๊ณผ ๊ฐ์ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค (์ ํ์ ์ด์ง ์์):
- ์ธ๋ฑ์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์คํ๋ ค ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง ๋ชปํจ:
https://github.com/pouchdb/pouchdb/issues/7810
๊ด๋ จ ์ด์๋ ๋ซํ์ง๋ง, ์ ๋ v7.2.2 ํจํค์ง์์ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฒฝํํ์ต๋๋ค. - ์ ํ๊ธฐ ๋๋ฝ:
https://github.com/pouchdb/pouchdb/issues/6572
https://github.com/pouchdb/pouchdb/issues/6371
์ด ํจํค์ง์ ์์กดํ ์ฟผ๋ฆฌ๋ ๋ถ๋ช
ํ ์ ๋ขฐํ ์ ์์ต๋๋ค.
Mongo ์ง์ ์์ด๋ PouchDB๋ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
Mongo ์ง์ ์์ด๋ PouchDB๋ ์ฌ์ฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ด์ ๋ฒ์ ์ 2020๋
์ ์ถ์๋์์ผ๋ฉฐ, ๊ทธ๋์ ๋ฒ๊ทธ๊ฐ ์์ ๋์ง ์์๊ณ , ๋ง์ ์ค์ํ ๋ฒ๊ทธ ์ด์๊ฐ ์ ์ง ๋ณด์์์ ์ํด ๋ฌด์๋์์ต๋๋ค.
๊ทธ ์ ํ ์ ์ =@types/pouchdb=๋ ๊ตฌํ์ ๋๋ค (PouchDB v6.4์ ๋ง์ถค).
๊ทธ ์ ํ ์ ์ =@types/pouchdb=๋ ๊ตฌํ์ ๋๋ค (PouchDB v6.4์ ๋ง์ถค).
RxDB์ ์์ฑ์๋ RxDB v10 ์ถ์ ๋
ธํธ์์ PouchDB๊ฐ ์ ๋๋ก ์ ์ง ๋ณด์๋์ง ์๋๋ค๊ณ ์ธ๊ธํ์ต๋๋ค.
https://github.com/pouchdb/pouchdb/issues/3224
Node-API(N-API)๋ฅผ ์ง์ํ์ง ์๋ ๋ค์ดํฐ๋ธ ๋ชจ๋์ธ better-sqlite3๋
electron-rebuild๋ก ์ฒ๋ฆฌํด์ผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ข ์์ฑ ์ ๊ธ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
electron-rebuild๋ก ์ฒ๋ฆฌํด์ผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์ด๋ ์ข ์์ฑ ์ ๊ธ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์ต๋๋ค.
์ด๊ฒ์ Ghost ํ์ด ์ ์ง ๋ณด์ํ๋ SQLite3 ๋ชจ๋์
๋๋ค.
์ด ๋ชจ๋์ v5 ๋ฒ์ ๋ถํฐ Node-API ๊ธฐ๋ฐ์ผ๋ก ์ฌ์์ฑ๋์์ต๋๋ค.
์ด ๋ชจ๋์ v5 ๋ฒ์ ๋ถํฐ Node-API ๊ธฐ๋ฐ์ผ๋ก ์ฌ์์ฑ๋์์ต๋๋ค.
์ฝ๋ฐฑ ์ธํฐํ์ด์ค๋ this๋ฅผ ์ค์ ํ์ฌ ํ์ดํ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ง๋ญ๋๋ค.
Promise ๋ํ์ ์ป์ผ๋ ค๋ฉด ์๋ํํฐ ๋ํผ node-sqlite๋ฅผ ์ค์นํด์ผ ํฉ๋๋ค.
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ Database ์ธ์คํด์ค๋ ํ๋์ ์ฐ๊ฒฐ์ผ ๋ฟ์ด๋ฉฐ, ๊ฒฝ์ ์กฐ๊ฑด์ ์กด์ฌํ์ง ์์ต๋๋ค.
ํธ๋์ญ์ ์ด ์์๋๋ ๋์ ์ธ์คํด์ค์์ ์คํ๋๋ ๋ชจ๋ ๋ฌธ์ ํด๋น ํธ๋์ญ์ ์ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํธ๋์ญ์ ์ ์์ํ๋ ค๋ฉด ํญ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ, ์ธ์คํด์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๋ฉด ํ์ ์์ฑํด์ผ ํ๋ฏ๋ก ์๋ฃจ์ ์ด ๋ณต์กํด์ง๋๋ค.
ํธ๋์ญ์ ์ด ์์๋๋ ๋์ ์ธ์คํด์ค์์ ์คํ๋๋ ๋ชจ๋ ๋ฌธ์ ํด๋น ํธ๋์ญ์ ์ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํธ๋์ญ์ ์ ์์ํ๋ ค๋ฉด ํญ์ ์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ, ์ธ์คํด์ค๋ฅผ ์ฌ์ฌ์ฉํ๋ ค๋ฉด ํ์ ์์ฑํด์ผ ํ๋ฏ๋ก ์๋ฃจ์ ์ด ๋ณต์กํด์ง๋๋ค.
์ด๊ฒ์ VSCode์์ ์ฌ์ฉํ๋ SQLite3 ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, sqlite3์ ํฌํฌ์
๋๋ค.
https://www.electronjs.org/docs/latest/tutorial/application-distribution
๋ณธ์ง์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์
๋ฐฐํฌ๋ ํน์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ง์กฑํ๋ ์ฌ์ ๋น๋๋ Electron ๋ฐ์ด๋๋ฆฌ ํจํค์ง๋ฅผ ๋ฐฐํฌํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง๋๋ค.
์๋ฅผ ๋ค์ด, Windows์์ ์๋ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ํด๋น ๋ฒ์ , ํด๋น ํ๋ซํผ์ ์ฌ์ ๋น๋๋ Electron ๋ฐ์ด๋๋ฆฌ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ,
Electron ๋๋ ํฐ๋ฆฌ์
๊ทธ ํ, ์ผ๋ฐ์ ์ผ๋ก Electron ์คํ ํ์ผ์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์์ด์ฝ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, Windows์์ ์๋ ๋ฐฐํฌ ๋ฐฉ๋ฒ์ ํด๋น ๋ฒ์ , ํด๋น ํ๋ซํผ์ ์ฌ์ ๋น๋๋ Electron ๋ฐ์ด๋๋ฆฌ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ํ๊ณ ,
Electron ๋๋ ํฐ๋ฆฌ์
resources/app ๋๋ ํฐ๋ฆฌ๋ฅผ ์์ฑํ ๋ค์ ์ ์ฒด ํ๋ก์ ํธ ํ์ผ์ ์ด ๋๋ ํฐ๋ฆฌ์ ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค.๊ทธ ํ, ์ผ๋ฐ์ ์ผ๋ก Electron ์คํ ํ์ผ์ ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐ ์์ด์ฝ ๋ณ๊ฒฝ์ด ํ์ํฉ๋๋ค.
๊ณต์ electron-packager ํจํค์ง๋ ์ ๋จ๊ณ๋ฅผ ๊ฐ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
Electron ์ ์ฉ์ tar์ ์ ์ฌํ ํ์ผ ํ์์ผ๋ก, Electron ํ๋ก์ ํธ๋ฅผ ๋จ์ผ ํ์ผ๋ก ํจํค์งํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
resources/app.asar ํ์ผ์ resources/app ํด๋๋ฅผ ๋์ฒดํ ์ ์์ต๋๋ค.์ผ๋ถ ๋ค์ดํฐ๋ธ ๋ชจ๋์ asar ํ์ผ๋ก ํจํค์ง๋ ํ ์ด ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
asar ํจํค์ง์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, Electron์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐพ๊ณ ๋ก๋ํ ์ ์์ต๋๋ค.
asar ํจํค์ง์ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ, Electron์ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐพ๊ณ ๋ก๋ํ ์ ์์ต๋๋ค.
~--asar.unpack=*.{node,dll}~๋ฅผ electron-packager์
--asar ๋์ ์ฌ์ฉํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.์ฐธ๊ณ :
- https://github.com/electron/packager/issues/424
- https://github.com/electron/asar/issues/75
=app.isPackaged=๋ Electron ์ ํ๋ฆฌ์ผ์ด์
์ด ๊ฐ๋ฐ ํ๊ฒฝ์ ์๋์ง ํ๋ก๋์
ํ๊ฒฝ์ ์๋์ง ํ๋จํ๋ ๋ฐ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ ์ด ํ๋จ ๋ฐฉ์์ ๋ค์ ์ง๊ด์ ์ด์ง ์์ต๋๋ค. Electron ์คํ ํ์ผ์ ํ์ผ ์ด๋ฆ์ด ์ฌ์ ํ electron์ธ์ง ํ์ธํ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
์ด ํจํค์ง๋ ๊ฐ ํ๋ซํผ์ฉ ์ ํ๋ฆฌ์ผ์ด์
์์ฑ์ ์๋ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์คํ ํ์ผ ์์ด์ฝ ์ค์ ์ ์ง์ํฉ๋๋ค.
- devDependencies๋ฅผ ์ญ์ ํ์ฌ ํจํค์ง ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
electron-packager๋ ignore ํ์ผ์ ๋ฐ๋ผ ํจํค์ง ๊ฒฝ๋ก๋ฅผ ๋ฌด์ํ๋ ๊ธฐ๋ฅ์ด ๋ถ์กฑํฉ๋๋ค. ํ๋
(๊ฑฐ๋ถ ์ด์ ๋ ๋ ผ๋ฆฌ์ ์ฌ์ค์ ๊ทผ๊ฑฐ๊ฐ ๋ถ์กฑํ์ต๋๋ค).
์ด ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ฉด electron-packager๋ ์ธ๋ชจ์๋ ํจํค์ง๊ฐ ๋ฉ๋๋ค. ์๋ํ๋ฉด ๋ช ๋ น์ค์ ignore ๋งค๊ฐ๋ณ์๋ฅผ ๋ง์ด ์ถ๊ฐํ์ง ์๋ ํ ๊ฐ๋ฐ ํ๊ฒฝ๋ ํจ๊ป ํจํค์ง๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
.electronignore ํ์ผ์ ๋ํ PR์ด ์์์ง๋ง ๊ฑฐ๋ถ๋์์ต๋๋ค(๊ฑฐ๋ถ ์ด์ ๋ ๋ ผ๋ฆฌ์ ์ฌ์ค์ ๊ทผ๊ฑฐ๊ฐ ๋ถ์กฑํ์ต๋๋ค).
์ด ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ฉด electron-packager๋ ์ธ๋ชจ์๋ ํจํค์ง๊ฐ ๋ฉ๋๋ค. ์๋ํ๋ฉด ๋ช ๋ น์ค์ ignore ๋งค๊ฐ๋ณ์๋ฅผ ๋ง์ด ์ถ๊ฐํ์ง ์๋ ํ ๊ฐ๋ฐ ํ๊ฒฝ๋ ํจ๊ป ํจํค์ง๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด ํ๋ก์ ํธ๋
์์ค ์ฝ๋๋ฅผ ํ์ธํ ๊ฒฐ๊ณผ, ์ด ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ฉฐ, Electron v28์์๋ ๋์์ 10๊ฐ์ Electron์ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ฒ ๋์ญํญ๊ณผ ๋ค์ด๋ก๋ ์ธก์ ๋์ญํญ์ ๊ณ ๋ คํ ๋, ์ด๋ฌํ ๋ฌด๋ถ๋ณํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ์ ํ๋ฅ ๋ง ๋์ ๋๋ค.
--all ์ต์
์ ํ์ฑํํ ๋ I/O ๋ฐ CPU ๋ฆฌ์์ค ์ฌ์ฉ๋์ด ์ํํ๋ ์์
์ ํ์ํ ์์ค๋ณด๋ค ํจ์ฌ ๋์ต๋๋ค.์์ค ์ฝ๋๋ฅผ ํ์ธํ ๊ฒฐ๊ณผ, ์ด ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ์์ ์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๋ฉฐ, Electron v28์์๋ ๋์์ 10๊ฐ์ Electron์ ๋ค์ด๋ก๋ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
์๋ฒ ๋์ญํญ๊ณผ ๋ค์ด๋ก๋ ์ธก์ ๋์ญํญ์ ๊ณ ๋ คํ ๋, ์ด๋ฌํ ๋ฌด๋ถ๋ณํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋คํธ์ํฌ ์ค๋ฅ ๋ฐ์ ํ๋ฅ ๋ง ๋์ ๋๋ค.
Windows ์ค์น ํ๋ก๊ทธ๋จ์ ์คํ ์์ค ์๋ฃจ์
.
electron-builder์ ์ํด ์ง์๋ฉ๋๋ค.
์ปค๋ฎค๋ํฐ ํจํค์ง electron-wix-msi์ ์ํด ์ง์๋ฉ๋๋ค.
Windows 8๋ถํฐ ์ง์๋๋ UWP ํ์์ผ๋ก, Microsoft Store์ ๊ฒ์ํ ์ ์์ต๋๋ค.
electron-builder๋ MakeAppx ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ appx๋ก ํจํค์งํ ์ ์์ต๋๋ค.
Microsoft๊ฐ 2018๋
๋ถํฐ ์ง์ํ๋ ์ฃผ์ ํ์์ผ๋ก, MSI๋ฅผ ๋์ฒดํ๊ณ Windows 10 ์ด์ ์์คํ
์ ์ฌ์ฉ๋๋ฉฐ, Microsoft Store์ ๊ฒ์ํ ์ ์์ต๋๋ค.
- Electron ์ปค๋ฎค๋ํฐ์๋ ์์ง MSIX ํจํค์ง ์๋ฃจ์ ์ด ์กด์ฌํ์ง ์์ต๋๋ค.
- ํจํค์ง ์๋ฃจ์ ์ ๊ณต์ ์ฒด Advanced Installer๋ Electron ํ๋ก์ ํธ๋ฅผ MSIX๋ก ํจํค์งํ๋ ๊ฒ์ ์ง์ํฉ๋๋ค.
- Microsoft ๊ณต์ ์ ๊ณต MSIX Packaging Tool์ EXE ๋๋ MSI ์ค์น ํ๋ก๊ทธ๋จ์ MSIX๋ก ๋ค์ ํจํค์งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค:
https://docs.microsoft.com/en-us/windows/msix/packaging-tool/create-app-package
Electron์๋ ChromeDriver ๊ธฐ๋ฐ์ ๊ณต์์ ์ผ๋ก ์ ์ง ๋ณด์๋๋ ํ
์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Spectron์ด ์์์ง๋ง, ์ ์ง ๋ณด์์ ๋ถ์กฑ์ผ๋ก 2022๋
์ด์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฒ ๋์์ต๋๋ค.
Spectron์ ์ ์ฌ์ ์ธ ๋์ฒด ์๋ฃจ์
์ Playwright์
๋๋ค.
๊ทธ๋ฌ๋ Playwright v1.16 ํ์ฌ, Playwright ๊ธฐ๋ฐ ํ ์คํธ๋ ์ฌ์ ํ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฉฐ ๋๋ถ๋ถ ์ฌ์ฉํ ์ ์์ต๋๋ค:
๊ทธ๋ฌ๋ Playwright v1.16 ํ์ฌ, Playwright ๊ธฐ๋ฐ ํ ์คํธ๋ ์ฌ์ ํ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด๋ฉฐ ๋๋ถ๋ถ ์ฌ์ฉํ ์ ์์ต๋๋ค:
- ์ค๋ฅ๋ฅผ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค.
- evaluate๋ Node.js ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
์ฐฝ ์ค๋ฒ๋ ์ด๋ฅผ ์์ฑํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ.
Electron ํ๋ก๊ทธ๋จ์ ํตํฉ ๊ฐ๋ฐ ๋ฐ ํจํค์ง.
Electron ํ๋ก๊ทธ๋จ์ ํตํฉ ํจํค์ง ๋ฐ ๋ฐฐํฌ.
๋ฌธ์๊ฐ ๋น๊ทน์ ์ผ ์ ๋๋ก ์ผ๊ด์ฑ์ด ์์ต๋๋ค.
Electron์ Node.js์ ๋ค๋ฅธ ๋ฒ์ ์ ABI๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, npm๊ณผ yarn์ด ํ์ฌ Node.js ๋ฒ์ ์ ๋์์ผ๋ก ๋ค์ด๋ก๋ํ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ง์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
electron-rebuild๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค.
electron-rebuild๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋๊ตฌ์ ๋๋ค.
์ ์ง ๋ณด์์ฑ ์ธก๋ฉด์์ electron-rebuild๊ฐ ํ์ํ ๋ค์ดํฐ๋ธ ๋ชจ๋์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
- electron-rebuild๋ ์ฌ๋ฐ๋ฅธ ABI ๋ฒ์ ์ ์ ํํ ์ ์์ผ๋ฏ๋ก, electron-rebuild์ ์์กดํ๋ ๋ชจ๋์ ์ ๊ทธ๋ ์ด๋ํ๊ธฐ ์ด๋ ค์ด ์ข ์์ฑ์ผ๋ก ๋ฐ์ ํ ์ ์์ต๋๋ค.
https://github.com/electron/electron-rebuild/issues/886 - ๊ณต์ ์ ์ฅ์์ ์ํ์ง๋ง, electron-rebuild๋ ์ข ์ข Electron์ ์ต์ ๋ฒ์ ์ ๋ฐ๋ผ๊ฐ์ง ๋ชปํฉ๋๋ค.