클릭 한 번으로 실험 시작! 반복 주기를 단축하는 추천 실험 시스템 개발기
PolicyEngine으로 실험 설정과 리뷰 시간을 2일에서 30분으로 줄였다.
아자르는 추천 알고리즘의 이터레이션 속도를 높이기 위해, 코드 변경과 배포 없이 실험을 켤 수 있는 low-code 실험 시스템을 먼저 도입했다. JSON 설정만으로 실험군을 자동 할당하고 새 알고리즘을 적용하는 방식이었지만, 조직이 커지고 실험이 늘어나면서 설정 파일이 지나치게 커지고 구조도 복잡해졌다.
이 문제를 해결하기 위해 Policy와 Experiment를 분리한 PolicyEngine으로 시스템을 재설계했다. 자주 바뀌지 않는 기본 설정은 Policy로, 실험 대상에게만 적용되는 설정은 Experiment로 나누고, Experiment가 Policy를 오버라이드하도록 해서 복잡한 세그먼트 분기와 설정 충돌을 줄였다.
집단 표현에는 JSON 대신 Python 기반 DSL을 채택했다. and, or, not, in 같은 친숙한 문법을 활용하면서도, 실제로는 제한된 subset language로 운영해 가독성과 표현력을 모두 확보했고, ast와 simpleeval로 파싱 및 실행을 처리했다.
DSL의 효과는 즉시 나타났다.
- 국가별 세부 설정의 공통 패턴을 함수로 묶어 7천 줄 -> 50줄, 약 99% 감소
- 수십 개 설정 조합을 렌더링하는 공통 함수를 만들어 설정 변경·리뷰 시간을 4일 -> 반나절, 87% 단축
실험 간 충돌 방지를 위해서는 정적 분석 기반의 MECE 검증을 추가했다. ast로 DSL을 파싱한 뒤 이를 Z3 표현식으로 변환해 교집합과 누락 여부를 자동 검사하고, 실험 설정 PR 단계에서 충돌을 사전에 차단했다.
운영 편의성을 높이기 위해 실시간 모니터링 대시보드도 만들었다. Lucene query로 특정 국가나 집단만 필터링해 확인할 수 있어, 소규모 실험의 지표 희석 문제를 줄이고 적용 여부를 빠르게 검증할 수 있게 했다.
그 결과 실험 설정 작성과 리뷰에 걸리던 평균 시간이 2일 -> 30분, 약 97% 단축됐다. 무엇보다 중요한 변화는 실험 담당자가 소프트웨어 엔지니어의 도움 없이도 직접 설정을 작성하게 되었고, 현재는 대부분의 추천 실험이 설정 변경만으로 진행된다는 점이다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.