MOBION · SMART UNIT MANAGEMENT
유닛별 프리퀀시 정책 기획서
타겟팅 단위 프리퀀시(AUID 기준)를 타겟팅 유닛(지면등급×시간등급)에 차등 배분하고, 서빙 시 적용하는 방식을 정의한다.
| 버전 | 일자 | 변경 내용 |
|---|---|---|
| v0.1 | 2026-07-24 | 최초 작성 — 배경/목적, 기존 vs 신규 방식, 타겟팅별 프리퀀시 기본값, 84개 유닛 랭크·차등 배분 원칙, 서빙 처리 로직 초안 |
모비온 3.1에서는 프리퀀시(유저별 일 노출 상한)가 타겟팅 단위로만 존재하며, 광고 보고서 > 중복클릭 보고서 > 타겟팅별 중복클릭 현황 화면에서 확인 및 설정할 수 있다. 모비온 4.0에는 해당 설정 기능이 제공되지 않는다.
스마트 유닛 관리에서는 유닛을 타겟팅 × 시간등급 × 지면등급 조합으로 세분화하여 운영한다. 타겟팅은 사전에 고정되는 값이 아니라 노출 요청 시 유저에게 묻은 쿠키(세그먼트 정보)에 따라 결정되며, 하나의 타겟팅에 대해서는 지면등급 12단계 × 시간등급 7단계, 즉 84개 유닛으로 구성된다. 이하 본 문서에서는 이 84개 유닛을 타겟팅 유닛이라 한다.
아래는 모비온 3.1 타겟팅별 중복클릭(프리퀀시) 기본값이며, 타겟팅 유닛 차등 배분의 기준(총량)이 되는 값이다. 약어는 매칭 로직 상 사용되는 코드다.
| 순위 | 타겟팅 | 약어 | 프리퀀시 |
|---|---|---|---|
| 1 | 투데이카트 | TC | 15 |
| 2 | 위클리카트 | WC | 30 |
| 3 | 라스트클릭 | LC | 10 |
| 4 | 위클리가망고객 | PU | 20 |
| 5 | 투데이보완재 | TP | 30 |
| 6 | 헤비리인게이지먼트 | HE | 10 |
| 7 | 위클리보완재 | WP | 50 |
| 8 | 먼슬리보완재 | SP | 50 |
| 9 | 원타임리턴 | HR | 3 |
| 10 | 먼슬리카트 | MC | 150 |
| 11 | 하프보완재 | HP | 30 |
| 12 | 커스텀하이 | CH | 5 |
| 13 | 카트 | CW | 9,999 |
| 14 | 원타임본상품 | HV | 4 |
| 15 | 온사이트서치 | OS | 미정 |
| 16 | 휴면유저 | RU | 30 |
| 17 | 투데이리턴 | TR | 5 |
| 18 | 투데이본상품 | TV | 10 |
| 19 | 먼슬리가망고객 | MU | 20 |
| 순위 | 타겟팅 | 약어 | 프리퀀시 |
|---|---|---|---|
| 20 | 위클리본상품 | WV | 20 |
| 21 | 위클리리턴 | WR | 30 |
| 22 | 관심상품 | RC | 40 |
| 23 | 헤비유저 | HU | 20 |
| 24 | 먼슬리본상품 | MV | 100 |
| 25 | 본상품 | SR | 200 |
| 26 | 먼슬리리턴 | FR | 30 |
| 27 | 리턴 | RM | 9,999 |
| 28 | 리인게이지먼트미사용 | RE | 20 |
| 29 | 커스텀리타겟팅 | CR | 30 |
| 30 | 검색어 | KL | 40 |
| 31 | 헤비성향 | HM | 50 |
| 32 | 가망고객 | BP | 20 |
| 33 | 유저유사도 | US | 미정 |
| 34 | 성향 | UM | 999 |
| 35 | 카테고리 | CM | 무제한 |
| 36 | 오디언스 | AU | 무제한 |
| 37 | 베이스광고 | AD | 무제한 |
※ 온사이트서치(OS)·유저유사도(US)는 CPC 자동화 타겟팅 목록에는 있으나 기존 3.1 프리퀀시 기본값 목록에는 없어 값을 "미정"으로 표시했습니다.
프리퀀시는 유닛을 "선택"하는 로직이 아니라, 이미 확정된 유닛에 대해 노출 가능 여부만 판단하는 게이트(Gate)로 동작한다.
6장 서빙 처리 로직을 다이어그램으로 표현한 것이다. 요청 처리에서 타겟팅 / 지면등급 / 시간등급에 해당하는 유닛이 결정되며, 프리퀀시는 그 결과로 확정된 유닛에 대한 게이트로만 동작한다.
근거 코드: mobon-platform 저장소 (매체플랫폼-RTB) — com.mobon.utils.ImpressionLimitTracker / com.adgather.user.inclinations.cookieval.freq.ctr.*
| 구분 | 상세 | 코드명 | 체크 범위 | 한도 저장소 | 한도값은 누가 정하나 | 실행 시점 | 초과 시 동작 | 비고 |
|---|---|---|---|---|---|---|---|---|
| 프리퀀시① | 광고주 단위 노출한도 | ImpressionLimitTracker .isExhausted() / .consume() |
광고주 전체 (분단위) | Ehcache(조회, 서버 로컬) + Redis(차감, 공유) |
배치가 최근 7일 평균 노출수 기반 자동 계산 (ImpressionLimitBatch) | selAdinfo 필터체인의 가장 첫 줄 | 해당 광고주 전체 후보를 즉시 탈락(return null) | 유저 쿠키가 아닌 서버(Redis) 기준 — 유저와 무관하게 광고주 전체에 걸리는 "상위 셔터". 리워드 지면에만 적용, 한도는 통계로 매일 자동 재계산 |
| 프리퀀시②-1 | 캠페인(사이트코드)별 클릭 한도 | FreqSiteCodeClickCtr .isOver() |
캠페인 단위 | 유저 쿠키 | 프로퍼티(고정값) | selAdinfo 통과 후, 바깥 루프 1번째 | 이 후보만 탈락(continue), 다음 후보로 | 같은 유저가 같은 캠페인을 이미 여러 번 클릭했는지만 봄. 다른 캠페인(같은 광고주라도)엔 영향 없음, 범위가 가장 좁음 |
| 프리퀀시②-2 | 광고주 클릭 한도 | FreqAdverClickCtr .isOver() |
광고주 단위 (클릭) | 유저 쿠키 | 프로퍼티(고정값) | 바깥 루프 2번째 | 이 후보만 탈락(continue) | 같은 광고주의 여러 캠페인을 합산해서 클릭 수를 셈. ②-1보다 범위가 넓음(캠페인 → 광고주) |
| 프리퀀시②-3 | 광고주 노출 한도 | FreqAdverViewCtr .isOver() / .count() |
광고주 단위 (노출) | 유저 쿠키 | 프로퍼티(고정값) | 바깥 루프 3번째 | 이 후보만 탈락(continue) | ②-2와 대상 범위(광고주)는 같지만 클릭이 아니라 노출 횟수를 셈. 클릭 안 해도 자꾸 보이기만 해도 걸릴 수 있음 |
| 프리퀀시②-4 | 타겟팅 구분별 노출한도 | FreqDefaultCtr.count() (= FreqShopsCtr.count() 류) |
타겟팅 구분 단위 (AD/TC/UM 등) | 유저 쿠키 | 프로퍼티 (TC_FREQUENCY, WC_FREQUENCY 등 구분별 개별 설정, 기본 15~150) | 바깥 루프 4번째 (가장 나중) | 종료태그 처리 + 쿠키 삭제, 이후 그 타겟팅 재노출 안됨 | 범위가 가장 넓음(광고주 무관, 타겟팅 종류 자체). ②-1~3을 다 통과한 후보만 여기까지 옴, 유일하게 "초과 시 쿠키 삭제"까지 하는 항목 |
1. 저장소가 다르다 — Redis+로컬캐시 vs 쿠키
| 프리퀀시① | 프리퀀시②(1~4 전체) | |
|---|---|---|
| 저장 위치 | 서버 측 (Redis + Ehcache) | 유저 브라우저 쿠키 |
| 유저가 쿠키를 지우면? | 영향 없음 (서버가 카운트를 들고 있음) | 카운트가 리셋됨 |
| 여러 서버 인스턴스 간 공유 | Redis로 공유됨 (조회는 로컬이라 약간의 오차 허용) | 공유 개념 없음 (유저별 쿠키라 애초에 유저 단위) |
2. 한도값을 누가 정하냐가 다르다 — 배치 계산 vs 고정 프로퍼티
| 프리퀀시① | 프리퀀시②-4 (타겟팅 구분별) | |
|---|---|---|
| 한도 산정 방식 | 배치가 최근 7일 평균 노출수 + 수동설정값을 조합해 자동 계산 (ImpressionLimitResolver.resolveCap) | 운영자가 프로퍼티에 직접 값 입력 (TC_FREQUENCY=15, WC_FREQUENCY=50 등) |
| 변경 방법 | 배치가 매번 재계산 (통계 기반, 동적) | 프로퍼티 값을 직접 수정해야 변경됨 (정적) |
3. 체크 시점이 정반대다 — 맨 먼저 vs 맨 나중