댓글 수 6을 9로 바꾸는 수정은 작아 보였다. 그런데 같은 숫자가 들어 있는 연도와 시각까지 바뀔 수 있었다. K-POP PULSE의 운영 문서와 숫자 조정 함수 주석에는 이 치환이 날짜와 6PM 표기까지 바꿀 뻔한 기록이 있다.

나는 이미 저장된 날짜가 실제로 훼손된 사고로 이 이야기를 키우지 않는다. 기록은 바뀔 뻔한 상황과 그에 대한 대응이다. 당시 단위와 경계를 확인한 코드에서 한 걸음 더 나아가, 다른 홈페이지가 숫자의 의미를 입력 단계부터 구별할 수 있는 작은 프로그램을 새로 만들었다.

문자열은 같은 숫자의 서로 다른 역할을 모른다

댓글 수와 연도, 발매 시각에 같은 글자가 들어 있어도 서로 바꿀 수 있는 값은 아니다. 전역 문자열 치환은 그 차이를 읽지 않는다. 날짜를 이루는 마지막 한 자리와 댓글 한 자리를 같은 대상으로 찾으면 바꾸고 싶었던 문장 밖의 사실도 함께 움직인다.

아래는 현재 새로 실행해 볼 수 있는 합성 예제다. 옛 원고 파일이나 당시 저장 결과를 복원한 것이 아니다. 작업 기록의 위험을 작은 입력으로 설명한다. 코드는 의도한 댓글 값뿐 아니라 연도와 시각도 바꾼다. 문자열의 모양이 같다는 이유만으로 뜻이 같은 것은 아니라는 결과를 직접 읽을 수 있다.

코드와 구현 살펴보기

새 합성 위험 재현. 과거 저장 원고가 아니다.

# New synthetic demonstration of an unsafe global replacement.
text = "2026.08.19 6PM — 6 comments"
print(text.replace("6", "9"))
# 2029.08.19 9PM — 9 comments
# This is not a recovered historical saved article.

단위를 붙인 대응에도 적용 범위가 있다

당시 함수는 작은 값을 단위어가 붙은 표기에서 바꾸고 큰 숫자에는 숫자 경계를 확인하는 대응을 담았다. 실제 입력에서 바꾸려던 수치 문단과 유지해야 할 문단을 대조하는 검사가 필요했다. 정규식 조건을 붙였다는 이유만으로 모든 언어와 날짜 표기에 안전해지지는 않는다.

숫자 뒤에 오는 단어가 항상 같은 의미라고 보장할 수 없고 작품명에도 숫자가 들어간다. 새 사이트의 원고 형태를 읽지 않고 기존 코드를 가져오면 다른 예외가 생긴다. 나는 적용할 때 바꿀 값과 바꾸면 안 되는 날짜·시각·이름을 함께 검사할 조건으로 둔다.

찾아 바꿀 문장보다 표시할 관측값을 먼저 분리한다

이번 공유 프로그램은 완성된 글을 검색해 수정하지 않는다. 관측값과 표시 이름을 별도의 입력 필드로 받고 날짜나 작품명 같은 문맥은 다른 필드에 둔다. 조회 수가 달라졌다면 조회 수 표시를 다시 만들고, 문맥 문자열은 같은 값으로 돌려준다.

이 구조가 모든 원고를 자동 갱신하는 기능은 아니다. 기존 글에 숫자가 이미 문장으로 들어 있다면 어떤 문장을 바꿀지 편집자가 연결해야 한다. 대신 숫자가 들어간 모든 문자열을 돌아다니며 바꾸는 일을 줄인다. 프로그램이 맡을 범위를 좁히면 무엇을 보존했는지도 더 분명하게 검사할 수 있다.

0과 모름을 같은 입력으로 받지 않는다

확인한 값이 0인 경우와 아직 값을 얻지 못한 경우도 구별했다. 미확인 값은 미확인 표시를 유지하고, 알려진 수치는 실제 관측 시각을 요구한다. 음수와 소수, 참·거짓 값을 수치로 슬쩍 받아들이지 않는다. 문맥은 중첩된 JSON도 복사해 원래 값을 보존한다.

관측 시각을 입력받는다고 출처가 자동 인증되는 것은 아니다. 거짓 시각도 입력될 수 있다. 수집 단계가 값이 없는 상태를 이미 0으로 바꿨다면 표시 프로그램이 그 이전 상태를 되찾을 수도 없다. 나는 앞 단계에서 손실이 생기는지 먼저 확인한 뒤 이 계약을 적용한다.

새 코드와 검사 방법을 함께 공유한다

표시 프로그램은 표준입력이나 파일의 JSON을 읽는 Python CLI이며 네트워크·DB 쓰기·발행 기능을 갖지 않는다. 현재 합성 입력과 실제 CLI 실행을 포함한21검사가 통과했다. 날짜와 시각을 보존하고 잘못된 필드와 값, 관측 시각이 빠진 입력을 거부하는 범위를 확인했다.

공유 ZIP에는 프로그램과 관측값 처리 함수, 입력 예제, 검사 코드, 적용 설명이 함께 있다. 다른 홈페이지에서는 수집한 값의 형태와 언어, 문맥 필드를 맞춰 사용하면 된다. 출력 문자열은 HTML을 안전하게 만드는 도구가 아니므로 화면에 넣을 때는 그 화면의 텍스트 처리 방식도 확인해야 한다.

새 관측값 표시 CLI와 재현 검사 ZIP

작은 수정도 바뀌지 않아야 할 사실을 남긴다

홈페이지 제작에서 카피 수정과 프로그램 수정은 따로 떨어져 있지 않았다. 값을 최신으로 보이게 하려던 작업이 독자에게 다른 날짜를 약속할 수 있었다. 나는 수정 요청을 받을 때 무엇을 바꿀지와 어떤 사실을 그대로 둘지를 함께 읽으려 한다.

옛 대응은 당시의 문장 형태를 다룬 코드였고 이번 공유물은 다른 프로젝트에 적용하기 위한 새 구현이다. 이 차이를 남겨야 과거 프로그램을 그대로 검증한 것처럼 오해하지 않는다. 숫자 하나를 고치는 작업에도 자료의 뜻과 관측 시점을 보존할 자리가 필요했다.