Framework/Electron

๋‹ค์ค‘ ์ ‘์† ํŽธ์ง‘ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์†Œ์ผ“์„ ์‚ฌ์šฉํ•ด๋ณด๊ณ ์ž๊ฐ„๋‹จํ•œ ์ฑ„ํŒ…์„ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ ํ•œ๋‹ค. ๋กœ๊ทธ์ธ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ ์ฑ„ํŒ…๋ฐฉ์„ ์ž…๋ ฅํ•˜๋ฉด ์ƒˆ๋กœ์šด ์œˆ๋„์šฐ์— ์ฑ„ํŒ…๋ฐฉ์„ ์—ด์–ด์ค€๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋ฉ”์ธ ์œˆ๋„์šฐ๋ฅผ ๋‹ซ์œผ๋ฉด ๋ชจ๋“  ์œˆ๋„์šฐ๋ฅผ ๋‹ซ์•„๋ฒ„๋ฆด์ง€ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€.๋ ˆํผ๋Ÿฐ์Šค๋Š” ์นด์นด์˜คํ†ก์œผ๋กœ ์žก์•˜์œผ๋ฉฐ, ์ฑ„ํŒ…์ฐฝ์ด ์—ด๋ฆฐ ์ƒํƒœ์—์„œ ๋ฉ”์ธ ์œˆ๋„์šฐ(์ฑ„ํŒ…์ฐฝ ๊ด€๋ฆฌ ์œˆ๋„์šฐ)๊ฐ€ ๊บผ์ ธ๋„ ์ฑ„ํŒ…์ฐฝ์€ ์‚ด์•„์žˆ๋‹ค. ์œ„ ๋‚ด์šฉ์„ ๋ณด๋ฉดโ“์†Œ์ผ“๋งŒ ํ…Œ์ŠคํŠธํ•˜์ง€ ์™œ?์งˆ๋ฌธ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๋‚˜๋Š” ๋ญ”๊ฐ€ ์™„๋ฒฝํ•จ(?)์„ ์ถ”๊ตฌํ•˜์—ฌ์„œ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค๋”๋ผ๋„ ์ œ๋Œ€๋กœ ๋งŒ์ ธ๋ณด๊ณ ์‹ถ๋‹ค. ๐Ÿ—๏ธ WindowManager์šฐ์„  ์œˆ๋„์šฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งค๋‹ˆ์ €๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๋‚ด๊ฐ€ ๋งŒ๋“  ๋งค๋‹ˆ์ €์˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.๊ธ€์„ ์•ˆ ๋ณด๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด๊ณ  ์‹ถ์€ ์‚ฌ๋žŒ์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด๊ณ  ์ง์ ‘ ๊ตฌํ˜„ํ•ด๋ณด์•„๋„ ์ข‹๋‹ค.export ..
๋‚˜๋งŒ์˜ ๋ฐ์Šคํฌ ์•ฑ์„ ๋งŒ๋“œ๋ ค๋Š”๋ฐ ๊ณ ์ „์ ์ธ ์Šคํƒ€์ผ์˜ ์ƒ๋‹จ ํƒ€์ดํ‹€ ๋ฐ”๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š๋Š”๋‹ค. Youtube Music์˜ ๋ฐ์Šคํฌํƒ‘ ์•ฑ๋งŒ ๋ณด๋”๋ผ๋„ ๋ญ”๊ฐ€ ๋‹ค์–‘ํ•˜๋‹ค. ( ์œ ํŠœ๋ธŒ ๋Œ€๊ธฐ์—… ์น˜๊ณ ๋Š” ๋ชป ์ƒ๊ธด ๊ฑฐ ๊ฐ™๋‹ค...) ์šฐ๋ฆฌ๋„ ์ปค์Šคํ…€ํ•ด๋ณด์ž. ๐Ÿ—‘๏ธ ํƒ€์ดํ‹€๋ฐ” ํ”„๋ ˆ์ž„ ์ œ๊ฑฐ ์šฐ์„  ๊ธฐ์กด TitleBar๋Š” ์‚ฌ๋ผ์ง€๋„๋ก ๐Ÿ“„electron/main.ts ์—์„œ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ํƒ€์ดํ‹€๋ฐ”์™€ ๋ฉ”๋‰ด๋ฐ”๊ฐ€ ์—†๋Š” ์ƒํƒœ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.unction createWindow() { win = new BrowserWindow({ icon: path.join(process.env.VITE_PUBLIC, "electron-vite.svg"), webPreferences: { preload: path.join(__dirname, ..
โš™๏ธ๊ตฌ์กฐElectron-vite ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํด๋”๊ฐ€ ๊ตฌ์„ฑ๋œ๋‹ค.๐Ÿญ ๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค๐Ÿ“„electron/main.ts import { app, BrowserWindow } from 'electron'import { createRequire } from 'node:module'import { fileURLToPath } from 'node:url'import path from 'node:path'โœ… app : Electron์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ ์ œ์–ดโœ… BrowserWindow: ์ฐฝ(์œˆ๋„์šฐ) ์ƒ์„ฑ ํด๋ž˜์Šคโœ… createRequire/fileURLtoPath: ES Module ํ™˜๊ฒฝ์—์„œ __dirname, require ์‚ฌ์šฉ์„ ์œ„ํ•œ ์„ค์ • process.env.APP_ROOT = path.join(__di..
๊ธฐ์กด ์ž‘์—…ํ•˜๋˜ ํ”„๋กœ์ ํŠธ์—์„œ ์ผ๋ ‰ํŠธ๋ก ์„ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค์€์ œ velog electron์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”. [ Electron ] ๋กœ์ปฌ์—์„œ ์ผ๋ ‰ํŠธ๋ก  ์‹คํ–‰[ Electron ] ๋กœ์ปฌ์—์„œ ์ผ๋ ‰ํŠธ๋ก  ์‹คํ–‰์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์žvelog.io ์ž‘์„ฑ์ž๋Š” vite์™€ electron์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ฏ€๋กœ ํ•œ ๋ฒˆ์— ์„ค์น˜ํ•  ๊ฒƒ์ด๋‹ค. โฌ‡๏ธ ์„ค์น˜npm create electron-vite ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. > npx> cev .? Project tempalte: // ์›ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์„ ํƒ> Vue> React> VanillaScaffolding Project in Done. Now run: ์›ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ•˜๋ฉด ์ค€๋น„๋Š” ๋๋‚œ๋‹ค. ํด๋”์— ์ ‘๊ทผํ•˜์—ฌnpm install์„ ํ†ตํ•ด ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋“ค์„ ๋‹ค์šด ๋ฐ›์•„์ค€๋‹ค. ๐Ÿƒ?..
โšกElectron์ด๋ž€?Electron(์ดํ•˜, ์ผ๋ ‰ํŠธ๋ก )์€ ์›น ๊ธฐ์ˆ (HTML, CSS, JavaScript)์„ ์ด์šฉํ•˜์—ฌ ๋ฐ์Šคํฌํ†ฑ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.Chrome ๊ธฐ๋ฐ˜์˜ ๋ Œ๋”๋Ÿฌ + Node.js ๋Ÿฐํƒ€์ž„์„ ๋ฌถ์–ด ์ œ๊ณตํ•˜๋ฏ€๋กœ ์›น ๊ฐœ๋ฐœ์ž๋Š” ๋ณ„๋„์˜ ์–ธ์–ด๋ฅผ ๋ฐฐ์šฐ์ง€ ์•Š๊ณ ๋„ ๋ฐ์Šคํฌํƒ‘ ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌ๋˜์–ด ์žˆ๋‹ค.โš™๏ธ ๊ตฌ์กฐ๐Ÿญ Main Process์•ฑ์˜ ์ƒ๋ช…์ฃผ๊ธฐ, ๋ฉ”๋‰ด, ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ ๊ฐ™์€ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋Šฅ์„ ๊ด€๋ฆฌํ•œ๋‹ค. ๐ŸŽจ Renderer ProcessChrominum ๊ธฐ๋ฐ˜์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” UI ์˜์—ญ (์›น ํŽ˜์ด์ง€์ฒ˜๋Ÿผ ๋™์ž‘)์ฆ‰, "Node.js + ์›น๋ธŒ๋ผ์šฐ์ € ์—”์ง„์„ ํ•จ๊ป˜ ๋ฒˆ๋“ค๋งํ•œ ๋ฐ์Šคํฌํ†ฑ ์•ฑ ๋Ÿฐํƒ€์ž„"์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ๐Ÿ‘๐Ÿป ์žฅ์ โœ… ์›น ๊ธฐ์ˆ ๋งŒ์œผ๋กœ Wind..
ma.caron_g
'Framework/Electron' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก