차이 비교가 빈 결과를 냈다고 입력이 정상이라는 뜻은 아니다. 실제 스냅샷 도구의 사전 생성 부분을 읽고 같은 식별자가 여러 번 들어오면 무엇이 사라지는지 새 예제로 확인했다. 비교 알고리즘 앞의 입력 계약에 대한 이야기다.
사전은 한 키에 한 값을 남긴다
목록을 provider·model 키의 사전으로 바꾸면 같은 키가 다시 나올 때 앞의 값이 덮일 수 있다. 그 뒤 차이를 비교하면 중복이 있었다는 정보 자체가 없어질 수 있다. 나는 정렬과 비교의 정확성보다 먼저 입력 행이 보존됐는지 확인해야 한다고 판단했다.
원래 코드의 구조에서 찾은 위험을 실제 데이터 손실 사건처럼 꾸미지 않았다. 고객 자료와 현재 피드를 가져오지도 않았다. 새 독립 index 함수는 빈 사전을 만들고 행을 하나씩 넣기 전에 같은 복합키가 이미 있는지 검사한다. 발견하면 어느 쪽을 고를지 추측하지 않고 실패한다.
before와 after를 같은 기준으로 읽는다
새 목록만 검사하면 이전 목록의 중복이 비교 기준을 왜곡할 수 있다. diff는 before와 after 모두 index를 거친다. 한쪽에만 중복이 있어도 실패하고 두 쪽이 같은 중복을 가졌다고 정상으로 보지 않는다. 서로 같은 오류가 있다는 이유로 입력 계약을 통과시키지 않은 것이다.
합성 테스트는 before 중복과 after 중복을 따로 만든다. 같은 값이 두 번이어도 예외가 난다. 값이 우연히 같다는 사실은 중복 수집과 식별 충돌이 없다는 증거가 아니기 때문이다. 중복 제거가 필요한 업무라면 그 규칙을 비교 이전의 별도 단계로 명시해야 한다.
복합 식별자를 정하는 책임
합성 모듈은 provider와 model의 두 문자열을 키로 쓴다. 다른 사업에서는 회사·품목·버전 같은 조건이 더 필요할 수 있다. 같은 이름이 실제로 같은 대상을 뜻하는지 먼저 정해야 한다. 현재 함수가 전 세계 서비스의 모든 별칭과 버전 관계를 이해하는 것은 아니다.
문자열을 소문자로 바꾸거나 공백을 없애는 정규화도 자동으로 하지 않는다. 어떤 차이는 단순 표기일 수 있고 어떤 차이는 실제 구분일 수 있다. 임의로 합친 뒤 중복을 없애는 것보다 사업에서 승인한 식별 기준을 입력 계약으로 삼는 방향이 필요하다. 이번 예제는 그 기준이 이미 정해졌다는 좁은 전제를 둔다.
실패는 비교하지 못했다는 결과다
중복 때문에 예외가 나면 변경 없음이 아니라 비교 불가다. 상위 화면은 오래된 결과를 그대로 최신 비교처럼 보여 주면 안 된다. 현재 코어는 예외를 내고 표시 문구와 운영 알림은 정하지 않는다. 실제 통합에서 정상·변경·입력 검토 필요를 분리해야 한다.
함수가 실패하기 전 원래 입력 객체를 바꾸지 않는지도 확인한다. 오류를 찾는 검사가 자료 자체를 조용히 정리해 버리면 원인을 다시 조사하기 어렵다. 새 코드에는 자동 덮어쓰기와 원본 파일 수정이 없으며 다른 사업체 프로그램을 실행하지 않는다. 진단을 위한 입력을 보존하는 정책이다.
행 수보다 어떤 행인지가 중요하다
양쪽 목록의 개수가 같아도 하나가 중복되고 다른 하나가 빠졌을 수 있다. 개수 검사만으로는 그 상태를 알아내지 못한다. 키의 유일성과 각 값의 유효성을 확인한 뒤 추가·삭제·변경을 나누는 순서가 필요하다. 단순한 입력 검사가 결과의 의미를 지켜 주는 셈이다.
최종 diff는 숫자 변화와 확인 메타데이터, 표현 변경을 분리한다. 중복 검사는 그 분류를 믿고 읽기 위한 앞단 조건이다. 이전 글의 변경 분류를 반복하기보다 그 분류가 시작되기 전에 어떤 입력을 허용할지에 집중했다. 같은 패키지를 쓰더라도 글의 질문은 다른 층위에 있다.
범용 모듈을 작게 남긴 이유
필드 비교 패키지의 12개 테스트는 양쪽 중복과 추가·삭제, 값·단위·메타데이터와 입력 보존을 확인했고 ZIP 추출에서도 통과했다. 실제 외부 피드의 중복률과 운영 품질을 측정한 것은 아니다. 예제 선택기는 실제 로컬 실행 기록을 읽으며 개인 정보와 업체 이름을 담지 않는다.
나는 복잡한 비교 도구를 하나 더 만드는 대신 사전으로 바뀌기 전에 지켜야 할 약속을 공유하고 싶었다. 다른 자료 수집과 병합에서도 같은 질문을 먼저 할 수 있다. 행이 사라질 수 있는 변환이 어디인지 찾고 그 전에 필요한 증거를 검사하면 결과를 설명하기 쉬워진다.