수정한 글도 같은 주소로 다시 나가게 했습니다
한 번 발행한 글을 고치면 또 다른 문제가 생깁니다. 새 파일로 내보내면 주소가 바뀌고, 기존 파일을 무조건 덮어쓰면 GitHub에서 사람이 손으로 고친 내용을 지울 수 있습니다. 둘 다 피해야 했습니다.
그래서 수정 발행은 두 개의 문턱으로 나눴습니다. 먼저 원천과 이전 발행 사본의 본문을 비교해 실제로 내용이 달라졌는지 판단합니다. 수정이 맞다면 처음 발행할 때 정한 slug를 같은 글의 열쇠로 사용해 스테이징으로 보냅니다. 작업 파일의 시각이 달라도 공개 URL은 바뀌지 않습니다.
그다음 repo에 덮어써도 되는지는 별도로 판단합니다. 목적지에 source_updated가 없으면 어느 판이 최신인지 모르는 것으로 보고 건드리지 않습니다. 사람이 GitHub에서 직접 정정했거나, 외부 기고문을 윤문했을 수 있기 때문입니다.
이 규칙의 기본값은 “모르면 덮어쓰지 않는다”입니다. 자동화는 최신이라고 자신할 수 있을 때만 교체합니다. 빠르게 맞추는 것보다 사람이 남긴 수정을 조용히 지우지 않는 것이 더 중요했습니다.
처음에는 시각이 든 파일명을 같은 글의 기준으로 삼았습니다. 주소에 의미 있는 이름을 쓰기 시작하자 그 기준이 깨졌습니다. 원천과 스테이징의 대응 관계도 slug로 바꾸고, repo에는 주소를 만들기 위한 slug 필드를 그대로 내보내지 않도록 분리했습니다.
실제 테스트에서는 repo에서 일부러 문장을 손으로 바꾸고, 원천을 다시 수정한 뒤 전체 경로를 돌렸습니다. 원천이 명확히 최신인 글은 갱신됐고, 판별 정보가 없는 글과 외부 기고문은 그대로 살아남았습니다.
CHANGE LOG
slug를 같은 글의 대응 키로 삼아 기존 URL 유지- 목적지에
source_updated를 기록해 버전 비교 - 출처가 불명확하면 자동 덮어쓰기 금지
- 외부 기고문과 repo 수동 수정본 보호 확인