댓글기능 도입기
Astro를 이용해 블로그를 만들고 댓글 기능도 함께 도입해야겠다고 생각하고 있었습니다. 기본적으로 많이 쓰는 도구들인 Giscus, Disqus 등을 검토해봤습니다.
이 블로그는 개발 글과 개인적인 기록(육아 같은 일상)이 섞여 있습니다. 그래서 흔히 쓰는 GitHub 로그인 기반 댓글(Giscus, Utterances)은 처음부터 후보에서 빠졌습니다. 개발자가 아닌 독자에게 “댓글 달려면 깃허브 로그인하세요”라고 하는 순간, 그 사람은 그냥 창을 닫을 테니까요.
그렇다고 Disqus를 붙이긴 싫었습니다. 무겁고 광고·추적이 많습니다. Waline은 괜찮은 선택지였지만, Cloudflare 바깥에 백엔드와 DB를 따로 띄워서 운영해야 합니다. 관리할 게 하나 더 느는 거죠.
블로그는 이미 Cloudflare Pages 위에 올라가 있었습니다. 그래서 목표가 분명해졌습니다. 로그인 없이, 스팸 없이, 같은 스택 안에서 끝내자.
결국 직접 만들기로 했다
구조는 단순합니다. 사이트 자체는 정적으로 빌드된 Astro이고, 동적인 부분만 Pages Functions(서버리스 함수)가 D1(Cloudflare의 SQLite) 하나를 보고 처리합니다. 따로 운영하는 서버가 없습니다.
정적 Astro ── Cloudflare Pages
├─ /api/comments → 스팸 검증 → D1에 저장(승인 대기)
├─ /api/likes → 좋아요 카운터
└─ /api/telegram → 텔레그램에서 승인/삭제
D1: comments, likes
로그인 없이 스팸을 막는 역할은 Cloudflare Turnstile이 맡았습니다. 캡차인데 무료고, 쿠키를 안 쓰고, 로그인도 필요 없습니다. 브라우저가 통과하면 서버에서 한 번 더 검증한 뒤에야 DB에 닿습니다.
댓글은 “승인 후 공개”
가장 중요한 결정은 선(先) 모더레이션이었습니다. 모든 댓글은 일단 ‘승인 대기’ 상태로 저장되고, 제가 승인하기 전까지는 사이트에 보이지 않습니다. 갓 만든 블로그가 스팸으로 도배되는 일을 원천적으로 막고 싶었거든요.
문제는 “그럼 승인은 어디서 하지?”였습니다. 관리자 페이지를 따로 만들기는 귀찮았습니다.
관리 도구는 만들지 않았다 — 텔레그램 봇
대신 텔레그램 봇을 모더레이션 도구로 썼습니다. 새 댓글이 달리면 봇이 저에게 이렇게 알림을 보냅니다.
💬 새 댓글 대기
👤 작성자
내용...
[✅ 승인] [❌ 거절]
폰에서 버튼 한 번 누르면 끝입니다. 승인하면 글이 공개되고, 그 메시지에는
🗑 삭제 버튼이 남아서 나중에 이미 게시된 댓글도 같은 자리에서 지울 수 있게
했습니다. 별도 관리자 화면 없이, 폰만으로 모더레이션이 끝나는 게 마음에 듭니다.
마무리
정리하면 이렇습니다. 비용 0원, 운영할 서버 0개, 스택은 Cloudflare 하나. 로그인 없이 댓글을 받고, 스팸은 막고, 모더레이션은 폰에서 합니다.
그리고 지금 이 글 바로 아래에 그 댓글창이 있습니다. 한번 남겨보세요. 같은 패턴을 자기 블로그에 적용해보고 싶은 분께도 도움이 되면 좋겠습니다.
댓글
댓글 불러오는 중...
댓글 남기기
작성하신 댓글은 관리자 승인 후 게시됩니다.