당근 로컬 프로필: Git 기반 변경 이력을 활용한 데이터 중복 처리 및 최적화 전략

🤖 AI 추천

백엔드 개발자, 데이터 엔지니어, 서비스 개발 리드

🔖 주요 키워드

당근 로컬 프로필: Git 기반 변경 이력을 활용한 데이터 중복 처리 및 최적화 전략

핵심 기술: 이 글은 당근의 로컬 비즈니스 서비스에서 발생하는 복잡한 데이터 중복 문제를 해결하기 위해 Git의 변경 이력(commit) 개념을 차용한 아키텍처를 소개합니다. 다양한 경로로 수집되는 업체 정보의 중복을 방지하고, 여러 프로필에 흩어진 최신/최적의 정보를 대표 프로필로 효과적으로 통합하는 방안을 제시합니다.

기술적 세부사항:

  • 로컬 프로필 생성 방식: 사장님 직접 등록, 유저 제안, 외부 수급 등 세 가지 방식을 통해 로컬 프로필이 생성됩니다.
  • 중복 문제 발생: 유저 제안 등으로 프로필이 생성된 후 사장님이 직접 등록할 경우 동일 업체가 중복 노출되는 문제가 발생합니다.
  • 초기 중복 방지 및 처리: 유사 프로필 탐지 및 연결, 중복 프로필 탐지 후 대표 프로필로 병합하는 시스템을 구축했습니다.
  • 병합 정책: 대표 프로필은 노출, 병합된 프로필은 미노출 및 대표 프로필로 리다이렉트합니다.
  • 병합 후 아쉬운 점: 병합된 프로필에 더 최신의, 혹은 더 좋은 정보가 포함되어 있음에도 대표 프로필에 반영되지 못하는 현상이 발생합니다.
  • Git에서 영감 얻기: Git의 브랜치별 변경 이력을 추적하고 필요한 변경 사항만 취합하여 병합하는 방식에서 아이디어를 얻었습니다.
  • 변경 이력 기반 최적화:
    • Local Profile Mutation 객체를 통해 로컬 프로필의 생성 및 변경 절차를 통일하여 일관된 변경 이력(변경 시점, 소스, 값 등)을 저장합니다.
    • Snapshot 개념을 도입하여, 병합 관계에 있는 모든 프로필의 변경 이력을 조회하고 최적의 변경 값을 선별하여 대표 프로필에 반영합니다.
    • Snapshot Candidate 선정 로직: 변경 시점과 변경 소스를 기준으로 최적의 값을 선정합니다.
    • Reduce 추상화: FilterEvaluator를 사용하여 유연하게 최적의 스냅샷 값을 선정하는 로직을 구성합니다.
      • Filter: 변경 사항을 포함할지 검사 (예: Composite Snapshot 무시, 신뢰 낮은 소스 변경 무시).
      • Evaluator: 두 Candidate 간 우선순위 결정 (예: 빈값 vs 비어있지 않은 값, 사장님 변경 우선, 신뢰할 만한 외부 정보 우선).
  • 결과: 대표 프로필에 가격표, 영업시간, 홈페이지 주소 등 풍부한 데이터 노출이 가능해졌습니다.

개발 임팩트: 복잡한 데이터 수집 및 관리 과정에서 발생할 수 있는 정보 유실을 방지하고, 사용자에게 최신의 정확한 업체 정보를 제공하는 서비스 품질 향상에 기여합니다. Git과 유사한 변경 이력 관리 및 병합 전략은 대규모 데이터 처리 및 시스템 확장성에 대한 좋은 아키텍처적 시사점을 제공합니다.

커뮤니티 반응: (원문에 직접적인 커뮤니티 반응 언급은 없으나, Git을 활용한 문제 해결 방식은 개발자 커뮤니티에서 긍정적인 반응을 얻을 수 있는 주제입니다.)

📚 관련 자료