.github/workflows/depoly.yml · 각 단계가 왜 존재하는지, Puppeteer는 왜 생겼는지, dev와 prod는 어떻게 다른지
FormFlex의 핵심 기능 중 하나가 "목표 응답 수 달성 시 AI 분석 리포트 자동 이메일 발송" 입니다. 이 기능을 구현하는 방식이 Puppeteer입니다.
/result?id= 페이지를 실제로 렌더링⚡ 문제: 일반 Chromium은 AWS Lambda에서 실행 불가
일반 Chrome은 GUI 환경이 있는 PC를 가정하고 만들어졌습니다. Lambda는 GUI도 없고, 파일시스템도 읽기 전용이고, 용량 제한도 있어요.
그래서 @sparticuz/chromium 이라는 Lambda 전용으로 압축·최적화된 Chromium 바이너리가 필요합니다.
크기가 ~150MB에 달해서 일반 코드 zip에 넣을 수 없고 (Lambda 250MB 제한), 별도 Lambda Layer 로 올려야 합니다.
// sendPdfReport.js — 핵심 흐름
const chromium = require('@sparticuz/chromium'); // Lambda용 Chrome 엔진
const puppeteer = require('puppeteer-core'); // Chrome 조종 도구
// Lambda 위에서 headless Chrome 실행
browser = await puppeteer.launch({
executablePath: await chromium.executablePath(), // Layer에서 Chrome 경로 찾기
args: [...chromium.args, '--disable-dev-shm-usage'],
headless: chromium.headless,
});
// /result?id=xxx 페이지 접속 → PDF 생성
await page.goto(`${FRONTEND_URL}/result?id=${surveyId}`);
const pdfBuffer = await page.pdf({ format: 'A4', printBackground: true });