๐ŸŒฑ ํ•จ์ •์”จ์•—: console.log๊ฐ€ Electron ํ”„๋กœ์ ํŠธ๋ฅผ ๋ง์น˜๋Š” ์ˆœ๊ฐ„

์†ก์—ฐ์ง€ยท2025๋…„ 7์›” 31์ผ
6

ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ํ•œ ๋ฒˆ์ฏค console.log("ํ™•์ธ")์„ ์ฐ์–ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒ๋‹ˆ๋‹ค. ์ €๋„ ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊น…์˜ ๋“ ๋“ ํ•œ ์นœ๊ตฌ, ์–ธ์ œ ์–ด๋””์„œ๋‚˜ ํ˜ธ์ถœํ•˜๋ฉด ๋‚˜ํƒ€๋‚˜๋Š” log ์นœ๊ตฌ.

ํ•˜์ง€๋งŒ Electron ํ”„๋กœ์ ํŠธ์—์„  ์ด ์นœ๊ตฌ๊ฐ€ ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์˜ ์ฃผ๋ฒ”์ด ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ป Electron ํ™˜๊ฒฝ์˜ ๋กœ๊ทธ, ์™œ ํŠน๋ณ„ํ•œ๊ฐ€์š”?

Electron์€ ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค:

๊ตฌ์„ฑ์„ค๋ช…
Renderer ProcessReact๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ (Chromium ๊ธฐ๋ฐ˜)
Main ProcessNode.js ๊ธฐ๋ฐ˜ ๋ฐฑ๊ทธ๋ผ์šด๋“œ (Electron ์—”์ง„)

โœ… ๋ฌธ์ œ๋Š” ์—ฌ๊ธฐ์„œ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค

์ด ๋‘˜์€ ๋กœ๊ทธ๋ฅผ ์ฐ๋Š” ๋ฐฉ์‹๋„, ๋กœ๊ทธ๊ฐ€ ์‹œ์Šคํ…œ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ๋„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

  • Renderer ๋กœ๊ทธ (console.log)
    • ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์ฒ˜๋Ÿผ ์ž‘๋™
    • ๋งŽ์ด ์ฐํžˆ๋ฉด ๋ Œ๋”๋ง ์ง€์—ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๊ฐ€๋Šฅ
    • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ๋ณผ ์ˆ˜ ์žˆ์Œ
    • ๋ฌดํ•œ ๋ฃจํ”„๋‚˜ interval ๋กœ๊ทธ๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ UI์— ์˜ํ–ฅ
  • Main ๋กœ๊ทธ (console.log)
    • Node.js์˜ stdout์œผ๋กœ ์ถœ๋ ฅ
    • ๋กœ๊ทธ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋””์Šคํฌ IO ๋ณ‘๋ชฉ, ํ”„๋กœ์„ธ์Šค ์ง€์—ฐ, ๋ฆฌ์†Œ์Šค ๋ˆ„์ˆ˜ ๊ฐ€๋Šฅ
    • ํŠนํžˆ ๋ณด์•ˆ ์†”๋ฃจ์…˜์ด๋‚˜ ๋ฐ๋ชฌ์ฒ˜๋Ÿผ ์ž‘๋™ํ•˜๋Š” ์•ฑ์ผ์ˆ˜๋ก, ์•ˆ์ •์„ฑ์ด ์ค‘์š”

๊ฒฐ๊ตญ, ๋‹จ์ˆœํžˆ โ€œ๋กœ๊ทธ ์ข€ ๋งŽ๋„คโ€ ์ˆ˜์ค€์ด ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ์ €ํ•˜, ์‚ฌ์šฉ์ž ๋ถˆํŽธ, ์‹ฌ์ง€์–ด ๋ณด์•ˆ ์ด์Šˆ๋กœ๋„ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.


๐Ÿšจ ์‹ค์ „์—์„œ ๊ฒช์€ ๋ฌธ์ œ

์ œ๊ฐ€ ์ฐธ์—ฌํ•œ ๋ณด์•ˆ ์†”๋ฃจ์…˜ ๊ธฐ๋ฐ˜ Electron ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋กœ๊ทธ๋“ค์ด ์ง€์†์ ์œผ๋กœ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค:

  • Named Pipe ํ†ต์‹  ๋กœ๊น…
  • ์‹œ์Šคํ…œ ์ •๋ณด ์ˆ˜์ง‘ ๋กœ๊ทธ
  • JSON ์ €์žฅ/ํŒŒ์‹ฑ ๋กœ๊น…
  • ๋ณด์•ˆ ์ƒํƒœ ์ฒดํฌ ๋ฐ ์‚ฌ์šฉ์ž ํ–‰๋™ ๋กœ๊ทธ

