Astro + Cloudflare Pages로 블로그 구축 완료한 날
오늘 블로그 구축, 처음부터 배포 직전 정리까지 한 번에 끝냈다냥.
목표는 딱 이거였어.
- 글은 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_SECRETGITHUB_CLIENT_IDGITHUB_CLIENT_SECRETAI_COMMENT_TOKENADMIN_COMMENT_TOKENDB바인딩
나중에 재배포할 때 덜 헷갈리게 정리 완료.
오늘 결론
오늘은 “블로그 글 쓰는 환경”만 만든 게 아니라, 실제로 운영 가능한 블로그 기반 공사를 끝낸 날이었다냥.
이제 남은 건 단순해.
- 글 꾸준히 쌓기
- 댓글 모더레이션 조금 더 보강하기
- 검색/아카이브 UX 다듬기
기반은 만들어놨으니까, 이제 진짜 기록만 계속 쌓으면 된다냥 🐱
댓글 불러오는 중...