Cartwheel๋ Oxford Reading Club Expansion - ์ ํํ๋ ORC ๋ฒ ํธ๋จ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ "๋ค๋ฅธ ํ๊ฒฝ์ ์น์ฌ์ดํธ ๋๋ ์ด์ ๋ฒ์ ์น์ฌ์ดํธ์ UI ์ฐจ์ด์ ์ ํ ๋์ ํ์ธ ํ ์ ์์ผ๋ฉด ์ข๊ฒ ๋ค"๋ผ๋ ํ์์ฑ์ ๋๋ผ๊ณ ์์ํ ๊ฐ์ธ ํ๋ก์ ํธ์ ๋๋ค.
์ด๋ฒ์ ORC ๋ฒ ํธ๋จ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉด์ ํฌํ ์น์ฌ์ดํธ์ ์ ์ฒด ์น ํ์ด์ง ์ค 70% ์ ๋์ ํด๋นํ๋ ํ์ด์ง๋ค์ HTML ๋งํฌ์ , CSS์ JS๋ฅผ ์ฌ์์ฑ ํ๋๋ฐ์, ์๋์ ์ธ UI ๋ณ๊ฒฝ(e.g., ๋์์ธ ์์คํ ๋ฐ์, ํผ ๊ธฐ๋ฅ ๋ณ๊ฒฝ์ ๋ฐ๋ฅธ ๋์์ธ ๋ณ๊ฒฝ, Footer ์์น ๋ณ๊ฒฝ, etc)๋ ์์์ง๋ง, ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ์ต๋ํ ๊ธฐ์กด ์น์ฌ์ดํธ์ ๋ชจ์์ ์ ์งํ๊ณ ์ ํ์ต๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ์์ PC์๋ ๋์์ธ ํ์ผ, ํ์ฌ ๋ฐฐํฌ๊ฐ ๋ ํ๊ฒฝ์ ํฌํ ํ์ด์ง, ์์ ์ค์ธ ํ๊ฒฝ์ ํฌํ ํ์ด์ง๊ฐ ์ด๋ ค ์์ด์ผ ํ๊ณ , ์ฌ์ง์ด๋ ์์ ์ค์ธ ํ์ด์ง์ ์์ ์ค์ธ ํ์ด์ง๋ก ์ํฅ์ ๋ฐ์ ์ ์๋ ๋ค๋ฅธ ๊ฐ๋ฐ์ค์ธ ํ์ด์ง๊น์ง ๊ฐ์ด ๋ด์ผํ๋ ๊ณ ํต์ด ๊ณ์ ๋์์ด์.
๋ณ๊ฒฝ ์์ ์ค ๋ชจ๋ํฐ ์ํฉ; ์์ฉ ๋ฒ์ ผ - ์์ ๋ฒ์ ผ - ์์ ์ ์ํฅ์ ๋ฐ๋ ๋ค๋ฅธ ํ์ด์ง๋ฅผ ๋์์ ํ์ธ
ํ์ด์ง ๋ณ-์์ ํ์คํ ๋ฆฌ ๋ณ-ํ๊ฒฝ ๋ณ๋ก ์ฐจ์ด๊ฐ ์๋์ง ์๋์ง, ์ฐจ์ด๊ฐ ์๋ค๋ฉด ์ด๋์ ์ผ๋ง๋ ์๋์ง ์๊ณ ์ถ๋ค, ์ด์์ด๋ฉด ์ข ์ฝ๊ฒ ์๊ณ ์ถ๋ค! ๊ทธ๋ฐ ๋ฐ๋์ผ๋ก Cartwheel - ์๊ตฌ๋ฅด๊ธฐ๋ฅผ ๋ง๋ค๊ธฐ ์์ํ์ต๋๋ค.
- Crawl a website
- ์ค์ ๋ ์น ์ฌ์ดํธ ์ฃผ์(e.g., https://local.oxfordreadingclub.com)์ ์ ์ํฉ๋๋ค.
- ์ ์ํ ์นํ์ด์ง์์ ๋ชจ๋
<a>๋ฅผ ์ฐพ๊ณ , ๊ฑฐ๊ธฐ์ ์ฐ๊ฒฐ๋์ด ์๋ ์ฌ์ดํธ ๋ด๋ถ ๋งํฌ(i.e., Hostname์ด ๋์ผํ ์นํ์ด์ง ์ฃผ์)๋ฅผ ์ฐพ์ต๋๋ค. - 2์์ ์ฐพ์ ๋ด๋ถ ๋งํฌ๋ก ์ ์ํ์ฌ, ํด๋น ์นํ์ด์ง์ ํฌํจ๋ ๋ชจ๋ ์ฌ์ดํธ ๋ด๋ถ ๋งํฌ๋ฅผ ์ฐพ์ต๋๋ค.
- Take screenshots; (๊ฐ์ ํ์ด์ง์ ์ค๋ณต ์ ์ํ์ง ์๋๋ก ์ค๋ณต์ ์ ๊ฑฐ ํด๊ฐ๋ฉฐ) 2~3์ ๋ฐ๋ณตํ๋ฉฐ ์คํฌ๋ฆฐ์ท์ ์ฐ์ต๋๋ค.
- Create sitemap; ์คํฌ๋ฆฐ์ท์ ์ฐ์ ํ์ด์ง์ ๋ํด Request Path, ํ์ด์ง ํ์ดํ, ์คํฌ๋ฆฐ์ท ํ์ผ ์ ๋ณด๋ฅผ ๋ด์ Sitemap์ ์์ฑํฉ๋๋ค.
- Compare the screenshots
- (๋์ผํ Request URL์ ๋ํด ์ด์ ์ ์ฐ์ด ๋ ์คํฌ๋ฆฐ์ท์ด ์๋ค๋ฉด) ๋ ๊ฐ ์คํฌ๋ฆฐ์ท์ ๋น๊ตํ๊ณ 10% ์ด์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด, ๋ค๋ฅธ ์์ญ์ ํ์ํ๋ diff ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
- (์น์ฌ์ดํธ ์ค์ ์ Remote ํ๊ฒฝ์ ์ค์ ํ๋ค๋ฉด) ๋ฆฌ๋ชจํธ Hostname + Request Path๋ฅผ ์กฐํฉํ์ฌ ๋ฆฌ๋ชจํธ ํ๊ฒฝ ์นํ์ด์ง ์คํฌ๋ฆฐ์ท์ ์ฐ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ ํ๊ฒฝ๊ณผ ๋ฆฌ๋ชจํธ ํ๊ฒฝ์ ์คํฌ๋ฆฐ์ท์ ๋น๊ตํ์ฌ 10% ์ด์ ๋ณ๊ฒฝ์ด ์๋ค๋ฉด, ๋ค๋ฅธ ์์ญ์ ํ์ํ๋ diff ์ด๋ฏธ์ง๋ฅผ ์์ฑํฉ๋๋ค.
Headless Browser == Web Browser - Graphical User Interface
Headless Browser๋ GUI ์์ด Command-Line Interface (CLI) ๋๋ Network Communication์ ์ด์ฉํ์ฌ ์นํ์ด์ง๋ฅผ ์ ์ด ํ ์ ์๋๋ก ํ๋ ๋ธ๋ผ์ฐ์ ์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ Application์ ์นํ์ด์ง ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ์ง๋ง, ๋ฐ์ดํฐ ์ถ์ถ์ด๋ ์นํ์ด์ง ํ ์คํธ ์ฉ๋๋ก๋ ๋๋ฆฌ ์ฌ์ฉ ์ค์ ๋๋ค.
ํนํ ์นํ์ด์ง ํ ์คํธ์ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๊ฐ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ด์ ๋ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ง๋ก ๋ธ๋ผ์ฐ์ ๋ผ๋ ์ ๋๋ฌธ(!)์ ๋๋ค. ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๋ ์ผ๋ฐ์ ์ธ ๋ธ๋ผ์ฐ์ ๊ฐ ์นํ์ด์ง๋ฅผ ์ด์ฉํ๋ ๊ฒ๊ณผ ์์ ํ ๋์ผํ ๋ฐฉ์์ผ๋ก ์นํ์ด์ง๋ฅผ ํ์ฑํ๊ณ , ๋ ๋๋งํ๊ธฐ ๋๋ฌธ์, "๋ธ๋ผ์ฐ์ ์ ์ ์ฌํ(๋ธ๋ผ์ฐ์ ๋ฅผ ์ปจํธ๋กค ํ๋ ๋ฐฉ์์)" ๋ค๋ฅธ ํ ์คํธ ๋๊ตฌ๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ์ ๊ณตํ์ง ๋ชปํ๋ ๊ธฐ๋ฅ, ์๋ฅผ ๋ค์๋ฉด Javascript๋ AJAX ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธ ํ ์ ์์ต๋๋ค.
Playwright - Chromium, Firefox, WebKit headless browser๋ฅผ ํ๋์ API๋ก ์ด์ฉํ ์ ์๋๋ก ๋ง๋ Node ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- Headless Browser๋ฅผ ์คํ
const browser = await playwright.chromium.launch();
if (ignoreHTTPSErrors) await browser.newContext({ ignoreHTTPSErrors });- ์นํ์ด์ง๋ก ์ด๋
const page = await this.browser.newPage();
await page.goto(url);- ์คํฌ๋ฆฐ์ท ์์ฑ
await page.setViewportSize({ width, height });
await page.screenshot({ fullPage, path });๋ชฉ์ ์ ์กฐ๊ธ ๋ฌ๋์ง๋ง ์ฌ์ค ์๊ตฌ๋ฅด๊ธฐ๋ 2017๋ ์ Spindle Weather๋ผ๋, ์ง๊ธ์ AWS Alarm Bot์ ์ด๊ธฐ ๋ชจ๋ธ์ด๋ผ๊ณ ๋ ํ ์ ์๋ Automatic API Test Application์๋ ๋ค์ด ์๋ ๊ธฐ๋ฅ์ ๋๋ค.
Spindle Weather๋ ์๋์ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์์ต๋๋ค.
- ๋ฏธ๋ฆฌ ์ ์ํด ๋ API ์คํ์ ๊ธฐ์ค์ผ๋ก API๊ฐ ์ ์ ์๋ต์ ํ๊ณ ์๋์ง๋ฅผ ํ์ธ
- ๋ฏธ๋ฆฌ ์ ์ํด ๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์น์ฌ์ดํธ์์ ์ ์์ ์ผ๋ก ๋ก๊ทธ์ธ์ด ๊ฐ๋ฅํ์ง ํ์ธ
- ์น์ฌ์ดํธ์ ๋งํฌ๋ ๋ฆฌ์์ค๊ฐ ์ ์ HTTP Status๋ฅผ ๋ฐํํ๋์ง๋ฅผ ํ์ธ
- ์น ์ฌ์ดํธ๋ฅผ ์คํฌ๋ฆฐ์ท์ผ๋ก ๊ธฐ๋กํ๊ณ , ์ง์ ํ ์์ค ์ด์์ผ๋ก ๋ณ๊ฒฝ์ด ์๊ธฐ๋์ง๋ฅผ ํ์ธ
์น ์ฌ์ดํธ๋ PantomJS๋ผ๋ ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ธ๋ฅผ ์ด์ฉํด์, ์ง๊ธ์ ์๊ตฌ๋ฅด๊ธฐ์ ๊ฑฐ์ ๋๊ฐ์ ์์ (ํฌ๋กค๋ง - ์คํฌ๋ฆฐ์ท ์์ฑ)์ ํ๋๋ฐ์, ๋ฌธ์ ๋ ์ด ์์ ์ด ์ ๋ ด์ด ์๋ฒ์์ ๋์๊ฐ๊ธฐ์ ์ ํฉํ์ง ์์๋ค๋ ๊ฒ์ด์์ต๋๋ค. Memory Allocate ๋ฌธ์ ๋ฑ์ผ๋ก ์๋ฒ๊ฐ ์ฅ์ ์ํ์ ๋น ์ง๊ณ , ์ด๊ฒ API ๋ชจ๋ํฐ๋ง์ฒ๋ผ ์ค์๋๊ฐ ๋์ ์์ ์ ์ํฅ์ ์ฃผ๊ฒ ๋๋ค๋ณด๋, ๊ฒฐ๊ตญ์ ์คํฌ๋ฆฐ์ท๊ณผ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐ๋ ์ดํ ํ์ฝ ํ ๋ฒ ํด๋ณด์ง ๋ชปํ ์ฑ๋ก ๋นํ์ฑํ ์ํ๋ก ๋ฐ๋์์ต๋๋ค.
์ผ๋ ํธ๋ก ์์ ๋ฆฌ์์ค ์ฌ์ฉ์ ๋ํ ์ ์ฝ์ด ์ค์ด ๋ค์๊ณ , ๋ถ๊ฐ์ ์ผ๋ก๋ ๊ฐ๋ฐ์ค์ธ ์น์ฌ์ดํธ(localhost)์ ๋ํ ์คํฌ๋ฆฐ์ท ์์ฑ๊ณผ ๋น๊ต๊ฐ ๊ฐ๋ฅํด์ก์ต๋๋ค.
ํ์ฌ ์๊ตฌ๋ฅด๊ธฐ์์๋ ๋ก๊ทธ์ธ ์ ์ฌ์ฉ์๊ฐ ํ์ธ ํ ์ ์๋ ํ์ด์ง์ ๋ํด์๋ง ํฌ๋กค๋ง๊ณผ ์คํฌ๋ฆฐ์ท ์์ฑ ๋ฐ ๋น๊ต๋ฅผ ์งํํฉ๋๋ค. ๋ค์ phase์์๋ ์น์ฌ์ดํธ ์ค์ ์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ธฐ์ ํ๊ณ , ํด๋น ์ ๋ณด๋ฅผ ํ์ฉํด์ ๋ก๊ทธ์ธ ์ดํ ์ ๊ทผ ๊ฐ๋ฅํ ํ์ด์ง์ ๋ํด์๋ ํ ์คํธ๋ฅผ ์ํํ๋๋ก ๋ง๋ค์ด ๋ณด๋ ค๊ณ ํฉ๋๋ค.
๊ฒ์ ์์ง์ ๋น๋กฏํ์ฌ ์ ํต์ ์ธ ์น์ฌ์ดํธ ํฌ๋กค๋ง์ ํํ์ด์ง(์ธ๋ฑ์ค ํ์ด์ง)์์ "์ด๋ ๊ฐ๋ฅํ ๋งํฌ๋ฅผ ์ฐพ๋ ๊ฒ"๋ถํฐ ์์๋ฉ๋๋ค. ๋ง์ฝ ํ์ด์ง์ ์ด๋ ๊ฐ๋ฅํ ๋งํฌ(<a>)๊ฐ ์๋ค๋ฉด, ํฌ๋กค๋ง ํ ์ ์๋ ํ์ด์ง ์๋ ์ ํ์ ์ผ ์ ๋ฐ์ ์๊ณ , ์ด์ ๋ฐ๋ผ์ ์ํ๋ ํ
์คํธ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
Learn more๋ฅผ ๋๋ฅด๋ฉด ์๋ฆฌ์ฆ ์๊ฐ ํ๋ฉด์ด ์๋๋ฐ, ์ ์คํฌ๋ฆฐ์ท์ ์์๊น์? ์ Learn more๋ ๋ฒํผ ๋ชจ์์ ๋งํฌ๊ฐ ์๋๋ผ ์ ๋ง๋ก ๋ฒํผ์ด์์ต๋๋ค;
"์ ๋ผ, ์ ์ฐพ์์ค, ์ฐพ์์ค ์๊ฐ ์์ด, ๋์๊ฐ."์๋ ORC ๊ฒ์ ๊ฒฐ๊ณผ
๋จ์ ์นํ์ด์ง ์ฐจ์ด ํ์ธ์ด ์๋, Behaviour์ ๊ทธ์ ๋ฐ๋ฅธ ๊ฒฐ๊ณผ ํ์ธ์ด ๊ฐ๋ฅํ UI ํ ์คํธํด๋ก ํ์ฅ
์ฒ์ ์๊ตฌ๋ฅด๊ธฐ๋ฅผ "ํ๊ฒฝ-์์ ๋ฒ์ ผ-์ํฅ ๋ฐ๋ ์์ ์ ์ฐจ์ด๋ฅผ ํ ๋์ ๋ณด๊ณ ์ถ๋ค"๋ผ๋ ์๊ฐ์ผ๋ก ๋ง๋ ๋งํผ, UI ํ ์คํธํด๋ก์จ ์๊ตฌ๋ฅด๊ธฐ๋ ์์ฃผ ์ ํ์ ์ธ ๋ถ๋ถ๋ง์ ํ ์คํธํฉ๋๋ค. ํค๋๋ฆฌ์ค ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๊ณต ํ๋ ๊ธฐ๋ฅ์ ๊ทนํ ์ผ๋ถ๋ง ์ฌ์ฉํ๋ค๊ณ ํ ์ ์๋๋ฐ์, ํ์ฌ ๊ฐ๋ฐ์ค์ธ ๋ด์ฉ์ ์ข ๋ ์์ ํ ์ํจ ํ์๋ ํน์ ํ์ด์ง ์์์ Form์ ์ ์กํ๊ฑฐ๋, Javascript ์คํ ํ ๋ณ๊ฒฝ๋๋ ํ๋ฉด์ ์ถ๊ฐ ์คํฌ๋ฆฐ์ท์ผ๋ก ๋จ๊ฒจ ๋๋ ๋ฑ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ ํ ์์(...)๋ ํด๋ดค์ต๋๋ค.
์์ ์๊ธฐํ๋ Spindle Weather์ ๋๊ฐ์ด, ์ํํด์ผ ํ๋ ์์ ์ด ๋ง์ ์น ์๋ฒ ์์์ ์ฌ์ฉํด์ ์ข ์ข ์๋ฒ๊ฐ ์ฅ์ ์ํ๊ฐ ๋๋ ์ดํ๋ฆฌ์ผ์ด์ ์ด ํ๋ ์์ต๋๋ค. ๋ฐ๋ก QMS์์ ๋์์ ์ฌ์ฉ๋ ๋จ์ด์ ๋ฌธ์ฅ์ ์ถ์ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ SAT Analyzer์ ๋๋ค. ์์ฃผ ๊ฐ๋จํ Natural Language Processing์ ํ๊ณ ์๋ ์ด ์ดํ๋ฆฌ์ผ์ด์ ์ ๋์์ ์ฑ 5๊ถ์ ๋ํ ์์ฒญ์ ์ฒ๋ฆฌํ๊ฒ ํด๋์๋๋ฐ, ์ด๋ฐ ์ ํ์ ๋์์๋ ๋ถ๊ตฌํ๊ณ ๋์์ ํน์ฑ์ ๋ฐ๋ผ์๋ ์๋ฒ๊ฐ ๋ป๋ ๊ฒฝ์ฐ๊ฐ ์๊น๋๋ค. ์ด๋ฐ ์ข ๋ฅ์ ์ดํ๋ฆฌ์ผ์ด์ ์ด ๋ ์๋ค๋ฉด Electron์ ํ์ฉํด์ ํ๋ซํผ์ ๋ฐ๊ฟ๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค!
[๋ถ๋ก] ์ฒ์์ผ๋ก Electron์ ์ด์ฉํด ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค๋ฉด์ ์ด๋ฐ ์ด๋ ค์(aka ์ฝ์ง)์ ๊ฒช์์ต๋๋ค.
์ผ๋ ํธ๋ก ์ Main Process์ Renderer Process๊ฐ ๋ฐ๋ก ์กด์ฌํ๊ณ , ๊ฐ๊ฐ์ ํ๋ก์ธ์ค์์ ์ธ ์ ์๋ API๊ฐ ์ ํด์ ธ ์๋ค๋ ๊ฒ์ ๋ชจ๋ฅด๊ณ ๊ตฌํ๋ถํฐ ํ๋ค๋ณด๋ ๋ด์ผ ํ๋ ์๋ฌ ๋ฉ์์ง ์
๋๋ค. ์น ์ฌ์ดํธ ์ค์ ๊ฐ์ด๋ ์คํฌ๋ฆฐ์ท, ์ฌ์ดํธ๋งต ํ์ผ ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ Electron์์ ์ง์ ํ userData ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๋ ค๊ณ ํ๋๋ฐ ๋ ๋ ํ๋ก์ธ์ค์์๋ app API๋ฅผ ์ด์ฉ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด ๊ฒฝ๋ก๋ฅผ ์กฐํํ๊ฑฐ๋ ์ ๊ทผ ํ ์ ์์์ต๋๋ค.
๊ฒฐ๊ตญ ipcMain/ipcRender๋ฅผ ์ด์ฉํด์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ์์ผ๋ก ๊ตฌํ์ ํ์ง๋ง, Main Process์ Express๋ก ์น์๋ฒ๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์น์๋ฒ๋ฅผ ํตํด ์์ฒญ์ ์ฃผ๊ณ ๋ฐ๋ ํ์์ด ๋์์ด๋ ์ข์์ ๊ฒ ๊ฐ๋ค๋ผ๋ ์๊ฐ์ ๋ค๋ฆ๊ฒ ํ๊ธฐ๋ ํ์ด์. ์ด๊ฑด ๋๋ค๋ฅธ ์ฝ์ง์ด ๋์๊ฒ ์ง์;
์คํฌ๋ฆฐ์ท์ userData ๋๋ ํ ๋ฆฌ(MacOS ๊ธฐ์ค์ผ๋ก ~/Library/Application Support/Electron/)์ ์ ์ฅํ๊ณ ์๋๋ฐ, ์ด๋ ๊ฒ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ํ๋ฉด์ ๋ถ๋ฌ ์ค๋ ค๊ณ ํ๋๋(img src=file://), ๋ก์ปฌ ๋ฆฌ์์ค๋ฅผ ๋ถ๋ฌ์ค๋ ๊ฑธ ํ์ฉํ์ง ์๋๋ค๋ ์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค. (์ด๊ฒ ๋๋ฌธ์ 1์์ ์๊ธฐํ ๋๋ก Express ์๋ฒ๋ฅผ ์ง์ง ์ฌ๋ฆด๊น ๊ณ ๋ฏผํจ) ๊ฒฐ๊ตญ์๋ ๋ก์ปฌ ํ์ผ์ Electron์ API์ธ, nativeImage๋ก ๋ถ๋ฌ์จ ๋ค์, base64 ํํ๋ก ์ธ์ฝ๋ฉํ์ฌ ํ๋ฉด์ ๋ถ๋ฌ์ค๋ ๋ฐฉ์์ผ๋ก ํด๊ฒฐ์ ํ์ต๋๋ค.
const image = nativeImage.createFromPath(`${ localImagePathInUserData }`);
image.toDataURL();Native Node modules are supported by Electron, but since Electron is very likely to use a different V8 version from the Node binary installed on your system, the modules you use will need to be recompiled for Electron.
Using Native Node Modules | Electron
Error: The module '/path/to/native/module.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION $XYZ. This version of Node.js requires
NODE_MODULE_VERSION $ABC. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).Automattic/node-canvas#348 (comment)
Automattic/node-canvas#788 (comment)

.png)

