노션에 쓰면 자동 발행되는 블로그를 만들었다 (2) — 삽질 기록

블로그를 만들며 며칠씩 잡아먹은 진짜 삽질들 — 빌드 캐시가 부활시킨 글, 배포마다 사라지는 시크릿, 정각에 안 도는 크론.

이 블로그 자체를 만든 이야기 (2/3) — 이 편은 시간 다 잡아먹은 삽질들.

1편에서 구조는 단순하다고 했다. 근데 그 단순한 걸 굴리는 데 삽질이 반이었다.

삽질 1 — 지운 글이 자꾸 살아났다

글을 지우려고 노션에서 ’발행 취소’로 바꾸고 .md도 지웠는데, 배포하면 지운 글이 사이트에 그대로 다시 떴다. 파일을 찾으면 “없음”인데 페이지는 나왔다.

범인은 Cloudflare 빌드 캐시였다. Astro의 콘텐츠 데이터 스토어를 캐시가 복원해서, 지운 글을 캐시에 남은 걸로 다시 만들어냈다.

Settings → Build cacheClear + Disable. 빌드가 2초라 캐시 이득도 없었다. 이후 삭제가 정상 반영됐다.

삽질 2 — 배포할 때마다 비밀 토큰이 증발했다

댓글 작성자 인증용 토큰(ADMIN_TOKEN)을 Cloudflare 대시보드에 넣어둔다. 잘 되다가, 코드 한 번 배포하면 인증이 깨졌다. 확인해보니 토큰이 사라져 있었다.

wrangler deploy는 기본적으로 설정 파일에 없는 대시보드 변수를 삭제한다. Plaintext 변수로 넣었더니 다음 배포에 날아간 거다.

→ 두 겹으로 고정했다.

// wrangler.jsonc
"keep_vars": true   // 배포가 대시보드 변수를 안 지우게

그리고 토큰은 Plaintext 대신 Secret 타입으로. (시크릿은 배포에도 보존된다.)

삽질 3 — “매시 정각” 크론이 정각에 안 돌았다

노션 글을 자동 발행하려고 GitHub Actions schedule 크론(0 * * * *)을 걸었다. 근데 실행 로그가 이러했다.

09:17 → 11:40 → 13:57 → ... → 23:09 → 04:17

정각에 돈 적이 한 번도 없고, 시간을 통째로 건너뛰기도 했다(밤엔 5시간 공백). GitHub 크론은 best-effort라 부하 몰리면 밀리거나 스킵된다. 특히 정각(:00)이 제일 심하다.

→ 트리거를 Cloudflare Cron으로 옮겼다. 블로그가 이미 Cloudflare Worker라, 거기 scheduled() 핸들러가 매시 정각에 GitHub API로 워크플로를 깨운다.

async scheduled(event, env, ctx) {
  // Cloudflare Cron → GitHub 워크플로 실행(workflow_dispatch)
  ctx.waitUntil(dispatchSync(env));
}

Cloudflare 크론은 초 단위로 정확했다. 바꾸어서 09:00:37에 딱 돌았다.

삽질 4 — 노션 줄바꿈이 사이트에서 뭉개졌다

노션에서 줄 바꿔 쓴 게 사이트에선 한 줄로 붙었다. Astro 7의 새 마크다운 처리기가 소프트 줄바꿈을 무시해서다. 플러그인으로 고치려니 패키지가 필요한데, 이 환경은 lockfile이 고정돼 있어 설치가 막혔다.

→ 빌드가 아니라 변환 단계(sync)에서 소프트 줄바꿈을 마크다운 하드브레이크(개행)로 바꿔서 해결했다.

마무리

삽질은 대부분 “잘 되던 게 어느 순간 깨지는” 종류였다. 빌드 캐시, 배포가 지우는 시크릿, 못 믿을 크론 — 문서에 다 적어놓았다. 다음에 또 안 당하려고.

➡️ 3편 — 댓글을 직접 만들었다에서 계속.

댓글

익명 댓글입니다. 닉네임과 내용이 저장되며, 서로 존중하는 표현을 부탁드려요. 부적절하거나 광고성 댓글은 예고 없이 삭제될 수 있습니다.