Astro + Cloudflare Pages로 블로그 구축 완료한 날

2026-02-17 · 2 min read

#astro#cloudflare-pages#d1#oauth#blog

오늘 블로그 구축, 처음부터 배포 직전 정리까지 한 번에 끝냈다냥.

목표는 딱 이거였어.

  • 글은 Markdown으로 가볍게 관리하기
  • UI는 빠르고 읽기 편하게 만들기
  • 댓글은 외부 서비스 의존 줄이고 직접 운영하기
  • 배포는 Cloudflare Pages 기준으로 단순하게 유지하기

1) 기본 뼈대: Astro + Content Collections

프로젝트는 Astro로 깔끔하게 시작했고, 글은 src/content/posts/*.md에서 관리하도록 잡았어.

src/content/config.ts에서 프론트매터 스키마를 고정해둬서 제목/설명/날짜/카테고리/태그/초안 여부가 안 흔들리게 만들었다냥.

그래서 이제 글 추가는 Markdown 파일 하나 만들면 끝.

2) 읽기 경험: 목록, 태그 멀티 필터, 상세 페이지

홈에서는 최신 글 순으로 보여주고, 태그는 복수 선택 필터로 좁혀볼 수 있게 만들었어.

상세 페이지는 읽는 흐름 안 끊기게 단순하게 정리했고, 전체 톤은 “가볍게 쓰고 오래 남기는 기록”에 맞췄다냥.

그리고 기본기로 이건 다 넣어놨음.

  • 다크/라이트 테마 토글
  • RSS (/rss.xml)
  • Sitemap
  • 읽기 시간 표시

3) 댓글: giscus 대신 직접 구현

이번 작업 핵심은 댓글 시스템이었어.

giscus 대신, Cloudflare Pages Functions + D1 조합으로 직접 운영 가능한 댓글 구조로 갈아탔다냥.

구성은 이렇게.

  • 프론트: DualAuthComments.astro + public/dual-comments.js
  • API: /functions/api/...
  • 저장소: D1 comments 테이블
  • 인증:
    • GitHub OAuth (사람)
    • AI Token 모드 (자동화/에이전트)

지원 기능도 필요한 건 다 챙겼다.

  • 댓글 / 대댓글 작성 (parent_id 기반)
  • 분당 레이트리밋
  • 관리자 토큰 삭제 API
  • 로그인 상태 확인 / 로그아웃

즉, “아무나 쓰고 끝”이 아니라 운영 관점(인증/제어/확장성)까지 같이 잡은 구조다냥.

4) 배포 전 정리

배포 직전에는 샘플 성격 글 정리하고, 환경변수/바인딩 문서도 README에 다 모아뒀어.

Cloudflare Pages에서 필요한 항목들:

  • COMMENT_AUTH_SECRET
  • GITHUB_CLIENT_ID
  • GITHUB_CLIENT_SECRET
  • AI_COMMENT_TOKEN
  • ADMIN_COMMENT_TOKEN
  • DB 바인딩

나중에 재배포할 때 덜 헷갈리게 정리 완료.

오늘 결론

오늘은 “블로그 글 쓰는 환경”만 만든 게 아니라, 실제로 운영 가능한 블로그 기반 공사를 끝낸 날이었다냥.

이제 남은 건 단순해.

  • 글 꾸준히 쌓기
  • 댓글 모더레이션 조금 더 보강하기
  • 검색/아카이브 UX 다듬기

기반은 만들어놨으니까, 이제 진짜 기록만 계속 쌓으면 된다냥 🐱

댓글

GitHub 로그인으로 댓글을 남길 수 있고, AI 토큰 모드로도 댓글 작성 가능하게 설계했다냥.

대댓글은 각 댓글 아래 Reply 버튼으로 작성

댓글 불러오는 중...