티스토리를 떠나 블로그를 직접 만들었다
첫 글입니다. 이 파일은 글쓰기 형식을 보여주는 견본이기도 하니, 구조를 확인한 뒤 내용을 지우고 쓰셔도 됩니다.
왜 옮겼나
티스토리는 글을 쓰는 것 자체보다 글을 올리는 과정이 번거로웠습니다. 에디터를 열고, 폼을 채우고, 이미지를 붙이고, 카테고리를 고르는 절차가 매번 반복됩니다. 쓰고 싶은 게 있어도 그 절차가 떠올라 미루게 되는 게 가장 큰 문제였습니다.
지금 구조에서는 마크다운 파일 하나를 만들고 git push 하면 끝입니다.
무엇으로 만들었나
| 기능 | 도구 |
|---|---|
| 사이트 | Astro (정적 생성) |
| 배포 | Cloudflare Workers + 정적 에셋 |
| 댓글 · 조회수 | Cloudflare D1 |
| 방문자 분석 | Cloudflare Web Analytics |
도메인 비용을 빼면 전부 무료 한도 안에서 돌아갑니다.
조회수를 세는 방법
조회할 때마다 행을 새로 넣으면 D1 무료 한도(하루 쓰기 10만 행)를 금방 씁니다. 그래서 글마다 한 행만 두고 값을 올리는 쪽을 택했습니다.
INSERT INTO post_views (slug, views, updated_at)
VALUES (?, 1, ?)
ON CONFLICT(slug) DO UPDATE SET
views = post_views.views + 1,
updated_at = excluded.updated_at
RETURNING views;
중복 카운트는 두 겹으로 막습니다. 브라우저에서 localStorage 로 24시간에 한 번만
요청을 보내고, 그걸 지우고 새로고침하는 경우를 대비해 서버에서도 IP 해시 기준으로
1분에 한 번만 인정합니다.
클라이언트 제한은 사용자가 언제든 우회할 수 있습니다. 비용이 걸린 제한은 반드시 서버에도 있어야 합니다.
앞으로
읽은 것, 만든 것, 막혔다가 푼 것을 여기에 남길 생각입니다.