DEV Community

Cover image for SKAN postback 디코딩 — conversion value 6bit 설계의 모든 것
HyunSeok Jeong
HyunSeok Jeong

Posted on • Originally published at blog.trysitely.com

SKAN postback 디코딩 — conversion value 6bit 설계의 모든 것

들어가며

SKAdNetwork(SKAN)의 conversion value는 단 6비트, 즉 64개 값이 전부입니다. 이 64개 슬롯에 무엇을 매핑할지가 iOS 광고 측정의 절반을 결정합니다. 잘못 잡으면 며칠~몇 주의 데이터가 의사결정에 쓸모없어지고, 잘 잡으면 IDFA 시절에 가까운 정보 밀도를 얻을 수 있습니다. 이 글은 6비트 인코딩의 표준 패턴과 분기 운영에서 흔히 마주치는 함정을 정리합니다.

SKAdNetwork conversion value 6비트 인코딩 다이어그램
64개 슬롯 안에 마케팅 KPI를 압축하는 작은 게임

왜 6비트인가

애플의 프라이버시 설계

SKAN은 광고 노출과 전환을 OS 레벨에서 매칭하면서, 광고주·네트워크에 노출되는 정보를 의도적으로 제한합니다. 사용자 단위 데이터가 아닌 집계 데이터만 전달하기 위해 conversion value 같은 정보 채널을 좁게 디자인했습니다.

📌 이 글의 전제

iOS 모바일 광고를 운영하고 SKAN postback이라는 단어를 일상에서 본다고 가정합니다(ios-att-skadnetwork-aem 참고). 비트·이진 표현 같은 개념은 한 번 짚으면 따라올 수 있는 수준이면 충분합니다.

64개 값의 산수

6비트는 0~63의 정수만 표현합니다. 이 안에 다음을 모두 담아야 합니다.

  • 핵심 이벤트 발생 여부 (회원가입·튜토리얼·구매)
  • 매출 구간 (0원·1천원·1만원·10만원…)
  • 유저 프로파일 시그널 (첫날 세션 수·지역·디바이스 카테고리)

자유도가 매우 낮으므로 어느 정보를 살리고 어느 정보를 버릴지 명확한 우선순위가 필요합니다.

비트 분배의 표준 패턴

패턴 1 — 매출 풍부 인코딩

매출이 가장 중요한 신호일 때:

비트 할당
6비트 전체 매출 구간 64개

매출을 64구간으로 나누되 비선형 구간(작은 매출에 비트 더 할당)이 효과적입니다.

CV=min(63,log1.2(revenue+1)) \text{CV} = \min(63, \lfloor \log_{1.2}(\text{revenue} + 1) \rfloor)

소액 결제가 많은 게임·콘텐츠 앱에 잘 맞습니다.

패턴 2 — 이벤트 + 매출 분할

핵심 이벤트가 다양한 풀퍼널 앱:

비트 할당
비트 5~3 (3비트, 8값) 이벤트 깊이 (튜토리얼·회원가입·첫 구매·재구매…)
비트 2~0 (3비트, 8값) 매출 구간 8개
ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 26: … = (\text{event_̲depth} \ll 3) \…

이커머스·구독 앱에 흔히 쓰입니다.

패턴 3 — 4 + 2 분할

이벤트가 많은데 매출은 단순한 경우(예: 모든 구매가 비슷한 금액):

비트 할당
비트 5~2 (4비트, 16값) 이벤트 종류 16가지
비트 1~0 (2비트, 4값) 사용자 행동 단계 4개

매출이 거의 일정한 SaaS·구독 앱에 적합합니다.

패턴 선택 룰

비즈니스 추천 패턴
게임 (in-app purchase 다양) 패턴 1 (매출 풍부)
이커머스 (다양한 매출 + 퍼널) 패턴 2 (이벤트+매출)
구독·SaaS (일정 매출) 패턴 3 (이벤트 위주)
콘텐츠 (광고 매출) 패턴 1 변형

CV 매핑 함수 설계

매출 비선형 구간

매출 구간을 등간격으로 나누면 작은 매출이 한 슬롯에 몰립니다. 비선형 구간(log·percentile)이 정보 효율적입니다.

ParseError: KaTeX parse error: Expected 'EOF', got '_' at position 15: \text{revenue_̲bucket} = \text…

7개 percentile 분할로 매출의 분포를 잘 표현합니다. 이 percentile은 회사의 과거 데이터로 fit합니다.

이벤트 우선순위 인코딩

이벤트는 깊이 순서로 인코딩합니다. 예시:

  • 0: 첫 실행
  • 1: 튜토리얼 완료
  • 2: 회원가입
  • 3: 첫 핵심 액션
  • 4: 첫 구매
  • 5: 두 번째 구매
  • 6: 7일내 재구매
  • 7: 30일내 재구매

이렇게 깊이 순서로 매핑하면 한 정수 비교만으로 사용자 깊이를 표현할 수 있습니다.

💡 CV 인코딩의 황금 룰

단조성(monotonicity)을 지킵니다 — 더 가치 있는 사용자는 더 큰 CV 값. 이 규칙이 깨지면 광고 플랫폼의 ML 입찰 모델이 신호를 잘못 해석합니다.

CV 변경의 비용

시계열 단절

CV 인코딩을 바꾸면 그 시점 이전과 이후의 데이터가 직접 비교 불가능해집니다. CV=4의 의미가 7월에는 "튜토리얼 완료", 8월에는 "첫 구매"라면 같은 CV=4도 다른 의미입니다.

