GeekNews에 공유된 Airbridge 사례를 보면, 광고 효과 측정 시스템의 핵심이 단순한 "빠른 처리"가 아니라 순서·유실·중복 없이 한 번만 처리하는 것이라는 점이 다시 한번 확인됩니다.

모바일 트래킹 환경에서 사용자 행동은 광고 클릭 → 설치 → 첫 실행 → 구매의 사슬로 이어지는데, 서버는 이 이벤트를 실시간으로 받아 매칭해야 합니다. 단순한 throughput 최적화로는 해결되지 않는 순서 보장과 멱등성(idempotency) 문제가 시스템 정합성의 본질이라는 게 이 글의 핵심 주장입니다.
- Airbridge는 광고 클릭·설치·구매 같은 이벤트를 실시간으로 매칭하므로, 이벤트를 빠르게 처리하는 것뿐 아니라 필요한 순서로 처리하고 유실·중복을 막는 일이 중요함.
- 기존에는 Kafka 메시지를 마이크로 배치로 가져와 이벤트 종류별로 순차 처리함.
- 순서는 제어하기 쉬웠지만, 앞선 이벤트 처리를 기다리는 동안 다른 워커가 유휴 상태가 됨.
- 워커별 처리 속도 차이와 hot partition이 겹치면, 서버를 증설해도 처리 속도가 정체됨.
- 이를 해결하기 위해 Project Differential을 설계함.
- 마이크로 배치를 없애고, 이벤트 종류별
Consumer가 같은 Kafka topic을 독립적으로 읽음. - 순서 보장은 topic 전체가 아닌 partition 단위로 수행하며, 순서가 중요한 동일 사용자 흐름의 이벤트가 가능한 한 같은 partition에 들어가도록 구성함.
- 뒤따르는 Consumer는 앞선 Consumer의 처리 위치를 추월할 수 없으며, offset 또는 event time 기준의 안전거리를 둠.
- 앞선 Consumer가 처리하지 않는 메시지는 다음 Consumer에게 넘겨 재사용하고, 버퍼가 가득 차면 Kafka를 직접 읽는 Polling Mode로 전환함.
- 내부적으로는 partition별
ConsumerSuite/PartitionedConsumerChain을 두고,LimitedEventProcessor가 앞선 Consumer의 checkpoint를 넘지 않도록 제어함. CommitManager는 버퍼링·비동기 처리 중에도 실제 완료된 연속 offset만 Kafka에 commit하도록 관리함.- 테스트 운영에서 이벤트 유실·중복 없이 동작하는 것을 확인했고, 기존 마이크로 배치 방식 대비 10배 이상 처리 속도가 향상됨.
- 완전한 전역 순서를 만드는 대신, 실제 비즈니스에 필요한 순서를 best effort로 지키며 처리량을 확보한 사례임.
- 향후에는 구조 단순화, Spot Instance 종료 상황에 대응하는 adaptive flow control, 순차 처리 자체를 줄이는 아키텍처 개선을 검토 중임.

한국 시장에서의 시사점
한국 모바일 광고 시장도 이제 어트리뷰션 기반의 신뢰 가능한 정산이 필수입니다. CPI·CPC 정산 분쟁이 잦은 한국 환경을 고려하면, 다음 세 가지 실무 권장이 유효합니다.
- 이벤트 ID 생성 전략 일관화 — 클라이언트/서버 양쪽에서 동일 ID 생성기를 사용하고, 시간·디바이스·세션 키를 입력으로 hash 고정.
- 순서 보장을 위한 Kafka partitioning key — 디바이스 ID를 partition key로 두면 같은 사용자 이벤트가 항상 같은 파티션으로 가서 순서가 자동 보장됩니다.
- 유실 복구용 dead-letter queue — 매칭 실패 이벤트는 DLQ 에 보존하고, 일 배치로 재처리. 한국 모바일 네트워크 특성상 일시적 단절이 잦으므로 DLQ 가 필수 안전망.
이런 인프라 가정이 단단히 잡혀야 모델/분석 레이어의 정확성이 의미를 가집니다 — 잘못된 이벤트 입력이 가장 비싼 LLM 호출보다 큰 손해라는 교훈이 여전히 유효합니다.
원문: GeekNews #31433
📰 원본 출처 · https://news.hada.io/topic?id=31433 (#N=31433)
이 글은 GeekNews(긱뉴스)에 게제된 글을 기반으로 작성되었습니다. 원본의 라이선스와 저작권은 원작자에게 있습니다.