ํ™ˆ ์ผ๋ ‰ํŠธ๋ก  Main Process - app
ํฌ์ŠคํŠธ
์ทจ์†Œ

์ผ๋ ‰ํŠธ๋ก  Main Process - app

๐Ÿ’ป app ๋ชจ๋“ˆ

Main Process์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž„ํฌํŠธํ•ด์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๋ฉฐ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

1
const { app } = require("electron");

Node.js์˜ Event Emitter๋ฅผ ์ƒ์†๋ฐ›์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฒคํŠธ๋“ค์„ ์ˆ˜์‹ ํ•ด ์ ์ ˆํ•œ ๋กœ์ง์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. app ๋ชจ๋“ˆ์—์„œ ์ˆ˜์‹ ํ•˜๋Š” ์ด๋ฒคํŠธ์™€ ํ•จ์ˆ˜๋“ค ๋ช‡๊ฐ€์ง€๋ฅผ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป ready

1
2
3
app.on("ready", (event, lauchInfo) => {
  //
});

์ผ๋ ‰ํŠธ๋ก ์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ ๋˜์—ˆ์„ ๋•Œ, ๋”ฑ ํ•œ๋ฒˆ ์‹คํ–‰๋˜๋Š” ์ƒ๋ช…์ฃผ๊ธฐ ์ž…๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ผ๋ ‰ํŠธ๋ก  ๋กœ์ง์€ ์ด ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋œ ํ›„ ์‹คํ–‰๋˜๊ฒŒ๋” ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ํ™˜๊ฒฝ์ด macOS๋ผ๋ฉด launchInfo ์ธ์ž๋ฅผ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์•Œ๋ฆผ ์„ผํ„ฐ๋ฅผ ํ†ตํ•ด ์‹คํ–‰ํ–ˆ์„ ๊ฒฝ์šฐ ํ•ด๋‹น ์ธ์ž๊ฐ€ ๋„˜์–ด์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์œ„ ์ด๋ฒคํŠธ์™€ ๊ด€๋ จ๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜ ๋‘๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
// "ready" ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํ™•์ธ
app.isReady();

// "ready" ์ด๋ฒคํŠธ๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ ๋˜์—ˆ์„ ๋•Œ promise๋ฅผ ๋ฐ˜ํ™˜
/**
 * .on("ready", () => {}) ์™€ ๊ฐ™์€ ์—ญํ• ์ด์ง€๋งŒ
 * ์œ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ, ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
 * https://github.com/electron/electron/pull/21972
 */
app.whenReady().then(() => {
  //
});

๐Ÿ’ป before-quit

1
2
3
app.on("before-quit", (event) => {
  //
});

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๊ธฐ ์ง์ „์— ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ด๋ฒคํŠธ์ž…๋‹ˆ๋‹ค. e.preventDefault()๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„ ์ข…๋ฃŒ๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด, ์ด๋ฒคํŠธ๋Š” ํŠธ๋ฆฌ๊ฑฐ๋˜์ง€๋งŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป browser-window-blur

1
2
3
4
5
app.on("browser-window-blur", (event, window) => {
  setTimeout(() => {
    app.quit();
  }, 3000);
});

browserWindow๊ฐ€ blur ์ฆ‰ ํฌ์ปค์Šค๋ฅผ ์žƒ์—ˆ์„ ๋•Œ, ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ด๋ฒคํŠธ ์ž…๋‹ˆ๋‹ค. ์œ„ ๋กœ์ง์€ browserWindow์˜ ํฌ์ปค์Šค๊ฐ€ ์‚ฌ๋ผ์ง„ ํ›„, 3์ดˆ ํ›„์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข…๋ฃŒ๋˜๋„๋ก ํ•˜๋Š” ๋กœ์ง์ž…๋‹ˆ๋‹ค.

๐Ÿ’ป browser-window-focus

1
2
3
app.on("browser-window-focus", (event, window) => {
  //
});

browser-window-blur์™€ ๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ ํŠธ๋ฆฌ๊ฑฐ๋˜๋Š” ์ด๋ฒคํŠธ ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ป getAppPath()

ํ˜„์žฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ๋กœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜ ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ป getPath(name)

name์— ํ•ด๋‹นํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์˜ ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ(home), ๋ฌธ์„œ ํด๋”(document)๋“ฑ์˜ ๊ฒฝ๋กœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฒฝ๋กœ์˜ ์ด๋ฆ„์€ electron ๋ฌธ์„œ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป quit()

๋ชจ๋“  ์ฐฝ๋“ค์„ ๋‹ซ๊ฒŒํ•˜๋Š” ์ด๋ฒคํŠธ ์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๋ฉด, before-quit์ด๋ฒคํŠธ๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๊ณ , ๋ชจ๋“  ์ฐฝ์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ข…๋ฃŒ๋˜๋ฉด will-quit ์ด๋ฒคํŠธ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

quit ๋ฉ”์†Œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด beforeunload ์™€ unload ์ด๋ฒคํŠธ๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ beforeunload๊ฐ€ false๋ฅผ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ•˜๋ฉด ์ข…๋ฃŒ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

์ผ๋ ‰ํŠธ๋ก  ๊ธฐ์ดˆ

Webpack ๊ธฐ๋ณธ ์„ค์ •