IT 시행착오··약 6분

305페이지 빌드가 Actions 15분 제한을 넘기기 전 — cron 글 7편 실측

포스트가 255편에서 305편으로 늘었을 때 npm run build·Pagefind 인덱싱 시간이 어떻게 변했는지, deploy.yml timeout-minutes: 15와의 여유를 레포에서 재현해 봅니다.

GitHub 로고 — Actions 빌드 타임아웃과 305페이지 정적 사이트 (CC0, wikimedia-commons)

자정 cron이 카테고리 7편을 한 번에 올릴 때, 나는 빌드가 Actions 안에서 끝나는지를 먼저 확인한다. .github/workflows/deploy.yml에는 timeout-minutes: 15가 박혀 있고, npm run buildastro 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 build2분을 넘기기 시작할 때 (이미지·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 build 3회 (2026-08-31, Node 22.12+, 305 pages / 60,045 words indexed)
  • .github/workflows/deploy.ymltimeout-minutes: 15, wrangler-action@v3
  • Notion 시드: «디버깅» — 에이전트 운영 시 빌드·배포 검증 우선순위 메모