Lightpanda๋Š” Chrome ํฌํฌ๊ฐ€ ์•„๋‹ˆ๋ผ Zig๋กœ ์ƒˆ๋กœ ๋งŒ๋“  ์ดˆ๊ฒฝ๋Ÿ‰ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ €๋‹ค. AI ์—์ด์ „ํŠธ์™€ ์ž๋™ํ™” ์›Œํฌ๋กœ๋“œ์— ๋งž์ถฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ด๊ณ  ์‹œ์ž‘ ์†๋„๋ฅผ ๋†’์ธ๋‹ค๋Š” ๋ฐฉํ–ฅ์ด ๋งค์šฐ ์„ ๋ช…ํ•˜๋‹ค.

์ด ๋ ˆํฌ๋Š” 5์œ„ ยท โญ +9.9K๋กœ ํšŒ์ž๋œ ํ”„๋กœ์ ํŠธ๋‹ค. ๋ณ„ ์ˆซ์ž๋งŒ ๋ณด๋ฉด ์œ ํ–‰์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง€๊ธˆ ์–ด๋””์— ์‹œ๊ฐ„์„ ์“ฐ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๊ฝค ์†”์งํ•˜๊ฒŒ ๋“œ๋Ÿฌ๋‚ธ๋‹ค. ์›น ์ž๋™ํ™”๋ฅผ ๋งŽ์ด ํ•ด๋ณธ ์‚ฌ๋žŒ์ผ์ˆ˜๋ก Chrome ๊ณ„์—ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฌด๊ฑฐ์šด์ง€ ์•ˆ๋‹ค. Lightpanda๋Š” ๋ฐ”๋กœ ๊ทธ ๋ถˆ๋งŒ์„ ์ •๋ฉด์œผ๋กœ ๊ฑด๋“œ๋ฆฐ๋‹ค. Playwright/Puppeteer/CDP ํ˜ธํ™˜์„ ์ฑ™๊ธฐ๋ฉด์„œ๋„ ํ›จ์”ฌ ๊ฐ€๋ณ๊ฒŒ ๋Œ๋ฆฌ๊ฒ ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ช…ํ™•ํ•ด์„œ, ์—์ด์ „ํŠธ ๋ธŒ๋ผ์šฐ์ง• ๋ถ๊ณผ ๋งž๋ฌผ๋ ค ํฌ๊ฒŒ ์ฃผ๋ชฉ๋ฐ›์•˜๋‹ค.

flowchart LR
A[๋ฌธ์ œ] --> B[lightpanda]
B --> C[์„ค์น˜]
C --> D[์ตœ์†Œ ์‹คํ—˜]
D --> E[์—…๋ฌด ์ ์šฉ ํŒ๋‹จ]

์น ํŒ ํŒ์„œํ˜• ์น˜ํŠธ์‹œํŠธ

  • ์ด ๋ ˆํฌ์˜ ํ•œ ์ค„ ํ‚ค์›Œ๋“œ๋Š” lightpanda๋‹ค.
  • ์ด๋ฒˆ ๋ณด๊ฐ•์—์„œ๋Š” ์„ค์น˜์™€ ์‚ฌ์šฉ ์ˆœ์„œ๋ฅผ ๊ณต์‹ README ๊ธฐ์ค€์œผ๋กœ ๋” ์ด˜์ด˜ํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ๋‹ค.
  • ์ฝ์„ ๋•Œ๋Š” ์ „์ œ ์กฐ๊ฑด โ†’ ์„ค์น˜ โ†’ ์ฒซ ์‹คํ–‰ โ†’ ๊ฒ€์ฆ ์ˆœ์„œ๋กœ ๋ณด๋ฉด ๋œ๋‹ค.
  • โ€œ๋Œ€๋‹จํ•ด ๋ณด์ธ๋‹คโ€๋ณด๋‹ค โ€œ๋‚ด ์—…๋ฌด์—์„œ ๋ฐ˜๋ณต ๋น„์šฉ์„ ์ค„์ด๋Š”๊ฐ€โ€๋ฅผ ๋จผ์ € ๋ณธ๋‹ค.

์ด ๋ ˆํฌ๋ฅผ ํ•œ ์ค„๋กœ ๋ณด๋ฉด

