부터 광고비를 받고 광고를 받아온다. => 매출 발생(실제로는 매출 가능성 발생) - 받아온 광고들을 제휴 매체사 모바일앱을 통해 내보낸다. => 실제 매출 발생 - 이때 매체사들에게 소정의 수수료를 지급한다. => 정산금액 발생(버즈빌 입장에서는 비용) “매체사의 광고 지면에서 발생한 광고 수익을 매체사와 나누어 가져야하는데(RS: Revenue Share), 이때 매체사에게 지급해야할 금액(Payout)을 계산하는 것을 정산이라 한다"
만들어질까? - 광고의 종류가 다양하다. - by Revenue Type cpc, cpm, cpi, cpe, cpa, cpl, cps, cpy, cpq, cpinsta, cpk, cpyoutube, cpylike - by Lineitem Type direct, adnetwork_sdk, adnetwork_rtb, adnetwork_list - by Owner Buzzvil, Publihser, External - 광고가 나가는 매체사 앱과 광고의 지면도 다양하다. - 허니스크린, 신한페이판, 리브메이트, 티멤버쉽, 짤, 아만다 등등.. “광고 타입 별로 정산 하기위해 집계되어야 하는 지면별 수익/비용 데이터(Unit Finance)가 있다.” - 매체사 마다 정산 방식 계약사항이 다르다. - 광고의 종류 마다 수익에 대한 공유 비율이 다르다 - 광고에서 발생한 유저 포인트 적립 금액에 대한 처리도 다 다르다. - 등등.. “각 매체사별로 정산에 필요한 정산식(Payout Strategy)이 있다.”
어디서 만들어지는가? - Billingsvc Billingsvc 역할 광고지면에서 발생한 광고 수익 / 비용 집계 데이터를 정산식에 대입하여 최종 정산 금액을 계산하는 것 용어 정리 광고지면 : Unit 광고수익 : Revenue 광고비용 : Cost 지면별 광고 수익/비용 : UnitFinance 정산식 : Payout Strategy 최종 정산 금액 : Payout
Billingsvc data_at : 집계 기준 시각(월 단위) unit_id prefix revenue : 매출 cost : 비용(포인트) midfix display : 노출형 광고 데이터 집계 action : 액션형 광고 데이터 집계 adn_static : and static 광고 데이터 집계 adn_dynamic : adn dyn 광고 데이터 집계 imp : imp 형 포인트 타입의 코스트 데이터 집계 postfix direct : 버즈빌 직영업 광고 owner : 매체사 직영업 광고 external : 버즈빌 도 매체사 직영업 광고도 아닌 외부 광고 e.g. revenue_display_direct : 이번달에 특정 유닛에 송출된 display 형 버즈빌 직영업 광고에 대한 매출 집계 revenue_action_owner : 이번달에 특정 유닛에 송출된 action 형 매체사 직영업 광고에 대한 매출 집계 cost_action_exteranl : 이번달에 특정 유닛에 송출된 action 형 외부 광고에 대한 비용 집계 (포인트 집계) Unit Finance : 유닛에서 발생한 revenue / cost 집계 데이터
Billingsvc unit_id : 이 계약이 적용되는 unit id start_date : 이 계약이 적용되는 시작 시각 end_date : 이 계약이 적용되는 종료 시각 contract_id : 이 계약에서 사용되는 rs(revenue share) 정보 buzzvil_payout_strategy : 이 계약에서 사용되는 buzzvil payout 정산식 owner_payout_strategy : 이 계약에서 사용되는 owner payout 정산식 currency : 이 계약에서 사용되는 통화 단위 point_rate : 이 계약에서 사용되는 포인트 단위 timezone : 이 계약이 적용되는 유닛의 타임존 exchange_rate : 이 계약에 적용되는 환율 (원/달러) finalized : 이 계약이 정산이 완료되었는지 여부 (finalize 되면 payout 데이터를 수정할 수 없다.) Unit Contract : 특정 기간(보통 월 단위) 동안 특정 유닛에 적용될 정산 계약
: 집계 시각(시간단위) unit_id : 데이터가 발생한 unit lineitem_id : 데이터가 발생한 lineitem revenue_type : lineitem 의 revenue type (cpa, cpinsta, cpk, cpi, cpy, cpc, cpm …) lineitem_type : lineitem type (A: Direct, E/R/S: ADN) unit_orgnization_id : unit 소유 매체사 lineitem_organization_id : 광고 소유 매체사 unit_sales : 각 데이터의 revenue 집계 action_reward : 각 데이터의 action 형 reward 집계 정산 입장에서 Unit Creative는 시간별/유닛별/라인아이템별로 발생한 revenue 와 action 형 cost의 집계 데이터
: 집계 시각(시간단위) unit_id : 데이터가 발생한 unit unit_orgnization_id : unit 소유 매체사 campaign_organization_id : 캠페인 소유 매체사 point_type : point type (imp, base, wel, bch, ref) reward : 각 데이터의 reward 집계 정산 입장에서 Unit Point는 시간별/유닛별로 발생한 reward(imp, base, wel, bch, ref) 집계 데이터 이다.
- Statssvc generate_unit_finance: unit_creative unit_point unit_ad_reward unit_event_reward adnetwork_report 다섯가지 집계 테이블을 적절한 쿼리로 Union 하여 하나의 UnitFinance 다시 집계를 해준다. https://github.com/Buzzvil/statssvc/b lob/c8dec424f791d79395af5b1c5ffb 227875fb1e5f/src/stats/adapters/rep os/job.py#L404
data_at : 집계 기준 시각(월 단위) unit_id revenue : 매출 cost : 비용(포인트) display : 노출형 광고 데이터 집계 action : 액션형 광고 데이터 집계 adn_static : and static 광고 데이터 집계 adn_dynamic : adn dyn 광고 데이터 집계 imp : imp 형 포인트 타입의 코스트 데이터 집계 direct : 버즈빌 직영업 광고 owner : 매체사 직영업 광고 external : 버즈빌 도 매체사 직영업 광고도 아닌 외부 광고 e.g. revenue_display_direct : 이번달에 특정 유닛에 송출된 display 형 버즈빌 직영업 광고에 대한 매출 집계 revenue_action_owner : 이번달에 특정 유닛에 송출된 action 형 매체사 직영업 광고에 대한 매출 집계 cost_action_exteranl : 이번달에 특정 유닛에 송출된 action 형 외부 광고에 대한 비용 집계 (포인트 집계) Unit Finance : 유닛에서 발생한 revenue / cost 집계 데이터
경험할 수 있는 것들 Operations - Kubernetes - Docker Language - Python - Go Database - MySQL - AWS Redshift - AWS Athena - AWS DynamoDB Message Queue - Redis Data Pipeline tools - Airflow - Jenkins ETC - Protocol Buffer - gRPC - Vue.js(frontend) 대용량 데이터 배치 처리 기술 경험 2022년 1월 현재 unit creative 기준 - 총 record 수 : 약 8억건 - 배처 처리 량(1회) : 5만 ~ 10만 건