Event Center 구축: Karrot의 사용자 이벤트 관리 플랫폼
Karrot은 코드 중심 이벤트 관리에서 UI 기반 Event Center와 타입 안전 CLI로 전환했다.
Karrot은 매일 쌓이는 대규모 user event를 더 일관되고 안전하게 다루기 위해, 회사 전체의 로깅 규칙을 다시 정리하고 Event Center라는 관리자 플랫폼을 만들었다. 기존의 Git 기반, 코드 중심 워크플로우를 UI 중심으로 바꾸고, 수작업을 최대한 자동화하는 방향으로 전환했다.
user event는 제품 개선과 실험 설계, 데이터 기반 의사결정의 출발점이다. Karrot의 수집 파이프라인은 대략 다음처럼 흘러간다.
- 모바일 앱의 SDK가 조건 또는 주기에 따라 이벤트를 전송한다.
- 이벤트 서버가 기본 검증 후 GCP Pub/Sub로 전달한다.
- GCP Dataflow가 실시간 검증, 짧은 구간 중복 제거, 데이터 평탄화를 수행한다.
- 유효한 데이터는 GCS와 BigQuery에 저장되고, 잘못된 이벤트는 DLQ Pub/Sub와 별도 BigQuery 테이블로 분리된다.
- 이후 배치 중복 제거를 한 번 더 거쳐 정확도를 높인 뒤, 바로 조회 가능한 형태로 적재한다.
스키마는 단순한 메타데이터가 아니라 이벤트의 의미와 책임을 정하는 기준이다. 각 이벤트에는 owner와 domain이 붙고, 공통 필드 외의 custom parameter도 문서화된다. 스키마를 추가하면 BigQuery가 해당 이벤트용 테이블을 자동 생성하고, JSON에 묶여 있던 값들이 일반 컬럼처럼 조회 가능해진다.
기존에는 스키마를 Git 기반 코드로 관리했다. Spark StructType JSON 형식의 파일을 직접 작성해야 했고, CI 검증과 PR 리뷰를 거쳐야 했으며, 중첩 구조가 깊어질수록 괄호 하나, 콤마 하나가 실패 원인이 되었다. 그 결과 문제가 계속 누적됐다.
- 스키마 작성 자체가 복잡하고 실수하기 쉬웠다.
- 리뷰와 수정 왕복이 길어져 반영 속도가 느렸다.
home_feed와homeFeed처럼 이벤트 이름이 제각각이었다.- 같은 화면도 팀마다 다른 이름으로 부르며 문서가 흩어졌다.
이 문제를 풀기 위해 Karrot은 두 가지를 동시에 바꿨다. 하나는 회사 공통 user event system을 세우는 것이고, 다른 하나는 그 규칙을 쉽게 따를 수 있게 하는 Event Center UI를 만드는 것이었다. 이벤트 이름은 **Service → Screen → Action(Event)**의 3단계 구조를 따르고, client_{action}_{service}_{screen}_{object} 형식으로 통일했다.
Event Center에서는 서비스, 화면, 이벤트를 한 곳에서 관리한다. 사용자는 Spark StructType JSON이나 validation rule을 몰라도 되고, 시스템이 대신 네이밍 규칙 적용, 스키마 생성, 검증, BigQuery View Table 생성까지 처리한다. 화면 단위로 이벤트를 모아 보며, 어떤 화면에서 어떤 이벤트가 발생하는지도 바로 확인할 수 있다.
QA도 더 빨라졌다. 개발자는 로깅 코드를 넣은 뒤 자신의 user ID로 이벤트를 검색해 거의 실시간으로 수집 여부와 파라미터 값을 확인할 수 있다. BigQuery를 직접 열어보지 않아도 item_id 같은 값이 제대로 들어왔는지 즉시 검증할 수 있다.
마지막으로 CLI 코드 생성이 붙었다. Event Center에서 정의한 스키마를 기반으로 플랫폼별 타입 코드를 자동 생성해 iOS는 Swift, Android는 Kotlin, Webview는 TypeScript로 변환한다. 덕분에 오타나 타입 불일치는 컴파일 단계에서 잡히고, IDE 자동완성까지 활용할 수 있어 로깅 안전성이 크게 높아졌다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.
