Astro와 Cloudflare Pages로 정적 블로그를 시작하는 이유


개인 블로그를 여러 개 운영할 계획이라면 서버를 직접 관리하는 방식보다 정적 블로그 방식이 더 단순할 수 있습니다.

이 블로그는 Astro로 만들고, Cloudflare Pages에 배포하는 구조를 기본으로 잡았습니다.

선택한 구조

  • 블로그 엔진: Astro
  • 콘텐츠: Markdown 또는 MDX
  • 저장소: GitHub
  • 배포: Cloudflare Pages
  • 도메인/DNS: Cloudflare
  • 분석: Google Search Console, Google Analytics
  • 검색: Pagefind 도입 예정

정적 블로그의 장점

정적 블로그는 글을 HTML 파일로 미리 만들어두고 CDN에서 바로 제공합니다. 그래서 일반적인 서버형 블로그보다 구조가 단순합니다.

  • 서버 관리가 거의 없습니다.
  • 속도가 빠릅니다.
  • 보안 위험이 낮습니다.
  • 비용이 적게 듭니다.
  • Markdown 기반이라 자동화하기 쉽습니다.

단점도 있다

물론 단점도 있습니다.

  • 관리자 화면이 기본 제공되지 않습니다.
  • 댓글, 검색, 문의폼은 별도 도구가 필요합니다.
  • 글 작성과 배포 흐름에 Git을 사용해야 합니다.
  • 초반 템플릿 작업이 필요합니다.

그래도 개인이 AI와 자동화를 활용해 여러 블로그를 운영하려면, 장기적으로는 정적 블로그 쪽이 관리 부담이 낮다고 판단했습니다.

실제 구축 환경

이 글을 쓴 시점의 실제 구성은 다음과 같습니다.

프로젝트: daejin-lab-blog
프레임워크: Astro
콘텐츠: Markdown
저장소: GitHub private repo
배포: Cloudflare Pages
공개 주소: https://daejin-lab-blog.pages.dev
빌드 명령: npm run build
출력 폴더: dist
Node 버전: 22 계열

처음에는 도메인 후보로 daejinlab.com을 생각했지만, 사이트명과 도메인이 아직 확정되지 않았기 때문에 우선 pages.dev 주소로 Search Console까지 연결했습니다.

실제로 막힌 지점

구축 과정에서 생각보다 시간이 걸린 부분은 서버 코드가 아니라 주변 설정이었습니다.

  • Cloudflare에서 Workers 화면과 Pages 화면을 헷갈리기 쉬웠습니다.
  • GitHub HTTPS 인증은 macOS Keychain 때문에 자동화 세션에서 바로 쓰기 어려웠습니다.
  • Search Console sitemap이 처음에는 daejinlab.com을 가리켜서 “가져올 수 없음”이 떴습니다.
  • Astro의 site 설정과 robots.txt의 sitemap 주소를 현재 공개 주소와 맞춰야 했습니다.

특히 sitemap 문제는 아래처럼 정리했습니다.

기존: https://daejinlab.com/sitemap-index.xml
수정: https://daejin-lab-blog.pages.dev/sitemap-index.xml

이처럼 정적 블로그는 서버 운영 부담은 적지만, URL 기준값을 잘못 잡으면 검색엔진 등록 단계에서 문제가 생길 수 있습니다.

실제 확인한 명령어

배포 전에는 매번 로컬에서 빌드가 통과하는지 확인했습니다.

npm run build

그리고 sitemap이 어떤 주소를 담고 있는지도 확인했습니다.

dist/sitemap-index.xml
dist/sitemap-0.xml

이 확인을 거치면 Cloudflare에 올라가기 전에 기본적인 문제를 줄일 수 있습니다.

다음에 할 일

다음 단계는 공통 템플릿을 정리하고, 글 작성 템플릿과 배포 체크리스트를 만드는 것입니다. 이후 커스텀 도메인을 확정하면 Astro 설정, robots.txt, Search Console 속성을 한 번 더 맞출 예정입니다.