์ดˆ๋‹น ์ˆ˜์‹ญ ๊ฐœ์˜ ๋กœ๊ทธ๊ฐ€ ์ฐํžˆ๋‹ค ๋ณด๋‹ˆ:

  • ๋ Œ๋”๋Ÿฌ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜
  • CPU ์‚ฌ์šฉ๋Ÿ‰์ด 6~8% ์ด์ƒ ๊ณ ์ •๋˜๊ฑฐ๋‚˜
  • ํ†ต์‹ ์ด ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ง€์—ฐ๋˜๊ฑฐ๋‚˜
  • ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ–ˆ์Œ์—๋„ ๋‚ด๋ถ€ ์ž์› ๋ˆ„์ˆ˜ ๋ฐœ์ƒ

์ด๋Ÿฐ ์ฆ์ƒ์ด ์‹ค์ œ๋กœ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ˜… ์•ˆ์ผํ–ˆ๋˜ ์ƒ๊ฐ: "์–ด์ฐจํ”ผ ๋ฐฐํฌ์šฉ์€ devtool ๋ง‰์•˜์ž–์•„?"

Electron์—์„  ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ, log๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๊ท€์ฐฎ์•„์„œ ์ˆ˜๋ฐฑ ์ค„์˜ console.log๋ฅผ ์•ˆ ์ง€์› ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜”

ํ•˜์ง€๋งŒโ€ฆ

console.log("โœ… ์š”์ฒญ ์„ฑ๊ณต", response);
console.log("๐Ÿ“ ํ˜„์žฌ ์ƒํƒœ", status);
console.log("๐Ÿšจ ์˜ˆ์™ธ ๋ฐœ์ƒ", error)

์ด๋Ÿฐ ๋กœ๊ทธ๊ฐ€ ๊ณ„์† ์Œ“์ด๋ฉด, ๋ Œ๋”๋ง ์ง€์—ฐ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜, ๋””์Šคํฌ I/O ๋ถ€ํ•˜๋กœ ์ด์–ด์ง€๋Š” ๊ฑธ ์‹ค์ œ๋กœ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿฆธ ๊ตฌ์›์ž ๋“ฑ์žฅ โ€” vite-plugin-remove-console

์ˆ˜๋™์œผ๋กœ ์ผ์ผ์ด ์‚ญ์ œํ•˜๋Š” ๊ฑด ๋„ˆ๋ฌด ๋น„ํšจ์œจ์ ์ด์—ˆ๊ณ , ๊ตฌ๊ธ€๋ง ๋„์ค‘ ๋ฐœ๊ฒฌํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋ฐ”๋กœ ์ด ๊ตฌ์›์ž์ž…๋‹ˆ๋‹ค.

๐Ÿ“ฆ ์„ค์น˜ ๋ฐ ์„ค์ •

npm i vite-plugin-remove-console -D
// vite.config.ts
import removeConsole from 'vite-plugin-remove-console';

export default defineConfig({
  plugins: [
    react(),
    removeConsole({
      include: ['**/*.ts', '**/*.tsx'],
    }),
  ],
});

โœ… ํšจ๊ณผ

  • console.log, console.debug, console.info โ†’ ๋นŒ๋“œ์‹œ ์ž๋™ ์ œ๊ฑฐ
  • ๊ฐœ๋ฐœ ๋ชจ๋“œ์—์„œ๋Š” ๊ธฐ์กด ์ฝ”๋“œ ๊ทธ๋Œ€๋กœ ์œ ์ง€
  • ์‹ค์ˆ˜๋กœ ๋ฐฐํฌ์— ๋””๋ฒ„๊น… ๋กœ๊ทธ๊ฐ€ ํฌํ•จ๋  ์œ„ํ—˜ ๋ฐฉ์ง€
  • Renderer ์„ฑ๋Šฅ ์ €ํ•˜ ์˜ˆ๋ฐฉ (ํŠนํžˆ ๋งŽ์€ ๋กœ๊ทธ๋ฅผ ์ฐ๋Š” ํŽ˜์ด์ง€์—์„œ ํšจ๊ณผ ํผ)

+ ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์šฉ๋„ํŠน์ง•
vite-plugin-remove-console๊ฐœ๋ฐœ ๋กœ๊ทธ ์ œ๊ฑฐ๋นŒ๋“œ ์‹œ log/debug/info ์ž๋™ ์ œ๊ฑฐ
electron-log์šด์˜ ๋กœ๊ทธ ๊ธฐ๋ก๋ฉ”์ธ ํ”„๋กœ์„ธ์Šค ๋กœ๊ทธ ํŒŒ์ผ ์ €์žฅ
winston๊ณ ๊ธ‰ ๋กœ๊ฑฐ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ ๊ด€๋ฆฌ, ํŒŒ์ผ/์ฝ˜์†” ์ถœ๋ ฅ ๋ณ‘ํ–‰ ๊ฐ€๋Šฅ
pino์ดˆ๊ณ ์† ๋กœ๊ฑฐ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ํ™˜๊ฒฝ์— ์ ํ•ฉ, Electron๊ณผ๋Š” ๋œ ์–ด์šธ๋ฆผ

โœ… ํ•˜์ง€๋งŒ ๋กœ๊ทธ๋Š” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค โ€” electron-log

Renderer์—์„œ๋Š” console.log๋ฅผ ์ง€์šฐ์ง€๋งŒ, Main Process์—์„œ๋Š” ๋กœ๊ทธ๋ฅผ ๋ฐ˜๋“œ์‹œ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์™œ๋ƒ๊ณ ์š”? Electron ์•ฑ์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ๋Œ€๋ถ€๋ถ„ Main์—์„œ ์ฒ˜๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ œ๊ฐ€ ๋งก์€ ํ”„๋กœ์ ํŠธ๋งŒ ํ•ด๋„:

  • Named Pipe๋ฅผ ํ†ตํ•œ ๋ณด์•ˆ ์—”์ง„ ํ†ต์‹ 
  • ์‹œ์Šคํ…œ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ์ƒํƒœ๋ฅผ ๊ธฐ๋กํ•˜๋Š” ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฃจํ”„
  • ์ •์ฑ… ์ดˆ๊ธฐํ™”, ์„ค์ • ๋กœ๋”ฉ, ์‚ฌ์šฉ์ž ์ƒํƒœ ๊ฐฑ์‹  ๋“ฑ

๋ชจ๋“  ์ฃผ์š” ํ๋ฆ„์€ Main์—์„œ ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.

์ด๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ์ƒํ™ฉ์ด ์ƒ๊ธฐ๋ฉด ๋ฐ˜๋“œ์‹œ ๋กœ๊ทธ๊ฐ€ ๋‚จ์•„ ์žˆ์–ด์•ผ ๋””๋ฒ„๊น…์ด ๊ฐ€๋Šฅํ•˜์ฃ .

๊ทธ๋ž˜์„œ ์ €๋Š” Main์—์„œ๋Š” console.log ๋Œ€์‹  electron-log๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’พ electron-log ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•


// main.ts
import log from 'electron-log';

log.info("๐Ÿ“ก ์—”์ง„ ์ดˆ๊ธฐํ™” ์‹œ์ž‘");
log.warn("โš ๏ธ ์ค‘์š”ํ•œ ์„ค์ • ๋ˆ„๋ฝ๋จ");
log.error("โŒ ์˜ค๋ฅ˜ ๋ฐœ์ƒ", error);

๐Ÿ” Main ๋กœ๊ทธ๋ฅผ electron-log๋กœ ๋‚จ๊ธฐ๋Š” ์ด์œ ~!

์ด์œ ์„ค๋ช…
์‹œ์Šคํ…œ ์ด๋ฒคํŠธ ์ถ”์ ์‚ฌ์šฉ์ž๊ฐ€ ํด๋ฆญํ•˜์ง€ ์•Š์•„๋„ ์ž๋™ ๋™์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค(์ •์ฑ…, ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์—”์ง„ ๋“ฑ)์„ ๊ธฐ๋กํ•ด์•ผ ํ•จ
์„ฑ๋Šฅ ์ตœ์ ํ™”console.log๋ณด๋‹ค IO ์•ˆ์ •์„ฑ ๋†’๊ณ , ํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋‹ˆ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์˜์กด๋„ ์—†์Œ
์šด์˜ ๋กœ๊ทธ ์ˆ˜์ง‘์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์—์„œ ์ˆ˜์ง‘ํ•˜์—ฌ ๊ณ ๊ฐ ์ง€์›, ์žฅ์•  ๋ถ„์„์— ํ™œ์šฉ ๊ฐ€๋Šฅ
๋ณด์•ˆ์„ฑํ…์ŠคํŠธ ํŒŒ์ผ๋กœ ์ €์žฅ๋˜๋ฉฐ, ์ฝ˜์†”์— ๋…ธ์ถœ๋˜์ง€ ์•Š์•„ ์‚ฌ์šฉ์ž์—๊ฒŒ๋„ ์•ˆ์ „

๐Ÿ“‚ ๋กœ๊ทธ ๊ฒฝ๋กœ๋Š” ์—ฌ๊ธฐ์— ํŒŒ์ผ๋กœ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