Lightpanda๋Š” Chrome ํฌํฌ๊ฐ€ ์•„๋‹ˆ๋ผ Zig๋กœ ์ƒˆ๋กœ ๋งŒ๋“  ์ดˆ๊ฒฝ๋Ÿ‰ ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ €๋‹ค. AI ์—์ด์ „ํŠธ์™€ ์ž๋™ํ™” ์›Œํฌ๋กœ๋“œ์— ๋งž์ถฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ด๊ณ  ์‹œ์ž‘ ์†๋„๋ฅผ ๋†’์ธ๋‹ค๋Š” ๋ฐฉํ–ฅ์ด ๋งค์šฐ ์„ ๋ช…ํ•˜๋‹ค.

์™œ ์ง€๊ธˆ ์ด ๋ ˆํฌ๊ฐ€ ๋œจ๋Š”๊ฐ€

์›น ์ž๋™ํ™”๋ฅผ ๋งŽ์ด ํ•ด๋ณธ ์‚ฌ๋žŒ์ผ์ˆ˜๋ก Chrome ๊ณ„์—ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฌด๊ฑฐ์šด์ง€ ์•ˆ๋‹ค. Lightpanda๋Š” ๋ฐ”๋กœ ๊ทธ ๋ถˆ๋งŒ์„ ์ •๋ฉด์œผ๋กœ ๊ฑด๋“œ๋ฆฐ๋‹ค. Playwright/Puppeteer/CDP ํ˜ธํ™˜์„ ์ฑ™๊ธฐ๋ฉด์„œ๋„ ํ›จ์”ฌ ๊ฐ€๋ณ๊ฒŒ ๋Œ๋ฆฌ๊ฒ ๋‹ค๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋ช…ํ™•ํ•ด์„œ, ์—์ด์ „ํŠธ ๋ธŒ๋ผ์šฐ์ง• ๋ถ๊ณผ ๋งž๋ฌผ๋ ค ํฌ๊ฒŒ ์ฃผ๋ชฉ๋ฐ›์•˜๋‹ค.

๋ ˆํฌ ์•ˆ์—์„œ ๋จผ์ € ๋ณผ ๊ฒƒ

  • Zig ๊ธฐ๋ฐ˜์˜ ๋น„-Chromium ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ๊ตฌํ˜„
  • CDP๋ฅผ ํ†ตํ•ด Playwright, Puppeteer, chromedp์™€ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ
  • ์ดˆ๊ธฐ ๋ฒค์น˜๋งˆํฌ์—์„œ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๊ณผ ๋น ๋ฅธ ์‹คํ–‰ ์†๋„๋ฅผ ๊ฐ•์กฐ

์„ค์น˜ ์ „์— ํ™•์ธํ•  ๊ฒƒ

  • Linux x86_64 ๋˜๋Š” macOS aarch64 ํ™˜๊ฒฝ์ด๋ฉด nightly ๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ๊ฐ€์žฅ ์‰ฝ๋‹ค.
  • Docker๋ฅผ ์“ธ ์ˆ˜ ์žˆ์œผ๋ฉด ์„ค์น˜ ๋ถ€๋‹ด์ด ๋” ์ค„์–ด๋“ ๋‹ค.
  • Puppeteer/Playwright ๊ฐ™์€ ๊ธฐ์กด CDP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉด ๋น„๊ต๊ฐ€ ์‰ฝ๋‹ค.

์„ค์น˜ ๋ฐฉ๋ฒ•

๊ณต์‹ ํ™•์ธ ๋งํฌ

nightly ๋ฐ”์ด๋„ˆ๋ฆฌ ์„ค์น˜

Linux๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์„ค์น˜ํ•œ๋‹ค.

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-x86_64-linux && chmod a+x ./lightpanda

macOS(aarch64)๋Š” ์•„๋ž˜๋ฅผ ์“ด๋‹ค.

curl -L -o lightpanda https://github.com/lightpanda-io/browser/releases/download/nightly/lightpanda-aarch64-macos && chmod a+x ./lightpanda

WSL2 ํ™˜๊ฒฝ์€ Linux ์„ค์น˜๋ฒ•์„ ๋”ฐ๋ฅด๋˜, Puppeteer ๊ฐ™์€ ํด๋ผ์ด์–ธํŠธ๋Š” Windows ํ˜ธ์ŠคํŠธ์— ๋‘๋Š” ๋ฐฉ์‹์„ README๊ฐ€ ๊ถŒ์žฅํ•œ๋‹ค.

