Cloud에서 Playwright를 무료로 호스팅하는 방법
Min-jun Kim
Dev Intern · Leapcell

Playwright는 브라우저 작업을 자동화하도록 설계된 강력한 도구로, 스크린샷 캡처, PDF 생성, 자동화된 테스트, 웹 스크래핑 등의 기능을 제공합니다. 웹 페이지와의 인간 상호 작용을 시뮬레이션할 수 있어 콘텐츠 추적, 가동 시간 모니터링 및 웹 스크래핑과 같은 작업에 이상적입니다.
많은 시나리오에서 클라우드에 Playwright를 배포하면 다음과 같은 이점이 있습니다.
- CI/CD 파이프라인에서 API를 통해 자동화된 테스트를 트리거합니다.
- 웹 사이트 가용성을 확인하기 위해 cron 작업을 실행합니다.
- 대규모 분산 웹 스크래핑 작업을 관리합니다.
서버리스 컴퓨팅의 확장 가능하고 사용한 만큼 지불하는 모델을 통해 브라우저 자동화 작업을 위한 클라우드 배포는 매우 합리적입니다. 그러나 DigitalOcean과 같은 플랫폼은 유휴 시간에 대해 요금을 부과하는 경우가 많아 주기적인 브라우저 상호 작용이 필요한 사용 사례에는 비효율적입니다. 다행히도 몇몇 플랫폼에서 Playwright의 서버리스 실행을 지원합니다. Leapcell 및 AWS Lambda가 있습니다.
이 문서에서는 이러한 플랫폼을 사용하여 Playwright 작업을 배포하는 방법과 그 이점 및 과제에 대해 살펴봅니다.
작업
일반적인 Playwright 작업인 웹 페이지의 스크린샷을 캡처하는 데 집중하겠습니다.
단계는 다음과 같습니다.
- 지정된 URL을 방문합니다.
- 스크린샷을 찍습니다.
- 이미지를 반환합니다.
Leapcell
Leapcell은 Playwright 자동화 작업을 포함하여 모든 애플리케이션을 서버리스로 배포할 수 있는 유연한 플랫폼을 제공합니다. HTTP 요청 처리를 위해 특별히 설계되지는 않았지만 HTTP 핸들러를 쉽게 만들어 Playwright 작업을 실행할 수 있습니다.
코드 예시:
const { chromium } = require('playwright'); const { Hono } = require('hono'); const { serve } = require('@hono/node-server'); const screenshot = async (url) => { const browser = await chromium.launch({ args: ['--single-process'] }); const page = await browser.newPage(); await page.goto(url); const img = await page.screenshot(); await browser.close(); return img; }; const app = new Hono(); app.get('/', async (c) => { const url = c.req.query('url'); if (url) { const img = await screenshot(url); return c.body(img, { headers: { 'Content-Type': 'image/png' } }); } else { return c.text('Please provide a ?url=https://example.com/ parameter'); } }); const port = 8080; serve({ fetch: app.fetch, port }).on('listening', () => { console.log(`Server is running on port ${port}`); });
Leapcell을 사용하면 이 Playwright 스크립트를 서버리스 환경에 배포하여 웹 스크래핑 또는 자동화된 테스트와 같은 작업에 뛰어난 확장성을 제공할 수 있습니다. 또한 Leapcell은 인프라 관리 부담 없이 Playwright 자동화를 호스팅할 수 있도록 간단한 배포 프로세스를 제공합니다.
로컬 개발
디버깅은 쉽습니다. node index.js
와 같은 다른 Node.js 앱처럼 애플리케이션을 실행합니다.
배포
빌드 명령, 런타임 및 서비스 포트를 구성하여 Leapcell에 앱을 배포합니다. 시작하고 실행하는 것이 간단하다는 것을 알게 될 것입니다.
배포가 완료되면 Playwright 자동화가 활성화되고 액세스할 수 있습니다.
요약
✅ 장점:
- 더 쉬운 디버깅을 위해 일관된 로컬 및 클라우드 환경을 제공합니다.
- Playwright에 대한 직접적인 지원을 제공합니다.
❌ 단점:
- HTTP 요청 처리를 위한 수동 설정이 필요합니다.
AWS Lambda
AWS Lambda에서 Playwright를 실행하려면 alixaxel/chrome-aws-lambda
와 같은 타사 Chromium 라이브러리와 함께 playwright-core
패키지를 활용할 수 있습니다.
AWS는 Lambda 함수 크기에 250MB 제한을 부과하므로 타사 Chromium이 필요합니다. Puppeteer와 함께 번들로 제공되는 기본 Chromium은 이 제한을 쉽게 초과합니다(macOS에서는 ~170MB, Linux에서는 ~282MB, Windows에서는 ~280MB). 따라서 축소된 Chromium을 사용해야 합니다.
코드 예시:
const chromium = require('chrome-aws-lambda'); const playwright = require('playwright-core'); exports.handler = async (event) => { let browser = null; try { browser = await playwright.chromium.launch({ args: chromium.args, executablePath: await chromium.executablePath, headless: true, }); const page = await browser.newPage(); await page.goto(event.url); const screenshot = await page.screenshot(); return { statusCode: 200, headers: { 'Content-Type': 'image/jpeg' }, body: screenshot.toString('base64'), isBase64Encoded: true, }; } catch (error) { return { statusCode: 500, body: 'Failed to capture screenshot.', }; } finally { if (browser !== null) { await browser.close(); } } };
로컬 개발
AWS Lambda를 사용한 로컬 디버깅은 런타임 환경의 차이로 인해 까다로울 수 있습니다. alixaxel/chrome-aws-lambda
의 가이드에서 확인할 수 있습니다.
배포
코드가 준비되면 ZIP 업로드를 통해 또는 종속성에 Lambda Layers를 사용하여 배포할 수 있습니다. 특히 Playwright의 브라우저 바이너리와 같은 대용량 파일을 처리할 때 설정이 번거로울 수 있습니다.
요약
✅ 장점:
- Playwright 작업에 대한 간소화된 코드 구조를 제공합니다.
- 최신 브라우저 자동화에 대한 기본 제공 지원을 제공합니다.
❌ 단점:
- 타사 종속성(예: Chromium)으로 인한 잠재적 위험이 있습니다.
- 복잡한 로컬 디버깅 및 배포가 필요합니다.
효율적인 클라우드 호스팅 Playwright 자동화가 필요한 프로젝트의 경우 Leapcell은 쉬운 배포와 확장 가능하고 비용 효율적인 환경을 제공하는 훌륭한 솔루션입니다.
자세한 내용은 Leapcell Playwright 설명서를 확인하십시오.