{
  "id": "f7f8d61c-be73-48aa-b758-609ff9db8a69",
  "slug": "ref/khub/data-eng-arch-gp-mysql-gp-prod-계정-권한-연동-체계-레퍼런스",
  "doc_type": "ref",
  "title": "[ARCH] GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스",
  "title_en": null,
  "one_liner": "# 📊 GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스 > v1.0 | 2026-03-29 | DB 실측 기반 | project_code: DATA_ENG > 접근: n8n-bizspring webhook `gp-mysql-temp3` (WF: FICNrkmVL8NKgu",
  "summary_bullets": [],
  "body_md": "# 📊 GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스\n\n> v1.0 | 2026-03-29 | DB 실측 기반 | project_code: DATA_ENG\n> 접근: n8n-bizspring webhook `gp-mysql-temp3` (WF: FICNrkmVL8NKguT3)\n> 관련: GP MySQL 데이터 구조 `432148ba`, GP MySQL 접근 가이드 `344622a1`\n\n---\n\n## 1. gp_prod 전체 도메인 분류 (183 objects = 174T + 9V)\n\n| # | 도메인 | 접두사 | 테이블 수 | 총 행 수 | 핵심 엔터티 |\n|---|--------|--------|----------|---------|------------|\n| 1 | 계정/인증 | tb_admin, tb_role, tb_privilege, tb_team | 13T | ~1.7K | admin 201명, role 8, privilege 108 |\n| 2 | 대행사/광고주 | tb_agency, tb_client, tb_account | 33T | ~1.4M | agency 130, client 265, account 1,265 |\n| 3 | 매체/API 연동 | tb_media, tb_media_api, tb_media_license | 6T | ~1.5K | media 359, license 387 |\n| 4 | 마케팅 자동화(MA) | tb_ma_* | 22T | ~2.6M | campaign 56, target 2.6M, segment 117 |\n| 5 | 리포팅/엑셀 | tb_report_*, tb_excel_* | 13T | ~362K | report_job 347K |\n| 6 | 세그먼트/오디언스 | tb_segment_*, tb_audience_*, tb_aggregation_* | 11T | ~30K | segment_work 12K |\n| 7 | 추천/ML/AI | tb_recomm_*, tb_ml_*, tb_ai_* | 16T | ~49K | recomm_user_base 46K |\n| 8 | 모니터링/센티넬 | tb_monitoring_*, tb_sentinel_* | 12T | ~4.3K | sentinel_rule 3.4K |\n| 9 | 트래킹/UTM | tb_tracker_*, tb_mplanit_* | 9T | ~16.7K | tracker_upload 11K |\n| 10 | 코드/시스템 | tb_code*, tb_product, tb_app, tb_orders 등 | 20T+9V | ~1.3K | code 89그룹, code_dtl 782 |\n\n---\n\n## 2. 계정 체계 ER 다이어그램\n\n```\ntb_role (8개 역할)\n  ├── super(1) / admin(2) / feign(3)         ← 시스템 역할\n  ├── manager(11) / editor(12) / viewer(13)  ← 대행사 역할\n  └── client_editor(22) / client_viewer(23)  ← 광고주 역할\n       │\n       ↓ tb_role_privilege (540건 = role×privilege 매핑)\ntb_privilege (108개 기능 권한)\n\ntb_agency (130건, agency_tp: 마스터/대행사/대리대행사/광고주)\n  │ seq(PK), agency_nm, agency_tp, agency_option(JSON), act_st\n  │\n  ├── tb_agency_app (596건 = 앱 연동)\n  │\n  ├── → tb_admin (201건, agency_seq FK)\n  │     │ seq(PK), admin_id, admin_pw, admin_nm, admin_option(JSON)\n  │     │ act_st, agency_seq(FK), email_verified\n  │     │ 상태: 사용중 194, 사용불가_D 10, 사용종료 7\n  │     │\n  │     ├── tb_admin_role (226건 = admin↔role N:M 매핑)\n  │     │     admin_seq(FK) → role_seq(FK)\n  │     │\n  │     └── tb_admin_app (0건 = admin별 앱 권한, 미사용)\n  │\n  ├── → tb_team (agency_seq FK, parent_seq 계층)\n  │     │ seq(PK), team_nm, team_level, parent_seq(자기참조)\n  │     │\n  │     ├── tb_team_admin (219건 = team↔admin 매핑)\n  │     └── tb_team_client (248건 = team↔client 매핑)\n  │\n  └── → tb_client (265건, agency_seq FK)\n        │ seq(PK), client_nm, client_option(JSON ★핵심), act_st\n        │\n        └── → tb_account (1,265건)\n              │ agency_seq, account_no, media_tp, account_nm\n              │ account_option(JSON), license_seq(FK)\n              │\n              └── tb_media_license (387건)\n                    │ seq(PK), license_nm, media_tp, agency_seq\n                    │ admin_seq, api_seq, license_option(JSON)\n                    │\n                    └── tb_media_api (매체별 API 토큰)\n                          seq(PK), api_nm, media_tp, token, api_option(JSON)\n```\n\n---\n\n## 3. 역할(RBAC) 체계 상세\n\n### tb_role (8건)\n\n| seq | role_nm | 유형 | 설명 |\n|-----|---------|------|------|\n| 1 | super | 시스템 | 최고 관리자 |\n| 2 | admin | 시스템 | 일반 관리자 |\n| 3 | feign | 시스템 | 서비스 간 통신 (MSA Feign Client) |\n| 11 | manager | 대행사 | 대행사 매니저 |\n| 12 | editor | 대행사 | 대행사 편집자 |\n| 13 | viewer | 대행사 | 대행사 뷰어 |\n| 22 | client_editor | 광고주 | 광고주 편집자 |\n| 23 | client_viewer | 광고주 | 광고주 뷰어 |\n\n### tb_privilege (108건)\n- role_privilege (540건) = 8 role × 평균 67.5 privilege\n- 기능 단위 권한 매핑 (메뉴/API 엔드포인트별)\n\n---\n\n## 4. 대행사 유형 코드 (tb_code cd_no=101)\n\n| 코드 | 이름 | 설명 |\n|------|------|------|\n| 101001 | 마스터 | 비즈스프링 본사 |\n| 101002 | 대리 대행사 | 하위 대행사 |\n| 101003 | 광고주 | 직접 광고주 |\n| 101011 | 대행사 | 일반 대행사 |\n\n---\n\n## 5. 상태 코드 (tb_code cd_no=201 ACTIVE_ST)\n\n| 코드 | 이름 | alias | tb_admin 분포 |\n|------|------|-------|-------------|\n| 201001 | 사용중 | ACTIVE_ST_Y | 194명 |\n| 201002 | 사용중지 | ACTIVE_ST_N | 0 |\n| 201003 | 사용종료 | ACTIVE_ST_F | 7명 |\n| 201004 | 사용대기 | ACTIVE_ST_W | 0 |\n| 201005 | 사용불가 | ACTIVE_ST_X | 0 |\n| 201006 | 사용불가 | ACTIVE_ST_D | 10명 |\n\n---\n\n## 6. 매체 코드 (tb_code cd_no=111, 41개)\n\n### 주요 광고 매체 (API 수집 대상)\n네이버(001), 카카오(002), 구글(003), 페이스북(004), 인스타그램(005), 카카오모먼트(006), 틱톡(008), GFA(009/015), 모비온(011), 타겟팅게이츠(012), 데이블(013), ADN(014), 쿠팡(016), 당근(017)\n\n### 내부/연동 매체\n로거(111), 비즈메일러(112), 부스트(113), 에어브릿지(114), 파이어베이스(131), 구글애즈(132), 구글드라이브(133), 카카오브랜드검색(134), 카카오친구톡(135), 크리테오(136), RTB하우스(137)\n\n### 커머스 매체\n11번가(141/142), 다나와(143), 이베이(144), 인터파크(145), 롯데온(146), 티몬(147), 위메프(148), 엠플랜잇(149)\n\n### 기타\n메일침프(121), 아이메일러(122), 아이하트(123), FTP(124), API GFA(009), 템플릿(901)\n\n---\n\n## 7. 코드 체계 전체 (tb_code 89그룹)\n\n### 엔터티 유형 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 101 | AGENCY_TP | 대행사 종류 (4) |\n| 103 | PRODUCT_TP | 상품 종류: 무료체험/베이식/스탠다드 |\n| 111 | MEDIA_TP | 매체 종류 (41) |\n| 112 | CHANNEL_TP | 채널 종류 |\n| 113 | TEMPLATE_TP | 템플릿 종류 |\n| 114 | SEGMENT_TP | 세그먼트 종류 |\n| 115 | AUDIENCE_TP | 오디언스 종류 |\n\n### 작업/프로세스 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 121 | JOB_TP | 작업 종류 |\n| 122 | AGG_TP | 정제 종류 |\n| 123 | RUN_TP | 실행 종류 |\n| 124 | EXPORT_TP | 추출 종류 |\n| 125 | RESULT_TP | 결과 종류 |\n\n### 상태 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 201 | ACTIVE_ST | 사용 상태 (6) |\n| 202 | JOB_ST | 작업 상태 |\n| 231~240 | 각종 상태 | 공지/알람/QA/주문/지원/세금계산서/이메일인증/프로젝트/프로세스/MA캠페인 |\n\n### MA(마케팅 자동화) 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 137 | MA_SEND_TP | MA 발송 방식 |\n| 138 | MA_SCHEDULE_TP | MA 예약 주기 |\n| 139 | MA_SEND_ST | MA 발송 상태 |\n\n### 리포트 필드 코드 (매체별)\nN01~N12 (네이버), K01~K05 (카카오), G01~G02 (구글), F01~F04 (페이스북), M01~M04 (카카오모먼트), S11~S15 (기타 매체)\n\n### 대량 처리/엑셀 코드\n501~505 (광고 대량처리), 601~606 (엑셀), 511 (키워드 유틸리티), 801 (신문사)\n\n---\n\n## 8. 외부 서비스 연동 체인\n\n```\ntb_media_api (매체별 API 인증)\n  │ api_nm, media_tp, token(512), api_option(JSON)\n  │\n  ↓ tb_media_license (라이선스 = API + 매체 + 대행사 연결)\n  │ license_nm, media_tp, api_seq(FK), agency_seq(FK), admin_seq(FK)\n  │ license_option(JSON)\n  │\n  ↓ tb_account (광고 계정 = 라이선스 하위)\n  │ account_no(bigint), media_tp, license_seq(FK), agency_seq(FK)\n  │\n  ↓ client_option.media[] (클라이언트별 매체 계정 매핑)\n    JSON 배열로 media_tp + account_no 조합\n```\n\n연동 흐름: 매체 API 등록(api) → 라이선스 생성(license) → 계정 연결(account) → 클라이언트 할당(client_option.media[])\n\n---\n\n## 9. GP MySQL ↔ Supabase 연동 설계 방향\n\n### 원칙: GP MySQL = SOT(Single Source of Truth)\n\n```\nGP MySQL (기존 운영)                    Supabase (어드민 UI)\n────────────────────                    ──────────────────────\ntb_agency (130)        ──sync──→       de_admin_agencies\ntb_admin (201)         ──sync──→       de_admin_users\ntb_client (265)        ──sync──→       de_admin_clients (기존)\ntb_account (1,265)     ──sync──→       de_admin_accounts\ntb_role + privilege    ──sync──→       Supabase RLS policies\ntb_media + license     ──read──→       n8n relay (읽기 전용)\ntb_code + code_dtl     ──cache──→      de_admin_codes (코드 캐시)\n```\n\n### 동기화 방식 (향후 구현)\n- **일일 배치**: n8n Cron → GP MySQL SELECT → Supabase UPSERT\n- **이벤트 기반**: GP에서 변경 시 → Kafka → n8n webhook → Supabase 갱신\n- **변경 불가**: Supabase → GP MySQL 역방향 쓰기 절대 금지\n\n### Supabase bawee 기존 어드민 테이블 (참고)\ngp_admin_deals, _contacts, _notes, _deal_activities, _deal_emails (영업 CRM)\ngp_admin_tickets, _ticket_messages, _plan_changes (운영)\ngp_admin_secrets, _secret_access_log (보안)\ngp_service_plans, _subscriptions, _projects, _project_sites, _usage (SaaS 구독)\nuser_profiles, user_domain_access (Supabase Auth)\n\n---\n\n## 10. 마케팅 자동화(MA) 테이블 구조\n\n| 테이블 | 행 수 | 역할 |\n|--------|-------|------|\n| tb_ma_campaign | 56 | 캠페인 마스터 |\n| tb_ma_campaign_target | 2,568,587 | ★ 타겟 오디언스 (최대 테이블) |\n| tb_ma_campaign_work | 487 | 캠페인 실행 이력 |\n| tb_ma_campaign_log | 413 | 캠페인 로그 |\n| tb_ma_segment | 117 | MA 세그먼트 |\n| tb_ma_content | 19 | 발송 콘텐츠 |\n| tb_ma_template | 28 | 템플릿 |\n| tb_ma_model | 15 | ML 모델 |\n| tb_ma_model_log | 360 | 모델 실행 로그 |\n| tb_ma_sender_profile | 5 | 발송자 프로필 |\n| tb_ma_client_settings | 3 | 클라이언트별 MA 설정 |\n| tb_ma_assistance_message | 26 | AI 어시스턴스 메시지 |\n\n---\n\nv1.0 2026-03-29 — DB 실측 기반 전수 조사",
  "related_slugs": [],
  "faq": [],
  "jsonld": null,
  "keywords": [],
  "source_id": "0d8e87e6-d900-4f00-882d-f273f5eeb2b2",
  "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.5731+00:00",
  "updated_at": "2026-08-24T11:53:44.5731+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": 50,
      "issues": [
        "숫자·규격 같은 검증 가능한 구체가 부족합니다",
        "핵심 요약 불릿이 3개 미만입니다",
        "Q&A 쌍이 3개 미만입니다"
      ],
      "applies": true
    },
    "g3": {
      "pass": true,
      "required": false
    },
    "stage": "1",
    "decided_at": "2026-08-24T11:53:44.334Z"
  },
  "raw_id": "dc15c2c7-81d5-487d-a1be-c95e206afcc2",
  "search_text": "[ARCH] GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스  # 📊 GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스 > v1.0 | 2026-03-29 | DB 실측 기반 | project_code: DATA_ENG > 접근: n8n-bizspring webhook `gp-mysql-temp3` (WF: FICNrkmVL8NKgu  # 📊 GP MySQL gp_prod 계정·권한·연동 체계 레퍼런스\n\n> v1.0 | 2026-03-29 | DB 실측 기반 | project_code: DATA_ENG\n> 접근: n8n-bizspring webhook `gp-mysql-temp3` (WF: FICNrkmVL8NKguT3)\n> 관련: GP MySQL 데이터 구조 `432148ba`, GP MySQL 접근 가이드 `344622a1`\n\n---\n\n## 1. gp_prod 전체 도메인 분류 (183 objects = 174T + 9V)\n\n| # | 도메인 | 접두사 | 테이블 수 | 총 행 수 | 핵심 엔터티 |\n|---|--------|--------|----------|---------|------------|\n| 1 | 계정/인증 | tb_admin, tb_role, tb_privilege, tb_team | 13T | ~1.7K | admin 201명, role 8, privilege 108 |\n| 2 | 대행사/광고주 | tb_agency, tb_client, tb_account | 33T | ~1.4M | agency 130, client 265, account 1,265 |\n| 3 | 매체/API 연동 | tb_media, tb_media_api, tb_media_license | 6T | ~1.5K | media 359, license 387 |\n| 4 | 마케팅 자동화(MA) | tb_ma_* | 22T | ~2.6M | campaign 56, target 2.6M, segment 117 |\n| 5 | 리포팅/엑셀 | tb_report_*, tb_excel_* | 13T | ~362K | report_job 347K |\n| 6 | 세그먼트/오디언스 | tb_segment_*, tb_audience_*, tb_aggregation_* | 11T | ~30K | segment_work 12K |\n| 7 | 추천/ML/AI | tb_recomm_*, tb_ml_*, tb_ai_* | 16T | ~49K | recomm_user_base 46K |\n| 8 | 모니터링/센티넬 | tb_monitoring_*, tb_sentinel_* | 12T | ~4.3K | sentinel_rule 3.4K |\n| 9 | 트래킹/UTM | tb_tracker_*, tb_mplanit_* | 9T | ~16.7K | tracker_upload 11K |\n| 10 | 코드/시스템 | tb_code*, tb_product, tb_app, tb_orders 등 | 20T+9V | ~1.3K | code 89그룹, code_dtl 782 |\n\n---\n\n## 2. 계정 체계 ER 다이어그램\n\n```\ntb_role (8개 역할)\n  ├── super(1) / admin(2) / feign(3)         ← 시스템 역할\n  ├── manager(11) / editor(12) / viewer(13)  ← 대행사 역할\n  └── client_editor(22) / client_viewer(23)  ← 광고주 역할\n       │\n       ↓ tb_role_privilege (540건 = role×privilege 매핑)\ntb_privilege (108개 기능 권한)\n\ntb_agency (130건, agency_tp: 마스터/대행사/대리대행사/광고주)\n  │ seq(PK), agency_nm, agency_tp, agency_option(JSON), act_st\n  │\n  ├── tb_agency_app (596건 = 앱 연동)\n  │\n  ├── → tb_admin (201건, agency_seq FK)\n  │     │ seq(PK), admin_id, admin_pw, admin_nm, admin_option(JSON)\n  │     │ act_st, agency_seq(FK), email_verified\n  │     │ 상태: 사용중 194, 사용불가_D 10, 사용종료 7\n  │     │\n  │     ├── tb_admin_role (226건 = admin↔role N:M 매핑)\n  │     │     admin_seq(FK) → role_seq(FK)\n  │     │\n  │     └── tb_admin_app (0건 = admin별 앱 권한, 미사용)\n  │\n  ├── → tb_team (agency_seq FK, parent_seq 계층)\n  │     │ seq(PK), team_nm, team_level, parent_seq(자기참조)\n  │     │\n  │     ├── tb_team_admin (219건 = team↔admin 매핑)\n  │     └── tb_team_client (248건 = team↔client 매핑)\n  │\n  └── → tb_client (265건, agency_seq FK)\n        │ seq(PK), client_nm, client_option(JSON ★핵심), act_st\n        │\n        └── → tb_account (1,265건)\n              │ agency_seq, account_no, media_tp, account_nm\n              │ account_option(JSON), license_seq(FK)\n              │\n              └── tb_media_license (387건)\n                    │ seq(PK), license_nm, media_tp, agency_seq\n                    │ admin_seq, api_seq, license_option(JSON)\n                    │\n                    └── tb_media_api (매체별 API 토큰)\n                          seq(PK), api_nm, media_tp, token, api_option(JSON)\n```\n\n---\n\n## 3. 역할(RBAC) 체계 상세\n\n### tb_role (8건)\n\n| seq | role_nm | 유형 | 설명 |\n|-----|---------|------|------|\n| 1 | super | 시스템 | 최고 관리자 |\n| 2 | admin | 시스템 | 일반 관리자 |\n| 3 | feign | 시스템 | 서비스 간 통신 (MSA Feign Client) |\n| 11 | manager | 대행사 | 대행사 매니저 |\n| 12 | editor | 대행사 | 대행사 편집자 |\n| 13 | viewer | 대행사 | 대행사 뷰어 |\n| 22 | client_editor | 광고주 | 광고주 편집자 |\n| 23 | client_viewer | 광고주 | 광고주 뷰어 |\n\n### tb_privilege (108건)\n- role_privilege (540건) = 8 role × 평균 67.5 privilege\n- 기능 단위 권한 매핑 (메뉴/API 엔드포인트별)\n\n---\n\n## 4. 대행사 유형 코드 (tb_code cd_no=101)\n\n| 코드 | 이름 | 설명 |\n|------|------|------|\n| 101001 | 마스터 | 비즈스프링 본사 |\n| 101002 | 대리 대행사 | 하위 대행사 |\n| 101003 | 광고주 | 직접 광고주 |\n| 101011 | 대행사 | 일반 대행사 |\n\n---\n\n## 5. 상태 코드 (tb_code cd_no=201 ACTIVE_ST)\n\n| 코드 | 이름 | alias | tb_admin 분포 |\n|------|------|-------|-------------|\n| 201001 | 사용중 | ACTIVE_ST_Y | 194명 |\n| 201002 | 사용중지 | ACTIVE_ST_N | 0 |\n| 201003 | 사용종료 | ACTIVE_ST_F | 7명 |\n| 201004 | 사용대기 | ACTIVE_ST_W | 0 |\n| 201005 | 사용불가 | ACTIVE_ST_X | 0 |\n| 201006 | 사용불가 | ACTIVE_ST_D | 10명 |\n\n---\n\n## 6. 매체 코드 (tb_code cd_no=111, 41개)\n\n### 주요 광고 매체 (API 수집 대상)\n네이버(001), 카카오(002), 구글(003), 페이스북(004), 인스타그램(005), 카카오모먼트(006), 틱톡(008), GFA(009/015), 모비온(011), 타겟팅게이츠(012), 데이블(013), ADN(014), 쿠팡(016), 당근(017)\n\n### 내부/연동 매체\n로거(111), 비즈메일러(112), 부스트(113), 에어브릿지(114), 파이어베이스(131), 구글애즈(132), 구글드라이브(133), 카카오브랜드검색(134), 카카오친구톡(135), 크리테오(136), RTB하우스(137)\n\n### 커머스 매체\n11번가(141/142), 다나와(143), 이베이(144), 인터파크(145), 롯데온(146), 티몬(147), 위메프(148), 엠플랜잇(149)\n\n### 기타\n메일침프(121), 아이메일러(122), 아이하트(123), FTP(124), API GFA(009), 템플릿(901)\n\n---\n\n## 7. 코드 체계 전체 (tb_code 89그룹)\n\n### 엔터티 유형 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 101 | AGENCY_TP | 대행사 종류 (4) |\n| 103 | PRODUCT_TP | 상품 종류: 무료체험/베이식/스탠다드 |\n| 111 | MEDIA_TP | 매체 종류 (41) |\n| 112 | CHANNEL_TP | 채널 종류 |\n| 113 | TEMPLATE_TP | 템플릿 종류 |\n| 114 | SEGMENT_TP | 세그먼트 종류 |\n| 115 | AUDIENCE_TP | 오디언스 종류 |\n\n### 작업/프로세스 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 121 | JOB_TP | 작업 종류 |\n| 122 | AGG_TP | 정제 종류 |\n| 123 | RUN_TP | 실행 종류 |\n| 124 | EXPORT_TP | 추출 종류 |\n| 125 | RESULT_TP | 결과 종류 |\n\n### 상태 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 201 | ACTIVE_ST | 사용 상태 (6) |\n| 202 | JOB_ST | 작업 상태 |\n| 231~240 | 각종 상태 | 공지/알람/QA/주문/지원/세금계산서/이메일인증/프로젝트/프로세스/MA캠페인 |\n\n### MA(마케팅 자동화) 코드\n| cd_no | alias | 이름 |\n|-------|-------|------|\n| 137 | MA_SEND_TP | MA 발송 방식 |\n| 138 | MA_SCHEDULE_TP | MA 예약 주기 |\n| 139 | MA_SEND_ST | MA 발송 상태 |\n\n### 리포트 필드 코드 (매체별)\nN01~N12 (네이버), K01~K05 (카카오), G01~G02 (구글), F01~F04 (페이스북), M01~M04 (카카오모먼트), S11~S15 (기타 매체)\n\n### 대량 처리/엑셀 코드\n501~505 (광고 대량처리), 601~606 (엑셀), 511 (키워드 유틸리티), 801 (신문사)\n\n---\n\n## 8. 외부 서비스 연동 체인\n\n```\ntb_media_api (매체별 API 인증)\n  │ api_nm, media_tp, token(512), api_option(JSON)\n  │\n  ↓ tb_media_license (라이선스 = API + 매체 + 대행사 연결)\n  │ license_nm, media_tp, api_seq(FK), agency_seq(FK), admin_seq(FK)\n  │ license_option(JSON)\n  │\n  ↓ tb_account (광고 계정 = 라이선스 하위)\n  │ account_no(bigint), media_tp, license_seq(FK), agency_seq(FK)\n  │\n  ↓ client_option.media[] (클라이언트별 매체 계정 매핑)\n    JSON 배열로 media_tp + account_no 조합\n```\n\n연동 흐름: 매체 API 등록(api) → 라이선스 생성(license) → 계정 연결(account) → 클라이언트 할당(client_option.media[])\n\n---\n\n## 9. GP MySQL ↔ Supabase 연동 설계 방향\n\n### 원칙: GP MySQL = SOT(Single Source of Truth)\n\n```\nGP MySQL (기존 운영)                    Supabase (어드민 UI)\n────────────────────                    ──────────────────────\ntb_agency (130)        ──sync──→       de_admin_agencies\ntb_admin (201)         ──sync──→       de_admin_users\ntb_client (265)        ──sync──→       de_admin_clients (기존)\ntb_account (1,265)     ──sync──→       de_admin_accounts\ntb_role + privilege    ──sync──→       Supabase RLS policies\ntb_media + license     ──read──→       n8n relay (읽기 전용)\ntb_code + code_dtl     ──cache──→      de_admin_codes (코드 캐시)\n```\n\n### 동기화 방식 (향후 구현)\n- **일일 배치**: n8n Cron → GP MySQL SELECT → Supabase UPSERT\n- **이벤트 기반**: GP에서 변경 시 → Kafka → n8n webhook → Supabase 갱신\n- **변경 불가**: Supabase → GP MySQL 역방향 쓰기 절대 금지\n\n### Supabase bawee 기존 어드민 테이블 (참고)\ngp_admin_deals, _contacts, _notes, _deal_activities, _deal_emails (영업 CRM)\ngp_admin_tickets, _ticket_messages, _plan_changes (운영)\ngp_admin_secrets, _secret_access_log (보안)\ngp_service_plans, _subscriptions, _projects, _project_sites, _usage (SaaS 구독)\nuser_profiles, user_domain_access (Supabase Auth)\n\n---\n\n## 10. 마케팅 자동화(MA) 테이블 구조\n\n| 테이블 | 행 수 | 역할 |\n|--------|-------|------|\n| tb_ma_campaign | 56 | 캠페인 마스터 |\n| tb_ma_campaign_target | 2,568,587 | ★ 타겟 오디언스 (최대 테이블) |\n| tb_ma_campaign_work | 487 | 캠페인 실행 이력 |\n| tb_ma_campaign_log | 413 | 캠페인 로그 |\n| tb_ma_segment | 117 | MA 세그먼트 |\n| tb_ma_content | 19 | 발송 콘텐츠 |\n| tb_ma_template | 28 | 템플릿 |\n| tb_ma_model | 15 | ML 모델 |\n| tb_ma_model_log | 360 | 모델 실행 로그 |\n| tb_ma_sender_profile | 5 | 발송자 프로필 |\n| tb_ma_client_settings | 3 | 클라이언트별 MA 설정 |\n| tb_ma_assistance_message | 26 | AI 어시스턴스 메시지 |\n\n---\n\nv1.0 2026-03-29 — DB 실측 기반 전수 조사",
  "embedding": null,
  "embedded_at": null,
  "embedding_hash": null,
  "backlinks": [],
  "html_url": "https://bizspring.ai/kb/ref/khub/data-eng-arch-gp-mysql-gp-prod-계정-권한-연동-체계-레퍼런스",
  "markdown_url": "https://bizspring.ai/kb/ref/khub/data-eng-arch-gp-mysql-gp-prod-계정-권한-연동-체계-레퍼런스.md"
}