Docker ์„ค์น˜

docker run -d --name lightpanda -p 9222:9222 lightpanda/browser:nightly

์ด ๋ฐฉ์‹์€ CDP ์„œ๋ฒ„๋ฅผ ๋ฐ”๋กœ 9222 ํฌํŠธ๋กœ ๋…ธ์ถœํ•˜๋ฏ€๋กœ, ๊ธฐ์กด ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ์— ์—ฐ๊ฒฐํ•˜๊ธฐ ์‰ฝ๋‹ค.

์†Œ์Šค ๋นŒ๋“œ๊ฐ€ ํ•„์š”ํ•  ๋•Œ

์†Œ์Šค ๋นŒ๋“œ๋Š” Zig 0.15.2์™€ Rust, ๊ทธ๋ฆฌ๊ณ  Debian/Ubuntu ๊ธฐ์ค€ xz-utils ca-certificates pkg-config libglib2.0-dev clang make curl git ๊ฐ™์€ ์˜์กด์„ฑ์ด ํ•„์š”ํ•˜๋‹ค. ๋น ๋ฅธ ์ฒดํ—˜์ด ๋ชฉ์ ์ด๋ฉด ์†Œ์Šค ๋นŒ๋“œ๋ณด๋‹ค nightly๋‚˜ Docker๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ํŽธ์ด ๋‚ซ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•

  1. ๋‹จ๋… ๋ธŒ๋ผ์šฐ์ €์ฒ˜๋Ÿผ ํŽ˜์ด์ง€๋ฅผ ํ•œ ๋ฒˆ ๋คํ”„ํ•ด๋ณธ๋‹ค.
  2. ๊ทธ๋‹ค์Œ CDP ์„œ๋ฒ„๋ฅผ ๋„์›Œ ๊ธฐ์กด Puppeteer ๋˜๋Š” Playwright ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  3. ์ดˆ๊ธฐ์—๋Š” ๋งํฌ ์ˆ˜์ง‘์ด๋‚˜ ๊ฐ„๋‹จํ•œ ํผ ์ ‘๊ทผ์ฒ˜๋Ÿผ ์‰ฌ์šด ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ๋งŒ ๊ฒ€์ฆํ•œ๋‹ค.
  4. ์„ฑ๊ณต๋ฅ ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ธฐ์กด Chrome ๊ณ„์—ด๊ณผ ๋น„๊ตํ•œ๋‹ค.

๋น ๋ฅธ ๋‹จ๋… ํ…Œ์ŠคํŠธ:

./lightpanda fetch --obey_robots --log_format pretty --log_level info https://demo-browser.lightpanda.io/campfire-commerce/

CDP ์„œ๋ฒ„ ์‹คํ–‰:

./lightpanda serve --obey_robots --log_format pretty --log_level info --host 127.0.0.1 --port 9222

Puppeteer ์—ฐ๊ฒฐ ์˜ˆ์‹œ๋Š” ๊ณต์‹ README ๊ธฐ์ค€์œผ๋กœ browserWSEndpoint: "ws://127.0.0.1:9222"๋ฅผ ์“ฐ๋ฉด ๋œ๋‹ค. ํ…”๋ ˆ๋ฉ”ํŠธ๋ฆฌ๋ฅผ ๋„๊ณ  ์‹ถ๋‹ค๋ฉด LIGHTPANDA_DISABLE_TELEMETRY=true๋ฅผ ์„ค์ •ํ•œ๋‹ค.

์–ด๋””์— ๋ฐ”๋กœ ์จ๋จน์„ ์ˆ˜ ์žˆ๋‚˜

์‚ฌ๋ก€ A. ๋Œ€๋Ÿ‰ ํŽ˜์ด์ง€ ์ˆ˜์ง‘

