Concept

  • OpenJS Foundation μ‚°ν•˜μ—μ„œ μœ μ§€Β·κ΄€λ¦¬λ˜λŠ” μ˜€ν”ˆμ†ŒμŠ€ ν”„λ ˆμž„μ›Œν¬
  • λͺ©μ : λ°μŠ€ν¬ν†± 앱을 μ›Ή 기술(HTML/CSS/JS/TS) 둜 κ°œλ°œν•˜κ³ , ν¬λ‘œμŠ€ν”Œλž«νΌ(Windows/macOS/Linux) 으둜 배포
  • 핡심 ꡬ성
    • UI λ Œλ”λ§: Chromium
    • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λŸ°νƒ€μž„/μ‹œμŠ€ν…œ μž‘μ—…: Node.js
  • 역사
    • μ΅œμ΄ˆμ—λŠ” GitHub의 Atom을 μœ„ν•΄ λ§Œλ“€μ–΄μ§
    • 이후 GitHub Desktop, Light Table, WordPress Desktop λ“± λ‹€μ–‘ν•œ λ°μŠ€ν¬ν†± μ•±μ—μ„œ μ‚¬μš©

Architecture (ꡬ쑰)

  • Electron 앱은 β€œμ•± 내뢀에 Chromium + Node.js λŸ°νƒ€μž„μ„ ν¬ν•¨β€ν•˜λŠ” ν˜•νƒœ
  • 큰 흐름
    • Chromium: ν™”λ©΄ λ Œλ”λ§κ³Ό μ›Ή ν”Œλž«νΌ μ‹€ν–‰(HTML/CSS/SVG/JS)
    • Node.js: 파일/λ„€νŠΈμ›Œν¬/ν”„λ‘œμ„ΈμŠ€ λ“± μ‹œμŠ€ν…œ μž‘μ—… μˆ˜ν–‰
    • Native layer & bindings: μ‹€μ œ OS API ν˜ΈμΆœμ„ λ‹΄λ‹Ήν•˜λŠ” λ„€μ΄ν‹°λΈŒ μ½”λ“œ(C++/Objective-C λ“±) + JS 바인딩

κ°œλ°œμžκ°€ μ‹€μ œλ‘œ κ°œλ°œν•˜λŠ” μ˜μ—­

  • 일반적인 μ•± κ°œλ°œμžλŠ” Electron App μ˜μ—­(Main/Renderer + ν•„μš” μ‹œ preload) 의 JS/TS μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€.
  • Native layer & bindingsλŠ” 보톡 Electron ν”„λ ˆμž„μ›Œν¬ λ‚΄λΆ€ κ΅¬ν˜„(ν”Œλž«νΌλ³„ λ„€μ΄ν‹°λΈŒ μ½”λ“œ + JS 바인딩)이라 μ•± κ°œλ°œμžκ°€ 직접 μˆ˜μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • μ˜ˆμ™Έμ μœΌλ‘œ κ°œλ°œμžκ°€ Native μͺ½μ„ λ‹€λ£° 수 μžˆλŠ” 경우
  1. Electron/Nodeλ‘œλŠ” λΆ€μ‘±ν•œ κΈ°λŠ₯이 μžˆμ–΄ λ„€μ΄ν‹°λΈŒ ν™•μž₯(Native Node Addon, λ„€μ΄ν‹°λΈŒ λͺ¨λ“ˆ) 을 직접 λ§Œλ“€κ±°λ‚˜ 뢙일 λ•Œ
  2. Electron μžμ²΄μ— μ»¨νŠΈλ¦¬λ·°μ…˜/ν¬ν¬ν•˜μ—¬ ν”„λ ˆμž„μ›Œν¬ λ ˆλ²¨μ„ μˆ˜μ •ν•  λ•Œ

Process model (ν”„λ‘œμ„ΈμŠ€)

  • Main / Renderer ν”„λ‘œμ„ΈμŠ€ λͺ¨λΈμ„ μ‚¬μš©

Main process

  • μ•± 생λͺ…주기와 μ‹œμŠ€ν…œ μ—°λ™μ˜ β€œμ€‘μ•™β€
  • μ°½ 생성/관리, 메뉴/트레이/λ‹€μ΄μ–Όλ‘œκ·Έ λ“± OS 연동 κΈ°λŠ₯을 주둜 λ‹΄λ‹Ή
  • BrowserWindow둜 Renderer ν”„λ‘œμ„ΈμŠ€λ₯Ό 생성/관리
  • Rendererμ™€λŠ” IPC둜 톡신 (ipcMain λ“±)

Renderer process

  • 각 μ°½(μ›Ή νŽ˜μ΄μ§€) λ‹¨μœ„λ‘œ μ‹€ν–‰λ˜λŠ” ν”„λ‘œμ„ΈμŠ€
  • Chromiumμ—μ„œ UI(HTML/CSS/SVG)λ₯Ό λ Œλ”λ§ν•˜κ³ , ν”„λ‘ νŠΈμ—”λ“œ λ‘œμ§μ„ μ‹€ν–‰
  • Mainκ³Ό IPC둜 톡신 (ipcRenderer λ“±)

μ°Έκ³ : Node 톡합 μ—¬λΆ€(예: nodeIntegration)와 λ³΄μ•ˆ μ˜΅μ…˜μ€ 섀정에 따라 λ‹¬λΌμ§ˆ 수 μžˆλ‹€.