OS๊ฒฝ๋กœ
WindowsC:\Users\USERNAME\AppData\Roaming\YourAppName\log.txt
macOS~/Library/Logs/YourAppName/log.txt

๐Ÿ†š ๋กœ๊ทธ ์ „๋žต ๋น„๊ต ์š”์•ฝ

ํ•ญ๋ชฉconsole.logelectron-log
๋Œ€์ƒ๊ฐœ๋ฐœ์šฉ ๋””๋ฒ„๊น…์šด์˜ ์ƒํƒœ ๊ธฐ๋ก
์ œ๊ฑฐ ๊ฐ€๋Šฅ ์—ฌ๋ถ€โœ… vite-plugin์œผ๋กœ ์ œ๊ฑฐ ๊ฐ€๋ŠฅโŒ ์ง์ ‘ ์ฝ”๋“œ์—์„œ ๊ด€๋ฆฌ
์ถœ๋ ฅ ์œ„์น˜๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†” / ํ„ฐ๋ฏธ๋„๋กœ์ปฌ ๋กœ๊ทธ ํŒŒ์ผ
์„ฑ๋Šฅ ์˜ํ–ฅ๋งŽ์„ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ/CPU ์ฆ๊ฐ€์ƒ๋Œ€์ ์œผ๋กœ ์•ˆ์ •์ 
์‚ฌ์šฉ์ž ๋…ธ์ถœ ๊ฐ€๋Šฅ์„ฑ์žˆ์Œ (devtool ๋“ฑ)์—†์Œ (๋กœ์ปฌ ์ „์šฉ)

๐Ÿ ๊ฒฐ๋ก : ๋กœ๊ทธ๋„ ์„ค๊ณ„ ๋Œ€์ƒ์ž…๋‹ˆ๋‹ค

console.log๋Š” ๋””๋ฒ„๊น…์— ์•„์ฃผ ์œ ์šฉํ•˜์ง€๋งŒ, Electron์ฒ˜๋Ÿผ ๋ฆฌ์†Œ์Šค์™€ I/O์— ๋ฏผ๊ฐํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์„ค๊ณ„ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

๐Ÿง  ๋กœ๊ทธ๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•œ ๊ฒŒ ์•„๋‹ˆ๋ผ,

"์–ด๋–ค ๋กœ๊ทธ๋ฅผ ์–ธ์ œ, ์–ด๋””์—, ์–ด๋–ป๊ฒŒ ๋‚จ๊ธธ ๊ฒƒ์ธ๊ฐ€" ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ’ฌ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

Electron ๊ธฐ๋ฐ˜ ์•ฑ์—์„œ์˜ ๋กœ๊ทธ๋Š” ๋‹จ์ˆœํ•œ ๋””๋ฒ„๊น… ๋„๊ตฌ๊ฐ€ ์•„๋‹ˆ๋ผ,

์šด์˜ ํšจ์œจ์„ฑ๊ณผ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ์ขŒ์šฐํ•˜๋Š” ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

์ง€์šฐ์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ฝ˜์†” ๋กœ๊ทธ?

์–ด์ฉŒ๋ฉด, ๊ทธ๊ฒŒ ๋ณ‘๋ชฉ์˜ ์‹œ์ž‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ €์ฒ˜๋Ÿผ "๊ท€์ฐฎ์•„์„œ ๋กœ๊ทธ ์•ˆ ์ง€์› ๋˜ ๊ทธ๋•Œ"์˜ ์ €๋ฅผ ๋ฐ˜์„ฑํ•˜๋ฉฐโ€ฆ

์ง€๊ธˆ์€ ์ž๋™ํ™”๋œ ์•ˆ์ „ํ•œ ๋กœ๊ทธ ์ „๋žต์œผ๋กœ ํ•œ์ธต ๋” ์„ฑ์žฅํ•œ ๊ธฐ๋ถ„์ž…๋‹ˆ๋‹ค.


profile
ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์Ÿˆ!!

4๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2025๋…„ 7์›” 31์ผ

์ข‹์€ ๊ธ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2025๋…„ 8์›” 5์ผ

lint + husky ์กฐํ•ฉ์œผ๋กœ ์ฝ”๋“œ์— ์ฝ˜์†”์ด ์žˆ๊ธฐ๋งŒํ•ด๋„ ์ปค๋ฐ‹์กฐ์ฐจ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ์ œ์•ฝํ•˜๋Š”๊ฑด ์–ด๋–จ๊นŒ์š”? ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ์—” ํ›จ์”ฌ ํŽธํ• ๊ฑฐ๊ฐ™์•„์š”~

1๊ฐœ์˜ ๋‹ต๊ธ€