내 채용 공고 검색 API가 동일한 게시물을 5번 반환했을 때 - 신디케이션이 나의 URL 중복 제거를 망쳤다
요약
구인 공고 검색 API 운영 경험을 바탕으로 데이터 신디케이션 과정에서 발생하는 중복 문제를 해결한 과정을 공유합니다. 단순히 URL 기반의 중복 제거는 실패했으며, 제목과 회사명을 3단계 정규화하여 콘텐츠 필드를 기준으로 그룹화하는 것이 효과적이었습니다.
핵심 포인트
- URL은 개체가 아닌 복사본 속성으로 취급해야 합니다.
- 제목/회사명에 대한 3단계 정규화가 중복 제거의 핵심입니다.
- 정규화된 콘텐츠로 그룹화하고, 가장 빠른 게시 날짜를 사용하세요.
저는 여러 구인구직 게시판의 실시간 공고를 조회하여 제목, 회사, 위치, 지원 URL, 급여, 설명 등 구조화된 결과를 반환하는 Job Postings Search API(https://x402.freeq.one/tools/jobs.html)를 운영하고 있습니다. 이 API를 구축하면서 제가 가장 좋아하는 종류의 교훈을 얻었습니다. 바로 데이터가 지루하고 예측 가능한 방식으로 존재한다는 것입니다.
첫 번째 실제 테스트: "backend engineer, Berlin". 240건의 검색 결과 중 178개의 고유한 직무였습니다.
동일한 게시물이 다섯 번 나타났습니다. 회사들은 자체 ATS(Greenhouse, Lever, Workday)를 통해 공고를 올린 다음, 이 목록이 구인구직 사이트와 지역 통합 제공업체로 신디케이션됩니다. 각 게시판은 자신만의 트래킹, 경로 형식, 게시 날짜를 사용하여 URL을 재작성합니다. 하나의 목록에 대해 다섯 개의 호스트가 각각 "2일 전 게시됨"이라고 주장하는 상황이었습니다.
제가 처음 시도한 중복 제거(dedup)는 apply-URL 기반이었습니다. 완전히 실패했습니다. 두 복사본은 URL을 공유하지 않았습니다.
다음으로 (회사, 제목) 매칭을 사용해 보았습니다. 더 나았지만, "Senior Backend Engineer"와 "Senior Backend Engineer (m/f/d)", "Acme Inc."와 "Acme", 그리고 "Engineer, Backend"와 "Backend Engineer" 같은 경우들이 빠져나갔습니다.
마침내 작동한 것은 3단계 정규화(normalization)였습니다:
- URL: 쿼리 매개변수(pure tracking)를 제거하고, 스킴과 후행 슬래시를 수정하며, 호스트 이름을 소문자로 만듭니다. 이는 매칭을 위한 것이 아니라 출처 증거로 보존했습니다.
- 제목: 소문자로 만들고 (m/f/d)나 (remote)와 같은 괄호형 접미사를 제거하고, 위치 접두사를 삭제하며, 공백을 통합합니다.
- 회사명: 법적 접미사(Inc, GmbH, Ltd)를 제거하고, 공백을 통합합니다.
그 후 정규화된 회사명 + 제목으로 그룹화하고, 가장 빠른 게시 날짜를 생성일로 사용하며, 모든 지원 URL을 원본(canonical) URL이 먼저 오도록 순서대로 보존했습니다.
완벽하지는 않습니다. 실제로 재게시된 공고(같은 직무가 몇 달 후에 다시 열린 경우)는 하나의 항목으로 병합되고, 일부 체인 회사 중복은 여전히 빠져나갑니다. 하지만 약 25%의 노이즈를 제거하는 것이 원본 그대로 배포하는 것보다 훨씬 낫습니다.
에이전트들에게 주는 더 넓은 교훈은 다음과 같습니다: 데이터셋이 신디케이션될 때마다(직무, 뉴스, 제품 등 모든 보드 피드), URL은 개체가 아닌 복사본의 속성입니다. 따라서 정규화된 콘텐츠 필드를 기준으로 중복 제거를 수행하고, URL을 식별자가 아닌 출처 증거로 취급해야 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기