블로그를 시작할 때 걸린 건 쓸 거리가 아니라 매일 올려야 한다는 쪽이었다. 하루 이틀 바쁘면 안 올리고, 안 올린 날이 며칠 쌓이면 그냥 접는다. 예전에 그렇게 접은 블로그가 둘 있다.
그래서 쓰는 일과 올리는 일을 떼어놨다. 쓰는 건 여유 있을 때 몰아서 하고, 올리는 건 매일 코드가 한다.
미래 날짜로 쌓아둔다
사이트는 마크다운 파일을 읽어 정적 페이지로 만드는 생성기(Eleventy)로 만들었다. 글 하나가 파일 하나다. 파일 맨 위에 제목과 날짜가 있다.
여기에 규칙을 하나 넣었다. 날짜가 오늘보다 뒤인 글은 빌드에서 아예 빠진다. 페이지 파일도 안 만들고 목록에도 안 들어간다. 그러니 다음 주, 다다음 주 날짜로 글을 열 편 넣어두고 커밋해도 사이트에는 아무 변화가 없다. 날짜가 되는 날 그 글 하나가 저절로 나타난다.
예약 발행을 서버가 아니라 빌드 시점에 두면 이게 공짜로 된다. 예약 큐도, 상태 컬럼도 없다. 날짜와 오늘을 비교하는 줄 하나다.
매일 아침 도는 것
아침에 스크립트가 한 번 돈다. 하는 일은 넷이다.
저장소를 최신 상태로 받는다. 빌드하고 배포한다. 조건을 따지지 않고 매번 한 번 한다. 어제와 같으면 호스팅이 알아서 그대로 두니 반복해도 손해가 없다. 조건을 달면 그 조건이 언젠가 틀려서 안 나간다.
그다음 대기 글을 센다. 날짜가 아직 안 된 글이 몇 편 남았는지 본다. 기준보다 적으면 브리프를 한 편 골라 본문을 쓴다. 브리프는 완성되지 않은 글 파일이다. 이 글이 답할 질문 한 줄, 상황과 문제와 해법에 담을 요점, 읽어도 되는 파일 목록, 특히 조심할 것, 앞뒤로 이을 글. 그 뼈대를 Claude 가 읽고 본문을 채운다. 다 채우면 파일에서 초안 표시를 지운다. 그러면 날짜가 되는 날 나간다.
마지막으로 로그에 한 줄 남긴다. 실행 시각, 배포 결과, 쓴 글 제목, 대기 글 수. 대기 글이 기준보다 적으면 폰으로 알린다. 평소에는 아무 알림도 보내지 않는다. 매일 잘 돌았다는 알림은 한 주면 안 보게 된다.
규칙이 자동화보다 먼저였다
기계에 다 맡기면 무너지는 건 발행이 아니라 판단이다. 그래서 코드보다 규칙 문서를 먼저 썼다. 지금 지키는 것들이다.
- 하루에 한 편. 재고가 남아도 몰아서 올리지 않는다.
- 브리프 없이는 쓰지 않는다. 무엇을 쓸지는 사람이 정한다.
- 실제 장부, 거래 원장, 메일 같은 진짜 데이터를 글 재료로 쓰지 않는다. 재료는 규칙 문서와 코드 구조까지다.
- 이미 나간 글은 고치지 않는다. 오탈자를 봐도 로그에만 적는다.
- 쓰면 안 되는 것 목록을 글 쓰기 전과 쓴 뒤에 각각 대조한다. 하나라도 걸리면 초안으로 두고 사람을 기다린다.
- 확신이 없으면 안 쓴다. 안 쓴 이유를 로그에 남긴다.
마지막 줄이 제일 자주 쓰인다. 실제로 브리프가 설명하는 기능이 코드에는 없어서 한 편이 멈춘 적이 있다. 그대로 썼으면 안 만든 걸 만들었다고 쓰는 글이 나갔을 것이다. 그 글은 며칠 미뤄졌고, 대신 왜 그 기능을 안 만들었는지를 쓰는 글이 됐다.
정리
- 예약 발행은 빌드에서 미래 날짜를 빼는 것으로 끝난다
- 매일 아침 스크립트가 받고, 배포하고, 재고가 적으면 브리프로 한 편 채우고, 로그를 남긴다
- 자동화한 건 올리는 일과 뼈대에 살 붙이는 일이다
- 무엇을 쓸지와 무엇을 쓰면 안 되는지는 사람이 쥔다. 그 경계가 이 구조의 전부다
서버 쪽을 Claude 에 붙인 이야기는 내 서버를 붙여 법인 비서를 만든 글에 썼다.