# [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 계정·권한·연동 체계 레퍼런스

> v1.0 | 2026-03-29 | DB 실측 기반 | project_code: DATA_ENG
> 접근: n8n-bizspring webhook `gp-mysql-temp3` (WF: FICNrkmVL8NKguT3)
> 관련: GP MySQL 데이터 구조 `432148ba`, GP MySQL 접근 가이드 `344622a1`

---

## 1. gp_prod 전체 도메인 분류 (183 objects = 174T + 9V)

| # | 도메인 | 접두사 | 테이블 수 | 총 행 수 | 핵심 엔터티 |
|---|--------|--------|----------|---------|------------|
| 1 | 계정/인증 | tb_admin, tb_role, tb_privilege, tb_team | 13T | ~1.7K | admin 201명, role 8, privilege 108 |
| 2 | 대행사/광고주 | tb_agency, tb_client, tb_account | 33T | ~1.4M | agency 130, client 265, account 1,265 |
| 3 | 매체/API 연동 | tb_media, tb_media_api, tb_media_license | 6T | ~1.5K | media 359, license 387 |
| 4 | 마케팅 자동화(MA) | tb_ma_* | 22T | ~2.6M | campaign 56, target 2.6M, segment 117 |
| 5 | 리포팅/엑셀 | tb_report_*, tb_excel_* | 13T | ~362K | report_job 347K |
| 6 | 세그먼트/오디언스 | tb_segment_*, tb_audience_*, tb_aggregation_* | 11T | ~30K | segment_work 12K |
| 7 | 추천/ML/AI | tb_recomm_*, tb_ml_*, tb_ai_* | 16T | ~49K | recomm_user_base 46K |
| 8 | 모니터링/센티넬 | tb_monitoring_*, tb_sentinel_* | 12T | ~4.3K | sentinel_rule 3.4K |
| 9 | 트래킹/UTM | tb_tracker_*, tb_mplanit_* | 9T | ~16.7K | tracker_upload 11K |
| 10 | 코드/시스템 | tb_code*, tb_product, tb_app, tb_orders 등 | 20T+9V | ~1.3K | code 89그룹, code_dtl 782 |

---

## 2. 계정 체계 ER 다이어그램

```
tb_role (8개 역할)
  ├── super(1) / admin(2) / feign(3)         ← 시스템 역할
  ├── manager(11) / editor(12) / viewer(13)  ← 대행사 역할
  └── client_editor(22) / client_viewer(23)  ← 광고주 역할
       │
       ↓ tb_role_privilege (540건 = role×privilege 매핑)
tb_privilege (108개 기능 권한)

tb_agency (130건, agency_tp: 마스터/대행사/대리대행사/광고주)
  │ seq(PK), agency_nm, agency_tp, agency_option(JSON), act_st
  │
  ├── tb_agency_app (596건 = 앱 연동)
  │
  ├── → tb_admin (201건, agency_seq FK)
  │     │ seq(PK), admin_id, admin_pw, admin_nm, admin_option(JSON)
  │     │ act_st, agency_seq(FK), email_verified
  │     │ 상태: 사용중 194, 사용불가_D 10, 사용종료 7
  │     │
  │     ├── tb_admin_role (226건 = admin↔role N:M 매핑)
  │     │     admin_seq(FK) → role_seq(FK)
  │     │
  │     └── tb_admin_app (0건 = admin별 앱 권한, 미사용)
  │
  ├── → tb_team (agency_seq FK, parent_seq 계층)
  │     │ seq(PK), team_nm, team_level, parent_seq(자기참조)
  │     │
  │     ├── tb_team_admin (219건 = team↔admin 매핑)
  │     └── tb_team_client (248건 = team↔client 매핑)
  │
  └── → tb_client (265건, agency_seq FK)
        │ seq(PK), client_nm, client_option(JSON ★핵심), act_st
        │
        └── → tb_account (1,265건)
              │ agency_seq, account_no, media_tp, account_nm
              │ account_option(JSON), license_seq(FK)
              │
              └── tb_media_license (387건)
                    │ seq(PK), license_nm, media_tp, agency_seq
                    │ admin_seq, api_seq, license_option(JSON)
                    │
                    └── tb_media_api (매체별 API 토큰)
                          seq(PK), api_nm, media_tp, token, api_option(JSON)
```

---

