{
  "id": "7064d292-7849-400e-8b4b-11024fd34ee3",
  "slug": "ref/khub/dmp-runcomm-dmp-잠재고객수-api-bq-큐브-추가-적재-devlog",
  "doc_type": "ref",
  "title": "📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog",
  "title_en": null,
  "one_liner": "# 📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog > 최종 업데이트: 2026-02-23 KST > 관련 채팅: 현재 세션 --- ## 배경 런컴 실시간 타겟팅 기획서 v1.3의 세그먼트 항목을 우리 API로 서비스하기 위해, BQ 원본(tb_tam_f1)에",
  "summary_bullets": [],
  "body_md": "# 📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog\n\n> 최종 업데이트: 2026-02-23 KST\n> 관련 채팅: 현재 세션\n\n---\n\n## 배경\n\n런컴 실시간 타겟팅 기획서 v1.3의 세그먼트 항목을 우리 API로 서비스하기 위해, BQ 원본(tb_tam_f1)에서 미보유 차원을 큐브 집계하여 Supabase에 적재.\n\n**구조**: 런컴 애드서버 → 우리 API(Edge Function) → Supabase DB (우리가 API 제공자)\n\n## 수행 내용\n\n### BQ 큐브 5개 집계 + Supabase 적재 완료\n\n| # | 큐브 | BQ 테이블 | Supabase 테이블 | 행 수 | 커버 항목 |\n|---|------|----------|----------------|------:|----------|\n| 1 | 지역 상세 | cube_region_detail | de_dmp_cube_region_detail | 336,843 | 시군구, 읍면동 |\n| 2 | 디바이스 | cube_device | de_dmp_cube_device | 396 | 통신사, 모바일브랜드 |\n| 3 | 카드 업종 | cube_card_category | de_dmp_cube_card_category | 27,346 | 카드 승인 업종 (KB전용) |\n| 4 | 금액 구간 | cube_amount_bucket | de_dmp_cube_amount_bucket | 13,561 | 승인 금액 구간 |\n| 5 | 교통 | cube_transit | de_dmp_cube_transit | 24,773 | 지하철역, 승하차 (버스 제외) |\n\n### FDW Foreign Table 추가 (5개)\n\n```\nbigquery.cube_region_detail\nbigquery.cube_device\nbigquery.cube_card_category\nbigquery.cube_amount_bucket\nbigquery.cube_transit\n```\n\n### 주요 발견사항\n\n- **통신사 코드**: T=SKT, K=KT, U=LGU+, Z=기타(208만으로 최대)\n- **모바일 브랜드**: SAMSUNG=84만, Apple=66만, 미지정=171만\n- **업종 매핑율**: partner_cd → category_code JOIN 84% 매칭 (16% 미매칭 → 보강 필요)\n- **교통 큐브**: BUS 64만행(97%) vs 지하철 2.5만행(3%) → 지하철만 적재 (기획서에서 버스 '보류')\n- **지역 상세**: 서울 25구 386동, 경기 42시군구 622읍면동 확보\n- **금액 분포**: 1만 미만이 33.3억건 (교통 소액 포함), 전형적 롱테일\n\n### BQ 비용\n\n큐브 5개 집계 실행: 추정 ~$3~4\n\n## 기획서 커버리지 최종\n\n```\n기획서 '가능' 항목 15개 중 13개 커버 (87%)\n보류 2개: 모바일 브랜드(기획서도 보류), 승인 횟수(기획서도 보류)\n```\n\n## 산출물\n\n- 구현방안 문서: dmp_segment_api_plan_v2.md\n- BQ 큐브 SQL 5개 (문서 §4에 포함)\n- Supabase 테이블 5개 + FDW 5개\n\n## 다음 작업: Phase 2 — API 구현\n\n아래 순서로 진행 예정:\n\n1. seg 키 매핑 테이블 생성 (de_dmp_segment_mapping)\n2. RPC 함수 구현 (get_segment_preview — 다차원 필터 + 교차 추정)\n3. 값 변환 헬퍼 함수 (연령/요일/지역 매핑)\n4. Edge Function 배포 (segment-preview — form-urlencoded 파싱)\n5. 런컴 연동 테스트\n\n### 의사결정 필요 (찰스 확인)\n\n1. seg 키 스프레드시트 접근 권한 (런컴에 요청)\n2. 런컴 → 우리 API 인증 방식 (API Key? IP 제한?)\n3. 응답 시간 요구사항 (실시간 타겟팅이면 <1초 필요)\n",
  "related_slugs": [],
  "faq": [],
  "jsonld": null,
  "keywords": [],
  "source_id": "a10ef0c4-10e4-4b4f-addb-b339a1de28f2",
  "video_url": null,
  "duration_sec": null,
  "thumbnail_url": null,
  "image_url": null,
  "caption": null,
  "solution_slug": null,
  "captured_at": null,
  "width": null,
  "height": null,
  "created_at": "2026-08-24T11:53:44.908861+00:00",
  "updated_at": "2026-08-24T11:53:44.908861+00:00",
  "visibility": "public",
  "source_stage": "1",
  "anonymized": true,
  "source_key": "legacy-khub",
  "origin": "ingest",
  "locked": false,
  "locked_by": null,
  "locked_at": null,
  "gate_state": {
    "g1": {
      "hits": [],
      "pass": true
    },
    "g2": {
      "pass": true,
      "total": 62,
      "issues": [
        "핵심 요약 불릿이 3개 미만입니다",
        "Q&A 쌍이 3개 미만입니다"
      ],
      "applies": true
    },
    "g3": {
      "pass": true,
      "required": false
    },
    "stage": "1",
    "decided_at": "2026-08-24T11:53:44.334Z"
  },
  "raw_id": "1d8ba580-c371-4a2c-a36a-8d4d6db3a12e",
  "search_text": "📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog  # 📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog > 최종 업데이트: 2026-02-23 KST > 관련 채팅: 현재 세션 --- ## 배경 런컴 실시간 타겟팅 기획서 v1.3의 세그먼트 항목을 우리 API로 서비스하기 위해, BQ 원본(tb_tam_f1)에  # 📋 DMP 잠재고객수 API — BQ 큐브 추가 적재 DevLog\n\n> 최종 업데이트: 2026-02-23 KST\n> 관련 채팅: 현재 세션\n\n---\n\n## 배경\n\n런컴 실시간 타겟팅 기획서 v1.3의 세그먼트 항목을 우리 API로 서비스하기 위해, BQ 원본(tb_tam_f1)에서 미보유 차원을 큐브 집계하여 Supabase에 적재.\n\n**구조**: 런컴 애드서버 → 우리 API(Edge Function) → Supabase DB (우리가 API 제공자)\n\n## 수행 내용\n\n### BQ 큐브 5개 집계 + Supabase 적재 완료\n\n| # | 큐브 | BQ 테이블 | Supabase 테이블 | 행 수 | 커버 항목 |\n|---|------|----------|----------------|------:|----------|\n| 1 | 지역 상세 | cube_region_detail | de_dmp_cube_region_detail | 336,843 | 시군구, 읍면동 |\n| 2 | 디바이스 | cube_device | de_dmp_cube_device | 396 | 통신사, 모바일브랜드 |\n| 3 | 카드 업종 | cube_card_category | de_dmp_cube_card_category | 27,346 | 카드 승인 업종 (KB전용) |\n| 4 | 금액 구간 | cube_amount_bucket | de_dmp_cube_amount_bucket | 13,561 | 승인 금액 구간 |\n| 5 | 교통 | cube_transit | de_dmp_cube_transit | 24,773 | 지하철역, 승하차 (버스 제외) |\n\n### FDW Foreign Table 추가 (5개)\n\n```\nbigquery.cube_region_detail\nbigquery.cube_device\nbigquery.cube_card_category\nbigquery.cube_amount_bucket\nbigquery.cube_transit\n```\n\n### 주요 발견사항\n\n- **통신사 코드**: T=SKT, K=KT, U=LGU+, Z=기타(208만으로 최대)\n- **모바일 브랜드**: SAMSUNG=84만, Apple=66만, 미지정=171만\n- **업종 매핑율**: partner_cd → category_code JOIN 84% 매칭 (16% 미매칭 → 보강 필요)\n- **교통 큐브**: BUS 64만행(97%) vs 지하철 2.5만행(3%) → 지하철만 적재 (기획서에서 버스 '보류')\n- **지역 상세**: 서울 25구 386동, 경기 42시군구 622읍면동 확보\n- **금액 분포**: 1만 미만이 33.3억건 (교통 소액 포함), 전형적 롱테일\n\n### BQ 비용\n\n큐브 5개 집계 실행: 추정 ~$3~4\n\n## 기획서 커버리지 최종\n\n```\n기획서 '가능' 항목 15개 중 13개 커버 (87%)\n보류 2개: 모바일 브랜드(기획서도 보류), 승인 횟수(기획서도 보류)\n```\n\n## 산출물\n\n- 구현방안 문서: dmp_segment_api_plan_v2.md\n- BQ 큐브 SQL 5개 (문서 §4에 포함)\n- Supabase 테이블 5개 + FDW 5개\n\n## 다음 작업: Phase 2 — API 구현\n\n아래 순서로 진행 예정:\n\n1. seg 키 매핑 테이블 생성 (de_dmp_segment_mapping)\n2. RPC 함수 구현 (get_segment_preview — 다차원 필터 + 교차 추정)\n3. 값 변환 헬퍼 함수 (연령/요일/지역 매핑)\n4. Edge Function 배포 (segment-preview — form-urlencoded 파싱)\n5. 런컴 연동 테스트\n\n### 의사결정 필요 (찰스 확인)\n\n1. seg 키 스프레드시트 접근 권한 (런컴에 요청)\n2. 런컴 → 우리 API 인증 방식 (API Key? IP 제한?)\n3. 응답 시간 요구사항 (실시간 타겟팅이면 <1초 필요)\n",
  "embedding": null,
  "embedded_at": null,
  "embedding_hash": null,
  "backlinks": [],
  "html_url": "https://bizspring.ai/kb/ref/khub/dmp-runcomm-dmp-잠재고객수-api-bq-큐브-추가-적재-devlog",
  "markdown_url": "https://bizspring.ai/kb/ref/khub/dmp-runcomm-dmp-잠재고객수-api-bq-큐브-추가-적재-devlog.md"
}