์งง์€ ์‹œ๊ฐ„์— ๋งŽ์€ ํŽ˜์ด์ง€๋ฅผ ๋ณ‘๋ ฌ ์ˆ˜์ง‘ํ•ด์•ผ ํ•˜๋Š” ์Šคํฌ๋ž˜ํ•‘ ์ž‘์—…์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ € ํ•œ ๊ฐœ๋‹น ๋ฉ”๋ชจ๋ฆฌ ์ ์œ ๊ฐ€ ์•„์ฃผ ์ค‘์š”ํ•˜๋‹ค. ์ด๋•Œ Lightpanda ๊ณ„์—ด์ด ์•ˆ์ •ํ™”๋˜๋ฉด EC2๋‚˜ ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ๋™์‹œ ์‹คํ–‰ ์ˆ˜๋ฅผ ๋” ํฌ๊ฒŒ ๊ฐ€์ ธ๊ฐˆ ์—ฌ์ง€๊ฐ€ ์ƒ๊ธด๋‹ค.

์‚ฌ๋ก€ B. ์—์ด์ „ํŠธ ์›น ํ…Œ์ŠคํŠธ

์—์ด์ „ํŠธ๊ฐ€ ํผ ์ž…๋ ฅ, ๋ฒ„ํŠผ ํด๋ฆญ, ๊ฒฐ๊ณผ ํ™•์ธ์„ ๋ฐ˜๋ณตํ•˜๋Š” ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ๋Š” ๋ธŒ๋ผ์šฐ์ € ๊ธฐ๋™ ์†๋„๊ฐ€ ์ „์ฒด ์ฒด๊ฐ ์†๋„๋ฅผ ๋งŽ์ด ์ขŒ์šฐํ•œ๋‹ค. ๊ฐ€๋ฒผ์šด ๋Ÿฐํƒ€์ž„์€ ํŠนํžˆ ๋ฐ˜๋ณต ์‹คํ–‰์—์„œ ์ฐจ์ด๋ฅผ ๋งŒ๋“ ๋‹ค.

์ฒ˜์Œ ํ•ด๋ณผ ์ตœ์†Œ ์‹คํ—˜

  1. nightly ๋ฐ”์ด๋„ˆ๋ฆฌ๋‚˜ Docker ์ค‘ ํ•˜๋‚˜๋กœ ์„ค์น˜ํ•œ๋‹ค.
  2. fetch ๋ช…๋ น์œผ๋กœ ํ•œ ํŽ˜์ด์ง€๋ฅผ ๋คํ”„ํ•ด๋ณธ๋‹ค.
  3. serve๋กœ CDP ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ณ , ๊ธฐ์กด Puppeteer ์Šคํฌ๋ฆฝํŠธ ํ•˜๋‚˜๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  4. Chrome์™€ ์„ฑ๊ณต๋ฅ /๋ฉ”๋ชจ๋ฆฌ/์†๋„๋ฅผ ๊ฐ™์€ ์‹œ๋‚˜๋ฆฌ์˜ค๋กœ ๋น„๊ตํ•œ๋‹ค.

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

๋ณผ ๋•Œ ์ฃผ์˜ํ•  ์ 

  • Beta ๋‹จ๊ณ„๋ผ ๋ชจ๋“  ์‚ฌ์ดํŠธ๊ฐ€ ์•ˆ์ •์ ์œผ๋กœ ๋Œ์•„๊ฐ€์ง„ ์•Š๋Š”๋‹ค.
  • Playwright์˜ ๋‚ด๋ถ€ ์ „๋žต ๋ณ€ํ™”์— ๋”ฐ๋ผ ๊ฐ‘์ž๊ธฐ ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์„ ํ”„๋กœ์ ํŠธ๋„ ์ง์ ‘ ์–ธ๊ธ‰ํ•œ๋‹ค.
  • ํ™”๋ฉด ๋ Œ๋”๋ง ์ค‘์‹ฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹ˆ๋ผ ํ—ค๋“œ๋ฆฌ์Šค ํŠนํ™”๋ผ๋Š” ์ ์„ ์ดํ•ดํ•˜๊ณ  ์จ์•ผ ํ•œ๋‹ค.

๋‹ค์Œ ์ฝ๊ธฐ

์ด ๊ธ€์€ AI๋ฅผ ํ™œ์šฉํ•ด ์ดˆ์•ˆ์„ ์ •๋ฆฌํ–ˆ๊ณ , GitHub README์™€ ๊ณต์‹ ๋งํฌ๋ฅผ ๋‹ค์‹œ ํ™•์ธํ•ด ์‹ค๋ฌด ์ ์šฉ ๊ด€์ ์œผ๋กœ ํ’€์–ด์ผ๋‹ค.