## 3. 역할(RBAC) 체계 상세

### tb_role (8건)

| seq | role_nm | 유형 | 설명 |
|-----|---------|------|------|
| 1 | super | 시스템 | 최고 관리자 |
| 2 | admin | 시스템 | 일반 관리자 |
| 3 | feign | 시스템 | 서비스 간 통신 (MSA Feign Client) |
| 11 | manager | 대행사 | 대행사 매니저 |
| 12 | editor | 대행사 | 대행사 편집자 |
| 13 | viewer | 대행사 | 대행사 뷰어 |
| 22 | client_editor | 광고주 | 광고주 편집자 |
| 23 | client_viewer | 광고주 | 광고주 뷰어 |

### tb_privilege (108건)
- role_privilege (540건) = 8 role × 평균 67.5 privilege
- 기능 단위 권한 매핑 (메뉴/API 엔드포인트별)

---

## 4. 대행사 유형 코드 (tb_code cd_no=101)

| 코드 | 이름 | 설명 |
|------|------|------|
| 101001 | 마스터 | 비즈스프링 본사 |
| 101002 | 대리 대행사 | 하위 대행사 |
| 101003 | 광고주 | 직접 광고주 |
| 101011 | 대행사 | 일반 대행사 |

---

## 5. 상태 코드 (tb_code cd_no=201 ACTIVE_ST)

| 코드 | 이름 | alias | tb_admin 분포 |
|------|------|-------|-------------|
| 201001 | 사용중 | ACTIVE_ST_Y | 194명 |
| 201002 | 사용중지 | ACTIVE_ST_N | 0 |
| 201003 | 사용종료 | ACTIVE_ST_F | 7명 |
| 201004 | 사용대기 | ACTIVE_ST_W | 0 |
| 201005 | 사용불가 | ACTIVE_ST_X | 0 |
| 201006 | 사용불가 | ACTIVE_ST_D | 10명 |

---

## 6. 매체 코드 (tb_code cd_no=111, 41개)

### 주요 광고 매체 (API 수집 대상)
네이버(001), 카카오(002), 구글(003), 페이스북(004), 인스타그램(005), 카카오모먼트(006), 틱톡(008), GFA(009/015), 모비온(011), 타겟팅게이츠(012), 데이블(013), ADN(014), 쿠팡(016), 당근(017)

### 내부/연동 매체
로거(111), 비즈메일러(112), 부스트(113), 에어브릿지(114), 파이어베이스(131), 구글애즈(132), 구글드라이브(133), 카카오브랜드검색(134), 카카오친구톡(135), 크리테오(136), RTB하우스(137)

### 커머스 매체
11번가(141/142), 다나와(143), 이베이(144), 인터파크(145), 롯데온(146), 티몬(147), 위메프(148), 엠플랜잇(149)

### 기타
메일침프(121), 아이메일러(122), 아이하트(123), FTP(124), API GFA(009), 템플릿(901)

---

## 7. 코드 체계 전체 (tb_code 89그룹)

### 엔터티 유형 코드
| cd_no | alias | 이름 |
|-------|-------|------|
| 101 | AGENCY_TP | 대행사 종류 (4) |
| 103 | PRODUCT_TP | 상품 종류: 무료체험/베이식/스탠다드 |
| 111 | MEDIA_TP | 매체 종류 (41) |
| 112 | CHANNEL_TP | 채널 종류 |
| 113 | TEMPLATE_TP | 템플릿 종류 |
| 114 | SEGMENT_TP | 세그먼트 종류 |
| 115 | AUDIENCE_TP | 오디언스 종류 |

### 작업/프로세스 코드
| cd_no | alias | 이름 |
|-------|-------|------|
| 121 | JOB_TP | 작업 종류 |
| 122 | AGG_TP | 정제 종류 |
| 123 | RUN_TP | 실행 종류 |
| 124 | EXPORT_TP | 추출 종류 |
| 125 | RESULT_TP | 결과 종류 |

### 상태 코드
| cd_no | alias | 이름 |
|-------|-------|------|
| 201 | ACTIVE_ST | 사용 상태 (6) |
| 202 | JOB_ST | 작업 상태 |
| 231~240 | 각종 상태 | 공지/알람/QA/주문/지원/세금계산서/이메일인증/프로젝트/프로세스/MA캠페인 |

