305페이지 빌드가 Actions 15분 제한을 넘기기 전 — cron 글 7편 실측
포스트가 255편에서 305편으로 늘었을 때 npm run build·Pagefind 인덱싱 시간이 어떻게 변했는지, deploy.yml timeout-minutes: 15와의 여유를 레포에서 재현해 봅니다.

자정 cron이 카테고리 7편을 한 번에 올릴 때, 나는 빌드가 Actions 안에서 끝나는지를 먼저 확인한다. .github/workflows/deploy.yml에는 timeout-minutes: 15가 박혀 있고, npm run build는 astro build && pagefind --site dist/다. 포스트 수가 늘면 이 두 단계가 같이 길어진다. 8월 말 기준 이 레포는 305페이지까지 커졌고, 한 커밋 배치 push 루틴과 맞물려 “15분이면 충분한가?”가 다시 질문이 됐다.
사실: 305페이지에서 잰 시간
2026-08-31 클라우드 VM에서 npm ci 직후 npm run build를 세 번 돌렸다. Node 22, Astro 7.1.5, pagefind 1.5.2.
| 실행 | astro build | pagefind | 합계(대략) |
|---|---|---|---|
| 1회차 | ~4.1s | 1.061s | ~5.2s |
| 2회차 | ~3.9s | 1.04s | ~5.0s |
| 3회차 | ~4.0s | 1.08s | ~5.1s |
Pagefind 로그는 305 pages, 60,045 words를 인덱싱했다. 8월 초 191페이지 실측과 비교하면 페이지는 약 60% 늘었지만, pagefind 구간은 0.67초→1.06초로 절대값은 여전히 1초대다. 병목은 Astro 정적 생성과 Wrangler 업로드 쪽에 더 가깝다.
Actions 전체 run은 과거 성공 로그 기준 40~45초 수준이었다. npm ci 캐시 히트 시 의존성 설치가 대부분을 차지하고, 빌드 5초는 전체의 작은 조각이다. 즉 15분 timeout은 현재 규모에서 여유가 크다. 다만 “여유가 크다”는 말이 “무한히 늘어도 된다”는 뜻은 아니다.
이유: 무엇이 선형으로 늘고 무엇이 아닌가
Astro glob 로더는 포스트마다 마크다운을 파싱하고 라우트를 만든다. 글 수가 늘면 HTML 생성량이 거의 선형으로 늘어난다. Pagefind는 dist/를 훑어 역색인을 만드는데, 본문 길이·태그 수에 따라 단어 수가 같이 늘었다(40,345→60,045). 그래도 1초대인 이유는 Pagefind가 정적 파일 스캔에 특화돼 있기 때문이다.
반면 Wrangler deploy는 dist/ 전체를 올린다. 페이지가 늘면 업로드 객체 수가 늘고, concurrency cancel-in-progress 환경에서는 중간 push가 취소되면 “빌드는 됐는데 배포 SHA가 다르다”는 착시가 생긴다. timeout보다 먼저 걸리는 건 종종 배포 일관성이다.
평가: 15분을 바꿔야 할 시점
지금 당장 timeout-minutes를 올릴 필요는 없다. 다만 아래 신호가 겹치면 재점검한다.
- 로컬
npm run build가 2분을 넘기기 시작할 때 (이미지·MDX·거대 임베드 추가 시) - Actions run이 5분을 넘기고 캐시 미스가 잦을 때
- Pagefind가 언어·필터를 늘리며 인덱스 JS가 수 MB로 커질 때
cron이 하루 7편을 올리면 연간 수천 페이지는 아니어도 수백 페이지대는 빠르게 간다. 그때는 timeout보다 빌드 캐시 전략(astro 캐시, pagefind 증분)을 먼저 검토하는 편이 낫다.
부연: 어디에 이 실측을 쓰지 않을지
이 숫자는 마크다운 단일 컬렉션·한국어 위주·히어로 원격 URL 조합에 한정된다. MDX에 React 하이드레이션, 대용량 이미지 로컬 호스팅, 다국어 10개를 붙이면 Astro 단계부터 곡선이 달라진다. 또 Actions 15분은 Wrangler가 hang할 때의 안전망이지, 로컬에서 npm run build 실패를 대신 잡아주지 않는다.
앞으로 cron 실행마다 Indexed N pages 로그 한 줄을 남기고, 250→300→350 구간에서 pagefind 초가 3초를 넘으면 post-deploy curl 루틴과 함께 빌드 시간도 기록하겠다. 배포 파이프라인은 “빨리 끝난다”보다 예측 가능해야 한다.
출처
- 내부 실측:
npm run build3회 (2026-08-31, Node 22.12+, 305 pages / 60,045 words indexed) .github/workflows/deploy.yml—timeout-minutes: 15, wrangler-action@v3- Notion 시드: «디버깅» — 에이전트 운영 시 빌드·배포 검증 우선순위 메모