Post

멀티소스 검색의 메타데이터 노이즈를 정규화해보자

작성자 상태 괄호와 카테고리 표기 노이즈를 백필 대신 조회 시점 정규화로 처리해 28,922건 카테고리 채움율을 0%에서 100%로 올렸다

멀티소스 검색의 메타데이터 노이즈를 정규화해보자

멀티소스 검색의 메타데이터 노이즈를 정규화해보자

개인 검색 인프라 프로젝트에 문서 저장소·이슈트래커 등 여러 소스를 한 인덱스에 모으니, 소스마다 다르게 붙는 메타데이터 표기가 검색 품질을 갉아먹었다. 작성자 필드에 “(Deactivated)” 같은 상태 괄호가 섞여 같은 사람이 다른 사람처럼 보였고, 이걸 고치는 방법도 한 번 갈아엎었다.

1. 서론 (Introduction)

  • 문제/상황 (Problem): 여러 소스를 합치니 작성자 필드에 “(Deactivated)”, “(Unlicensed)”, “(퇴사)” 같은 상태 괄호가 섞여 동일 인물이 다른 사람처럼 집계됐고, 카테고리 필드도 따옴표·해시(#) 접두가 섞여 그룹핑이 깨졌다.
  • 목적 (Purpose): 저장 구조를 바꾸지 않고 메타데이터 노이즈를 정규화해 카테고리 채움율과 작성자 집계 정확도를 회복한다.
  • 대상 (Target Audience): 여러 소스 데이터를 한 검색 인덱스로 합치는 개발자.

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection): 소스별 노이즈 패턴을 정리했다.

    필드노이즈 예시원인
    작성자김철수 (Deactivated), 이영희 (퇴사)소스 시스템이 계정 상태를 필드에 덧붙임
    카테고리'#인프라', "백엔드"소스마다 다른 인용부호·해시 표기
    문서 타입미분류 다수원본에 타입 필드가 아예 없는 소스 존재
  • 접근 방법 (Approach Methods):
    • [방법 1]: 정규화된 값을 DB 컬럼에 저장(백필)한다.
    • [방법 2]: 저장은 원본 그대로 두고, 조회(쿼리) 시점에 정규화 함수를 거친다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: 정규식 기반 normalize_author/normalize_category, 키워드 규칙 기반 classify_doc_type.
    • 주요 단계: 백필 방식 시도 $\rightarrow$ 대용량 rewrite 비용 확인 후 기각 $\rightarrow$ 조회 시점 정규화로 전환 $\rightarrow$ 카테고리·작성자·문서타입 정규화 적용.
    • 결과 도출 및 검증: 문서 테이블이 28,000행·본문 1.8GB라 백필 rewrite에 6분 이상 걸리고 CPU 99%를 찍어 기각했다. 조회 시점 정규화로 바꾸니 재임베딩 없이 0.8초 만에 정규화가 끝났다.

3. 결과 (Results)

  • 분석 결과 요약: 카테고리 채움율이 0%에서 100%(28,922건)로 올랐다. 문서 타입(doc_type) 자동 분류는 키워드 규칙만으로 62% 커버리지를 냈고, 나머지 38%는 미분류로 남았다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight): 카테고리 채움율이 0%였을 때 처음엔 “소스에서 그 데이터를 아예 안 가져왔나”부터 의심했다. 그런데 실제로는 계층(hierarchy) 정보 자체는 이미 100% 들어와 있었고, 그걸 카테고리로 변환하는 로직 한 줄이 정규화 함수에서 빠져 있었을 뿐이었다. 진단 방향을 “데이터 부재”에서 “변환 로직 누락”으로 바꾸자 폴백 하나만 추가해도 0%에서 100%(5,717개 distinct 값)로 채워졌다. 문제가 데이터 부재처럼 보여도 먼저 변환 로직부터 의심해야 한다는 걸 이때 배웠다. “메타데이터를 고치려면 저장 구조부터 바꿔야 한다”는 직관도 처음엔 당연해 보였다. 하지만 실제로는 저장은 그대로 두고 조회 시점에 정규화 함수 하나만 거치는 편이 대용량 rewrite 없이 같은 효과를 냈다. 원본을 건드리지 않았으니 정규화 규칙을 나중에 고쳐도 재적재가 필요 없다는 부수 이득도 있었다.
  • 실행 방안 (Action Plan): 메타데이터 정규화가 필요할 때는 백필부터 검토하지 않는다. 먼저 조회 시점 변환으로 처리 가능한지, 테이블 크기와 rewrite 비용을 어림 계산해보고 저장 구조 변경은 최후 수단으로 남긴다.
  • 한 줄 결론 (Key Takeaway): 메타데이터 노이즈는 저장을 바꾸지 않고 조회 시점에 정규화하는 편이 28,000행 규모에서는 6분짜리 백필보다 0.8초 만에 끝났다. 샘플 코드
  • 다음 스텝 (Next Step): 문서 타입 분류는 아직 키워드 규칙 기반이라 62% 커버리지에 머문다. 나머지 38% 미분류를 줄이려면 규칙을 더 늘리거나, 규칙으로 안 잡히는 잔여만 가벼운 분류 모델에 넘기는 하이브리드가 필요하다.
This post is licensed under CC BY 4.0 by the author.