### MA(마케팅 자동화) 코드
| cd_no | alias | 이름 |
|-------|-------|------|
| 137 | MA_SEND_TP | MA 발송 방식 |
| 138 | MA_SCHEDULE_TP | MA 예약 주기 |
| 139 | MA_SEND_ST | MA 발송 상태 |

### 리포트 필드 코드 (매체별)
N01~N12 (네이버), K01~K05 (카카오), G01~G02 (구글), F01~F04 (페이스북), M01~M04 (카카오모먼트), S11~S15 (기타 매체)

### 대량 처리/엑셀 코드
501~505 (광고 대량처리), 601~606 (엑셀), 511 (키워드 유틸리티), 801 (신문사)

---

## 8. 외부 서비스 연동 체인

```
tb_media_api (매체별 API 인증)
  │ api_nm, media_tp, token(512), api_option(JSON)
  │
  ↓ tb_media_license (라이선스 = API + 매체 + 대행사 연결)
  │ license_nm, media_tp, api_seq(FK), agency_seq(FK), admin_seq(FK)
  │ license_option(JSON)
  │
  ↓ tb_account (광고 계정 = 라이선스 하위)
  │ account_no(bigint), media_tp, license_seq(FK), agency_seq(FK)
  │
  ↓ client_option.media[] (클라이언트별 매체 계정 매핑)
    JSON 배열로 media_tp + account_no 조합
```

연동 흐름: 매체 API 등록(api) → 라이선스 생성(license) → 계정 연결(account) → 클라이언트 할당(client_option.media[])

---

## 9. GP MySQL ↔ Supabase 연동 설계 방향

### 원칙: GP MySQL = SOT(Single Source of Truth)

```
GP MySQL (기존 운영)                    Supabase (어드민 UI)
────────────────────                    ──────────────────────
tb_agency (130)        ──sync──→       de_admin_agencies
tb_admin (201)         ──sync──→       de_admin_users
tb_client (265)        ──sync──→       de_admin_clients (기존)
tb_account (1,265)     ──sync──→       de_admin_accounts
tb_role + privilege    ──sync──→       Supabase RLS policies
tb_media + license     ──read──→       n8n relay (읽기 전용)
tb_code + code_dtl     ──cache──→      de_admin_codes (코드 캐시)
```

### 동기화 방식 (향후 구현)
- **일일 배치**: n8n Cron → GP MySQL SELECT → Supabase UPSERT
- **이벤트 기반**: GP에서 변경 시 → Kafka → n8n webhook → Supabase 갱신
- **변경 불가**: Supabase → GP MySQL 역방향 쓰기 절대 금지

### Supabase bawee 기존 어드민 테이블 (참고)
gp_admin_deals, _contacts, _notes, _deal_activities, _deal_emails (영업 CRM)
gp_admin_tickets, _ticket_messages, _plan_changes (운영)
gp_admin_secrets, _secret_access_log (보안)
gp_service_plans, _subscriptions, _projects, _project_sites, _usage (SaaS 구독)
user_profiles, user_domain_access (Supabase Auth)

---

## 10. 마케팅 자동화(MA) 테이블 구조

| 테이블 | 행 수 | 역할 |
|--------|-------|------|
| tb_ma_campaign | 56 | 캠페인 마스터 |
| tb_ma_campaign_target | 2,568,587 | ★ 타겟 오디언스 (최대 테이블) |
| tb_ma_campaign_work | 487 | 캠페인 실행 이력 |
| tb_ma_campaign_log | 413 | 캠페인 로그 |
| tb_ma_segment | 117 | MA 세그먼트 |
| tb_ma_content | 19 | 발송 콘텐츠 |
| tb_ma_template | 28 | 템플릿 |
| tb_ma_model | 15 | ML 모델 |
| tb_ma_model_log | 360 | 모델 실행 로그 |
| tb_ma_sender_profile | 5 | 발송자 프로필 |
| tb_ma_client_settings | 3 | 클라이언트별 MA 설정 |
| tb_ma_assistance_message | 26 | AI 어시스턴스 메시지 |

---

v1.0 2026-03-29 — DB 실측 기반 전수 조사

## FAQ


---
출처: https://bizspring.ai/kb/ref/khub/data-eng-arch-gp-mysql-gp-prod-계정-권한-연동-체계-레퍼런스 · 최종 갱신 2026-08-24T11:53:44.5731+00:00
