피드로 돌아가기
Django Screenshot API: Capture Web Pages from Your Python Backend
Dev.toDev.to
Backend

Django Screenshot API: Capture Web Pages from Your Python Backend

Django 애플리케이션에서 스크린샷/PDF 생성 시 PageBolt API를 HTTP 요청으로 호출해 Selenium 대비 초기화 시간 2-5초에서 1-2초로 단축 및 브라우저 바이너리 의존성 제거

Custodia-Admin2026년 3월 25일9beginner

Context

Django 애플리케이션에서 웹 페이지 스크린샷이나 PDF 생성이 필요할 때 기존 솔루션들(Selenium, PyPuppeteer, wkhtmltopdf)은 무거운 외부 의존성을 요구한다. Selenium은 Chrome 바이너리와 ChromeDriver가 필요하며 요청당 2-5초의 초기화 시간이 소요되고, PyPuppeteer는 Node.js 설치를 강제하며 비동기 전용이므로 동기 Django 코드와의 통합이 복잡하다.

Technical Solution

  • 스크린샷 생성 방식을 로컬 브라우저 자동화에서 HTTP API 호출로 변경: PageBolt API에 JSON 페이로드를 POST 요청으로 전송하고 이미지/PDF URL 응답을 수신
  • 외부 바이너리 의존성 제거: Chrome/ChromeDriver, Node.js, wkhtmltopdf 시스템 라이브러리 대신 requests 라이브러리(이미 설치된 경우 대부분)만 사용
  • Django 뷰 통합 단순화: requests.post() 호출로 스크린샷 취득 후 응답을 HttpResponse로 바로 반환하는 구조로 구현
  • 배경 작업 지원: Celery와의 호환성 제공으로 비동기 PDF 생성이나 스크린샷 큐잉 가능
  • API 키 기반 인증: 환경 변수에서 PAGEBOLT_API_KEY를 읽어 Authorization 헤더에 Bearer 토큰 형태로 전달

Impact

  • 스크린샷 생성 시간: 2-5초(Selenium) → 1-2초(PageBolt)
  • 메모리 오버헤드: 브라우저 프로세스 관리 제거로 서버당 동시 처리량 증가
  • 의존성 설치 시간: 브라우저 바이너리 다운로드/설치 단계 제거
  • 무료 티어: 월 100개 요청 지원

Key Takeaway

Django에서 외부 렌더링이 필요한 경우 로컬 브라우저 자동화 대신 전문 API 서비스를 HTTP 호출로 사용하면 의존성 복잡도를 크게 낮추고 응답 시간을 단축할 수 있으며, 이는 특히 프로덕션 환경에서 배포 단순화와 스케일링 용이성의 트레이드오프로 가치 있다.


Django 프로젝트에서 PDF 리포트나 소셜 미리보기 이미지를 생성해야 할 때, 로컬 Selenium/PyPuppeteer 대신 PageBolt 같은 스크린샷 API를 requests.post()로 호출하면 외부 바이너리 관리 오버헤드 없이 1-2초 내에 결과를 얻을 수 있으며, 환경 변수에 API 키를 저장하고 Django 뷰나 Celery 태스크에 직접 통합하는 방식으로 구현할 수 있다.

원문 읽기