projectloop-ad

해결하려던 문제

팀의 공개 소개에 따르면 loop-ad는 검색, 조회, 클릭, 예약 같은 고객 행동을 수집하고 캠페인에 맞는 고객군을 추천합니다. 선택한 고객군을 광고 생성과 실험에 연결하고, 결과를 다음 판단에 반영하는 것이 제품 전체의 흐름입니다.

개인 작업에서 집중한 문제는 추천 화면에 보인 고객군과 실제 광고 실험에 배정된 고객군을 일치시키는 일이었습니다. 두 집합이 달라지면 결과를 신뢰하기 어렵고 같은 결정을 재현하기도 어렵습니다.

담당 역할과 책임 범위

공개된 역할은 Data & AI Engineer입니다. 공개 PR에서 확인되는 개인 작업은 다음 범위입니다.

  • 64차원 사용자 행동 좌표계 기반 세그먼트 대상 사용자 계산
  • ANN 후보에 대한 exact cosine과 raw event 조건 재검증
  • 후보별 source snapshot과 선택 조합 final snapshot 설계
  • promotion 단위 exclusion과 reservation lifecycle 구현
  • analysis, generation, segment scope와 카드별 run 결속
  • PostgreSQL과 ClickHouse 사이 revision-aware projection 계약 정렬
  • migration 재실행성과 기존 데이터 호환성 검증
  • 전체 Expedia 원본을 사용한 sealed evaluation과 외부 데이터 재평가

이 범위는 loop-ad 전체 플랫폼과 인프라를 혼자 구현했다는 뜻이 아닙니다. Dashboard, 다른 백엔드 서비스와 AWS 인프라는 팀 전체의 기술 범위입니다.

시스템 제약

추천 후보는 서로 같은 사용자를 포함할 수 있습니다. 동시에 한 promotion에 확정된 사용자는 이후 추천과 실험 대상에 다시 포함되지 않아야 합니다. PostgreSQL의 검색 결과와 ClickHouse의 행동 조건 집계도 같은 exclusion revision을 해석해야 했습니다.

기존 경로와 데이터도 유지해야 했습니다. 새 V2 계약을 활성화하기 전에 Data Contract migration이 선행되어야 하고, Dashboard는 snapshot 수치와 선택 조합의 최종 수치를 구분해 읽어야 했습니다.

구현 구조

source snapshot은 후보의 원래 의미와 회원을 보존합니다. 확정 단계에서는 선택한 1개에서 3개의 후보 안에서만 중복을 해소하고 segment별 final snapshot을 만듭니다. allocation plan은 선택 집합과 정책 version, exclusion revision을 고정합니다.

promotion run은 현재 카드의 analysis, generation, segment scope를 명시적으로 결속합니다. assignment는 run에 연결된 final snapshot member만 사용합니다. 실행 단계에서 ANN 검색이나 winner 계산을 다시 하지 않습니다.

데이터 계약과 서비스 경계

Decision과 Dashboard, PostgreSQL, ClickHouse가 같은 ID, 상태, revision과 lifecycle을 해석해야 했습니다. Data Contract에는 snapshot, allocation plan, exclusion state와 member, run target binding을 추가했습니다.

ClickHouse projection은 낮은 revision이 늦게 도착해도 최신 상태가 뒤집히지 않도록 설계했습니다. PostgreSQL의 current revision보다 ClickHouse checkpoint가 뒤처지면 새 V2 분석을 시작하지 않는 경계도 포함했습니다.

검증과 확인된 한계

공개 PR에는 canonical schema와 migration chain 적용, migration 재실행, fresh schema와 expanded schema의 정규화된 DDL 일치, snapshot 중복 조건, reservation 상태 전환과 run binding에 대한 검증이 기록되어 있습니다.

sealed evaluation은 고객군 후보를 선별하는 관련 기준 대부분을 통과했지만 예상 전환율 평균 절대오차 기준에는 실패했습니다. 고객군을 찾는 능력과 전환율을 정확히 맞히는 능력은 다른 문제입니다. 외부 데이터 재평가도 일반화를 완전히 증명하지 않습니다.

배운 점

데이터 계약은 테이블 모양을 맞추는 일만으로 끝나지 않습니다. 같은 snapshot을 언제 만들고 누가 수정할 수 있는지, revision이 뒤처졌을 때 어떤 작업을 막는지, 재시도와 롤백에서 기존 결정을 어떻게 보존할지까지 포함해야 합니다.

추천 품질만으로 운영 가능한 의사결정 시스템이 되지는 않습니다. 화면에 제시한 근거와 실제 실행 대상을 같은 lifecycle 안에 두어야 결과를 설명하고 다시 검증할 수 있습니다.

공개 자료