이벤트 배치 처리

SDK가 이벤트를 수집하고 서버로 전송하는 과정입니다.

📊 다이어그램 안내 이 문서의 다이어그램은 Mermaid 형식으로 작성되어 있습니다.

  • GitHub에서 보기: 자동으로 렌더링됩니다.

  • GitBook에서 보기: 아래 코드를 복사하여 Mermaid Live Editor에 붙여넣으면 확인할 수 있습니다.

이벤트 배치 시스템

상세 플로우

1. 이벤트 분류

2. 배치 전송 조건

이벤트는 다음 조건 중 하나라도 만족하면 전송됩니다:

  • 개수: 큐에 10개 이상 쌓임

  • 시간: 마지막 전송 후 30초 경과

  • 수동: flushEvents() 호출

3. 오프라인 처리

최적화 전략

gzip 압축

이벤트 데이터를 gzip으로 압축해서 전송합니다:

  • 압축 전: ~10KB (10개 이벤트)

  • 압축 후: ~2KB (약 80% 감소)

이렇게 하면 전송 효율이 높아집니다.

지수 백오프 (Exponential Backoff)

전송 실패 시 재시도 간격을 점진적으로 늘립니다:

1차 실패 → 1초 후 재시도
2차 실패 → 2초 후 재시도
3차 실패 → 4초 후 재시도
4차 실패 → 8초 후 재시도
...
최대 60초까지

이렇게 하면 서버 부하를 줄입니다.

네트워크 타입 확인

  • Wi-Fi: 큐에 쌓인 모든 이벤트 전송

  • 모바일 데이터: 중요한 이벤트만 전송

코드 예시

일반 이벤트 (배치 전송)

// 이벤트가 큐에 추가되고, 조건 충족 시 자동 전송됨
AdchainSdk.trackEvent("button_click", mapOf("button" to "start"))

즉시 전송

// 이벤트를 바로 전송하고 싶을 때
AdchainSdk.trackEvent("purchase", mapOf("amount" to 9900))
AdchainSdk.flushEvents()  // 큐에 있는 모든 이벤트 즉시 전송

주의사항

  • 너무 자주 flushEvents()를 호출하면 비효율적입니다

  • 오프라인에서는 최대 1000개까지만 저장됩니다 (초과 시 오래된 것부터 삭제)

  • DAU 이벤트는 배치를 거치지 않고 즉시 전송됩니다

Last updated