변경이 필요한 경우

  • 새로운 핵심 이벤트 추가(이를테면 새 기능 런칭)
  • 매출 분포 큰 변화(가격 정책 변경)
  • 광고 플랫폼의 SKAN 버전 업데이트

변경 시 점검 리스트

  • [ ] 변경 전후 CV 매핑 표를 문서화
  • [ ] BI 리포트의 CV 매핑이 자동으로 변경 시점에 맞게 갈리는지
  • [ ] 변경 직후 1~2주는 측정 데이터를 보수적으로 해석
  • [ ] 광고 플랫폼 캠페인의 ML 학습 안정화 시간(2~4주) 확보

⚠️ CV 변경 빈도

CV 매핑은 분기에 한 번 이하가 안전합니다. 자주 바꾸면 측정 시계열이 끊어지고 ML 캠페인 최적화가 매번 cold start로 돌아갑니다.

SKAN 4.0의 변화

다중 postback과 lock window

SKAN 4.0(iOS 16.1+)에서는 postback이 1개에서 3개로 늘었습니다.

Postback 시간창 용도
1번 0~2일 빠른 신호, 첫 핵심 액션
2번 3~7일 중기 신호, 첫 구매
3번 8~35일 장기 신호, 재구매·LTV

각 postback에 다른 conversion value를 보낼 수 있어 시간 단계별 신호 분리가 가능합니다. 첫 postback은 매출 구간, 두 번째는 retention, 세 번째는 LTV percentile 같은 인코딩 패턴.

Lock window — postback 도착 시간 조절

광고주가 conversion value의 lock 시점을 조절할 수 있습니다. 빨리 lock하면 광고 플랫폼이 빠르게 ML 입찰을 학습하고, 늦게 lock하면 더 정확한 신호를 보냅니다. 트레이드오프 — 분기 단위 캠페인 목표에 맞게 결정.

Coarse-grained Conversion Value

Crowd anonymity threshold

SKAN은 conversion value 신호가 너무 적으면 노이즈를 추가하거나 NULL로 처리합니다. 이 임계값은 일정 캠페인·광고그룹 단위 노출 수에 도달해야 합니다.

작은 캠페인은 fine-grained CV 대신 coarse-grained(low/medium/high 3단계)로 보내야 신호가 도착합니다. 대형 캠페인은 fine-grained 사용 가능.

CV 단위 비교

모드 값 범위 적합
Fine-grained 0~63 큰 캠페인 (월 수만 노출 이상)
Coarse-grained low/medium/high 작은 캠페인, 신규

적응형 인코딩

작은 캠페인은 시작 시 coarse, 일정 규모 도달 후 fine으로 전환할 수 있습니다 — 다만 매핑 변경이라 시계열 단절 비용이 있습니다.

분기 점검 체크리스트

인코딩 정합성

  • [ ] CV 매핑이 비즈니스 KPI와 일치
  • [ ] CV 매핑이 단조 (큰 값 = 더 가치)
  • [ ] CV 매핑 문서가 분석팀·광고팀에 공유됨
  • [ ] 매출 percentile bucket이 최근 데이터로 갱신됨

측정 안정성

  • [ ] CV NULL 비율 측정·alert
  • [ ] postback 도착 지연 모니터링
  • [ ] MMP 보고와 광고 플랫폼 보고의 차이 30% 이내

SKAN 4.0 마이그레이션

  • [ ] 다중 postback 인코딩 디자인 완료
  • [ ] lock window 설정 분기마다 검토
  • [ ] coarse vs fine 모드 결정 캠페인별

💡 실무 운영 룰

CV 인코딩 매핑 표는 마케팅·앱팀 모두가 접근하는 공유 문서로 두는 게 안전합니다. 변경 이력이 남아야 시계열 해석에서 혼란이 줄어듭니다. {/* TODO_HUNY: 우리 회사 SKAN CV 인코딩이 어떤 패턴인지, 마지막 변경이 언제였는지 한 단락 */}

함정 모음

  • 매출만 인코딩 — 퍼널 이벤트 정보 누락
  • 등간격 매출 구간 — 작은 매출이 한 슬롯에 몰림
  • 비단조 매핑 — ML 입찰 모델이 신호 잘못 해석
  • 잦은 변경 — 시계열 단절, ML cold start
  • NULL 무시 — crowd anonymity로 NULL이 늘어났는데 데이터 손실로 안 봄

마치며

SKAN의 6비트 conversion value는 마케터가 iOS 광고 측정에서 직접 통제할 수 있는 거의 유일한 정보 채널입니다. 비즈니스에 맞는 인코딩 패턴 선택, 매출 비선형 구간 설계, 단조성 유지, 변경 빈도 통제 — 이 네 가지 원칙을 분기 운영에 박아두면 iOS 측정의 정보 밀도가 한 단계 올라갑니다.

다음 분기에 한 번만 시도해 볼 만한 것은 SKAN 4.0의 다중 postback을 활용해 단계별 신호를 분리하는 흐름입니다. 첫 postback에 매출, 두 번째에 retention 7일, 세 번째에 LTV 30일을 매핑하면 IDFA 시절보다 시간축 정보가 더 풍부해질 수 있습니다.

{/* TODO_HUNY: 우리 앱이 SKAN 4.0 다중 postback을 활용하고 있는지, 시도해본 결과 한 단락 */}

참고

Top comments (0)