Github Actions 크론이 정시에 오지 않아서 — Cloudflare Workers로 옮긴 이야기
전편에서 약속한 'Github Actions 설정 시 고려할 부분' 이야기. 막상 해보니 메시지가 정시에 오지 않았습니다. 무료 크론이 5~30분 늦는 이유와, 정시에 작동하면서 비밀번호 같은 정보를 안전하게 다룰 수 있는 무료 대안 Cloudflare Workers로 옮긴 과정을 비개발자 관점에서 정리했습니다.
전편에서 약속한 'Github Actions 설정 시 고려할 부분' 이야기. 막상 해보니 메시지가 정시에 오지 않았습니다. 무료 크론이 5~30분 늦는 이유와, 정시에 작동하면서 비밀번호 같은 정보를 안전하게 다룰 수 있는 무료 대안 Cloudflare Workers로 옮긴 과정을 비개발자 관점에서 정리했습니다.
바이브 코딩으로 만든 소스코드가 매일 정해진 시간에 알아서 실행되려면 무엇이 필요할까요. 크론이라는 스케줄링 개념부터, 24시간 서버의 비용 문제, Github Actions라는 무료 대안까지 비개발자의 관점에서 차근차근 정리했습니다.
비개발자에게 바이브 코딩을 가르치다 마주친 첫 질문. Git, 터미널, 환경변수 — 어디까지 알려주고, 어디서 잠시 침묵해야 할까. 멘토링 현장에서 마주한 솔직한 고민을 정리했습니다.
@swc/jest로 갈아탄 뒤 CI에서 28개 테스트 suite가 한꺼번에 컴파일 실패했습니다. 원인은 SWC의 decoratorMetadata가 string literal union을 Object로 emit한다는 tsc와의 미묘한 차이. 13개 schema에 type: String을 명시해 해결한 기록입니다.
jest가 OOM 날 것 같아 중단했지만, 알고 보니 macOS의 Pages free 지표가 거짓말이었습니다. memory_pressure로 본 실제 여유는 87%. 진짜 원인은 Jest 기본 워커 수와 ts-jest의 V8 heap 부담이었고, @swc/jest로 이관해 heap 50%·속도 5배 개선한 기록입니다.
Claude Code용 MCP 서버를 OAuth 2.1 HTTP transport로 정식 연결하고, macOS LaunchAgent 두 개로 24/7 상주 + 1시간 주기 git 동기화 + 자동 재빌드까지 구축한 기록입니다. Discovery 흐름, mcpAuthRouter, PlistBuddy로 JWT Secret 안전 주입까지 실전 중심으로 정리했습니다.
claude mcp list에서 "Failed to connect"가 반복되던 MCP 서버를 추적하다 stdio와 HTTP Streamable transport의 근본 불일치를 발견했습니다. OAuth 도입 리팩토링이 남긴 흔적과 3가지 해결 경로, 그리고 제가 왜 OAuth 2.1 HTTP를 최종 선택했는지 정리했습니다.
실시간 자체 카운터와 별개로, GA4의 풍부한 차원(유입 채널·국가·디바이스·체류 시간)을 NestJS Cron으로 매일 한 번 MongoDB에 동기화한 기록입니다. pagePath 매핑, bulkWrite 멱등성, Slack 실패 알림까지 실제 운영을 가정해 정리했습니다.
쿠키도 localStorage도 쓰지 않고 하루 안에서만 같은 독자를 알아보는 방법을 정리했습니다. Plausible의 daily salt 해시를 HMAC 기반 deterministic 방식으로 재구성하면서, 서버 재시작 안전성과 cross-day 추적 불가능성을 어떻게 확보했는지 기록했습니다.