데이터 품질은 전쟁이다: 22개 항목 감사와 끝나지 않는 정비 | Signals EP.12
"한 번 만들면 알아서 돌아가겠지"는 가장 위험한 착각. 22개 품질 감사 체계와 1주일 스프린트, 2시간 주기 사이클로 18만 건의 품질을 유지하는 방법. 시리즈 12편.
시리즈: 공공데이터에서 영업 시그널을 자동으로 발굴하기까지, 11편 읽기
"한 번 만들면 끝"이라는 환상
데이터 수집 시스템을 만들 때 가장 위험한 착각이 있다. "한 번 잘 만들어놓으면 알아서 돌아가겠지."
절대 그렇지 않다.
데이터 품질은 자연적으로 부식된다. 사이트가 변하고, 새로운 예외 케이스가 나타나고, 기존 데이터가 낡아간다. 품질 관리는 일회성 작업이 아니라 지속적인 전쟁이다.
22개 항목 품질 감사
이 시스템에는 22개 섹션으로 구성된 품질 감사 체계가 있다. 전체 데이터를 주기적으로 스캔해서 문제를 찾는 시스템.
심각도별 감사 분류
- CRITICAL: 날짜 오류, 도메인 불일치, 중복 레코드, 스코어-퍼널 불일치
- HIGH: HTML만 있는 본문, 유효하지 않은 URL, 첨부파일 추출 실패
- MEDIUM: 메타데이터 누락 (기관명, 부처명)
- LOW: 포맷 일관성, 정규화 수준
이 감사를 18만 건 전체에 돌리면 현재 품질 상태의 스냅샷이 나온다. "CRITICAL 0건, HIGH 174건" 같은 식으로.
1주일의 품질 스프린트
시스템 가동 후 적지 않은 데이터가 쌓인 시점에서, 1주일짜리 품질 스프린트를 했다.
18만 건 전체를 감사하고, 발견된 문제를 하나씩 고쳤다. 14개 이상의 전용 스크립트를 만들어서.
주요 정비 스크립트
- 첨부파일 URL 수정 스크립트
- 쓰레기 데이터 제거 스크립트
- HTML 전용 본문 정제 스크립트
- 콘텐츠 해시 중복 제거 스크립트
- 메타데이터 복구 스크립트 (기관/부처/날짜 누락)
- 수집 검증 스크립트 (잘못된 날짜, 도메인 불일치)
- 파일명 정규화 스크립트
이 스크립트들은 일회성이 아니다. 새로운 데이터가 들어올 때마다 다시 돌아야 한다. 그래서 주기적으로 배치로 실행되도록 구성했다.
사이트가 변하면 품질이 깨진다
품질 문제의 근본 원인은 원본 데이터가 계속 변한다는 것이다.
- 사이트가 리뉴얼되면 기존 선택자가 안 동작한다 → 새로 들어오는 데이터의 품질이 떨어진다
- 오래된 게시물의 URL이 낡아간다 → 기존 데이터의 참조 무결성이 깨진다
- 새로운 형식의 첨부파일이 등장한다 → 기존 파서가 못 읽는 경우 발생
품질은 한 번 달성하면 끝나는 게 아니라, 계속 유지해야 하는 상태다. 마치 정원을 가꾸는 것처럼. 가만두면 잡초가 난다.
감사와 정비의 순환
현재 시스템은 이런 순환을 2시간 주기로 돌린다.
- 수집: 새로운 데이터를 가져온다
- 정제: HTML 정리, 메타데이터 추출, 첨부파일 텍스트 추출
- 분석: AI 스코어링, 임베딩 생성, 관련성 판단
- 유지보수: 교차 연결, 연속 과제 추적, 예산 매칭
각 단계에서 품질 검증이 들어가고, 문제가 발견되면 다음 순환에서 보정된다.
이 순환이 멈추면 품질이 즉시 하락한다. 1주일만 방치해도 수백 건의 새로운 문제가 쌓인다. 데이터 품질은 한 번의 마라톤이 아니라, 매일 뛰는 조깅이다.
품질 지표의 변화
스프린트 전후를 숫자로 보면:
| 항목 | 전 | 후 |
|---|---|---|
| CRITICAL 이슈 | 4건+ | 0건 |
| 첨부파일 텍스트 | 5,263건 | 53,792건 |
| 쓰레기 첨부파일 | 155,616건 | 제거 |
| 기관명 누락 | 2,255건 | 89건 |
| 날짜 누락 | 2,177건 | 0건 |
| 파일명 오염 | 39,499건 | 정리 완료 |
이 숫자들은 자랑하려고 내는 게 아니다. 데이터 품질 관리가 얼마나 많은 노력을 요구하는지 보여주는 수치다. 그리고 이건 1회성 스프린트의 결과일 뿐, 지속적 유지가 필요하다.
다음 에피소드에서는 18만 건의 데이터에 점수를 매긴다는 것이 왜 어려운지 이야기한다.