API / κ΅¬ν˜„ 방식

  • κ°œλ°œμžκ°€ μ‚¬μš©ν•˜λŠ” Electron APIλŠ” λŒ€λΆ€λΆ„ JavaScript둜 λ…ΈμΆœλ˜μ§€λ§Œ,
  • λ‚΄λΆ€ κ΅¬ν˜„μ€ ν”Œλž«νΌλ³„λ‘œ C++ / Objective-C(특히 macOS) λ“± λ„€μ΄ν‹°λΈŒ μ½”λ“œλ‘œ μž‘μ„±λ˜κ³  JS 바인딩을 톡해 μ œκ³΅λœλ‹€.
  • 즉, κ°œλ°œμžλŠ” JS/TS둜 APIλ₯Ό ν˜ΈμΆœν•˜κ³ , μ‹€μ œ OS API ν˜ΈμΆœμ€ λ„€μ΄ν‹°λΈŒ λ ˆμ΄μ–΄κ°€ μˆ˜ν–‰ν•œλ‹€.

Mermaid μ‹œκ°ν™” (Top: Electron β†’ Bottom: OS)

flowchart TB

subgraph E[Electron App]
  direction TB

  subgraph MP[Main process]
    direction TB
    MJS[App logic JS TS]
    EAPI[Electron JS API\napp BrowserWindow ipcMain]
    MNode[Node runtime\nfs net child_process]
    MJS --> EAPI
    MJS --> MNode
  end

  subgraph RP[Renderer process]
    direction TB
    UI[UI HTML CSS SVG]
    RJS[Renderer logic JS TS]
    Chromium[Chromium renderer and V8]
    IPC[IPC bridge\nipcRenderer to ipcMain]
    UI --> Chromium
    RJS --> Chromium
    RJS <--> IPC
  end

  IPC <--> MP
end

subgraph NL[Native layer and bindings]
  direction TB
  NativeModules[Native modules\nC++ and Objective-C\nJS bindings]
end

subgraph OS[Operating system]
  direction TB
  Win[Windows APIs]
  Mac[macOS APIs]
  Lin[Linux APIs]
end

EAPI --> NativeModules
MNode --> NativeModules
NativeModules --> Win
NativeModules --> Mac
NativeModules --> Lin

Usage

  • Electron은 λ‹€μ–‘ν•œ λ°μŠ€ν¬ν†± μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ¨
  • (Wikipedia β€œUsage” μ„Ήμ…˜ κΈ°μ€€) μ˜ˆμ‹œ:
    • Slack
    • Discord
    • GitHub Desktop
    • WordPress Desktop
    • Light Table
    • (κ·Έ μ™Έ λ‹€μˆ˜)

μ°Έκ³ : νŠΉμ • 앱이 β€œν˜„μž¬λ„β€ Electron을 μ“°λŠ”μ§€ μ—¬λΆ€λŠ” μ‹œκ°„μ΄ μ§€λ‚˜λ©° λ°”λ€” 수 μžˆμ–΄, ν•„μš”ν•˜λ©΄ μ΅œμ‹  곡식 λ°œν‘œ/λ¬Έμ„œλ‘œ ꡐ차 ν™•μΈν•˜λŠ” 것이 μ•ˆμ „ν•¨.


Reception (평가) β€” 자주 μ–ΈκΈ‰λ˜λŠ” μž₯/단점

κ΅¬λΆ„λ‚΄μš©λ‰˜μ•™μŠ€/λΉ„κ³ 
μž₯점웹 기술(HTML/CSS/JS/TS) 기반으둜 λΉ λ₯Έ κ°œλ°œμ›Ή 개발자 μΉœν™”, 생산성 λ†’μŒ
μž₯μ ν¬λ‘œμŠ€ν”Œλž«νΌ 단일 μ½”λ“œλ² μ΄μŠ€λ°°ν¬/μœ μ§€λ³΄μˆ˜ 효율
μž₯점Chromium 기반 λ Œλ”λ§/μ›Ή μƒνƒœκ³„ ν™œμš©UI κ΅¬ν˜„/ν‘œν˜„λ ₯ 유리
μž₯점Node.js λŸ°νƒ€μž„μœΌλ‘œ μ‹œμŠ€ν…œ μž‘μ—… κ°€λŠ₯파일/λ„€νŠΈμ›Œν¬/ν”„λ‘œμ„ΈμŠ€ λ“±
λ‹¨μ λ‹¨μˆœ 앱에도 Chromium λ²ˆλ“€ 포함 β†’ μš©λŸ‰/λ©”λͺ¨λ¦¬/CPU 증가(software bloat)β€œλ¬΄κ²λ‹€β€ λΉ„νŒμ΄ 흔함
단점Linuxμ—μ„œ λ¦¬μ†ŒμŠ€ μ‚¬μš©λŸ‰/λ„€μ΄ν‹°λΈŒ 톡합성 λΆ€μ‘± λΆˆλ§Œν…Œλ§ˆ/λ‹€μ΄μ–Όλ‘œκ·Έ/트레이 λ“±
단점기λŠ₯ 집합이 컀 곡격 ν‘œλ©΄μ΄ λ„“λ‹€λŠ” μ§€μ μ†ŒμŠ€ JS λ³€κ²½ κ°€λŠ₯ ν™˜κ²½ μ „μ œ
단점Chromium μ—…λ°μ΄νŠΈκ°€ 항상 μ΅œμ‹ μ΄ 아닐 수 μžˆμŒλŒ€μ•ˆμœΌλ‘œ PWA μΆ”μ²œ 의견 쑴재

μ°Έκ³ λ¬Έμ„œ