글쓴이: 작두뉴스 운영자 / 기록일: 2026년 8월 17일

최근 열흘치 기사에 새 설명 카드를 붙이는 작업을 시작했다. 처음에는 오늘에서 날짜를 열 칸 거슬러 올라가면 범위가 끝난다고 생각했다. 달력에서 시작일과 끝날을 적고, 그 사이 기사 수를 확인했다. 그런데 예상한 수와 실제 기사 수가 맞지 않았다.

원인은 단순했다. 그 기간 중 8월 13일과 14일에는 발행된 글이 없었다. 달력으로 센 열흘에는 빈 날 두 개가 들어 있었고, 실제로 글이 올라간 발행일 열 번을 찾으려면 더 과거까지 내려가야 했다. '최근 열흘'과 '최근 발행일 열 번'은 비슷해 보이지만 서로 다른 조건이었다.

이 차이를 확인하기 전에는 최신 기사 목록에서 날짜만 잘라 작업 대상을 만들었다. 그 결과 달력 기준으로는 맞지만 목표한 기사 수에는 모자라는 목록이 나왔다. 카드 제작은 글마다 한 장씩 붙이는 작업이라 대상이 두 날짜만 어긋나도 최종 수량이 크게 달라진다.

범위를 다시 정할 때는 날짜부터 고치지 않았다. 먼저 실제 발행 자료를 날짜순으로 정렬하고, 각 날짜에 기사 몇 편이 있는지 묶어 보았다. 그다음 '달력 열흘'과 '게시물이 존재하는 최근 열 날짜'를 별도 목록으로 만들었다. 두 목록을 나란히 놓으니 빈 날이 어디에 끼었는지 바로 보였다.

이 작업에서 유용했던 값은 세 가지였다. 시작 날짜, 끝 날짜, 고유한 발행 날짜 수다. 기사 총개수만 세면 하루에 여러 편이 올라간 구조에서는 날짜 수를 알 수 없다. 반대로 날짜 수만 세면 하루마다 몇 편을 처리해야 하는지 놓칠 수 있다.

대량 작업을 시작하기 전에는 대상 목록을 먼저 고정하는 편이 안전하다. 목록에는 글 번호, 슬러그, 제목, 발행 날짜를 함께 넣는다. 제목은 사람이 확인하기 좋지만 한 글자만 달라도 비교가 실패할 수 있다. 실제 갱신에는 글 번호나 슬러그처럼 변하지 않는 식별자를 쓰는 것이 낫다.

작업 중간에 기준이 바뀌어도 이미 처리한 글을 다시 망가뜨리지 않게 만드는 것도 중요했다. 같은 카드가 이미 붙어 있으면 건너뛰고, 아직 없는 글만 처리하도록 했다. 이런 방식을 보통 여러 번 실행해도 결과가 달라지지 않는 처리라고 부른다. 범위를 고쳐 다시 돌릴 때 특히 도움이 된다.

이번에는 기존 기사 안의 미디어를 없애지 않았다. 새 카드를 추가한 별도 수정본을 만들고, 본문만 갱신했다. 발행 시각은 그대로 보존했다. 범위를 바로잡는다고 이미 공개된 글의 날짜나 대표 이미지를 함께 건드리면 전혀 다른 사고가 생길 수 있기 때문이다.

검증도 한 가지 숫자로 끝내지 않았다. 대상 날짜 수, 대상 기사 수, 카드가 새로 붙은 수, 이미 있어 건너뛴 수를 따로 셌다. 처리 뒤에는 각 글의 발행 시각이 바뀌지 않았는지도 확인했다. '오류가 없었다'보다 이런 숫자가 다음 작업에서 훨씬 쓸모가 있었다.

비슷한 일을 직접 한다면 먼저 요청 문장을 계산식으로 바꾸는 것이 좋다. '과거 열흘치'라면 시작일과 끝날을 모두 포함하는지 적는다. '최근 열 번의 발행일'이라면 글이 없는 날은 제외한다. '최근 글 백 편'이라면 날짜와 무관하게 정확히 백 개의 글 번호를 뽑는다.

작두뉴스처럼 하루에 여러 글을 한꺼번에 내보내는 사이트에서는 이 구분이 더 중요하다. 달력 하루가 곧 글 한 편이라는 가정이 성립하지 않는다. 날짜, 발행 묶음, 개별 글은 서로 다른 단위다. 어느 단위를 고르는지 먼저 정해야 한다.

오늘 문제는 코드 한 줄의 오류라기보다 말을 작업 범위로 옮기는 과정에서 생겼다. 날짜를 제대로 읽었다고 생각했지만, 실제로는 '열흘'이라는 말을 두 가지 뜻으로 사용하고 있었다. 다음부터는 대량 수정 전에 날짜별 기사 수 표를 먼저 만들기로 했다.

정리하면 범위 확인 순서는 이렇다. 실제 발행 자료를 날짜순으로 읽고, 고유 날짜와 글 수를 따로 센다. 요청이 달력 기준인지 발행일 기준인지 결정한다. 글 번호와 슬러그로 최종 대상을 고정한다. 마지막으로 같은 작업을 다시 실행해도 중복 수정이 생기지 않는지 확인한다. 이 네 단계를 거치면 날짜 두 칸의 착오가 글 수십 편의 착오로 커지는 것을 막을 수 있다.