Files
sam-docs/sam/docs/system/database/codebridge-separation.md
김보곤 5000c67ec1 docs: [database] codebridge 분리 대상에서 API 사용 테이블 22개 제외
- Barobill 12개: API 모델/서비스/컨트롤러에서 직접 사용
- ESign 4개: API 전자계약 기능 (EsignService, EsignContractController)
- Audit 2개: API 전사 감사 시스템 (AuditLogService, TriggerAuditLogController)
- DevTools 1개: api_request_logs (SystemStatService)
- System 2개: ai_pricing_configs, ai_token_usages (API 모델)
- HR 1개: income_tax_brackets (API Seeder)
- codebridge 이동 대상 100개 → 55개로 축소
2026-03-09 19:58:07 +09:00

12 KiB

codebridge DB 분리

작성일: 2026-03-07 상태: 로컬/개발 서버 적용 완료, 운영 서버 미적용 최종 수정: 2026-03-09 — API 사용 테이블 점검 완료, codebridge 이동 대상 100개 → 55개로 축소


1. 개요

1.1 목적

SAM 프로젝트의 DB를 서비스용내부 관리용으로 분리한다.

  • samdb: React 서비스가 사용하는 테이블 (수주, 견적, 생산, 거래처 등)
  • codebridge: MNG(관리자 패널)에서만 사용하는 코드브릿지엑스 내부 관리 테이블

1.2 핵심 원칙

  • 기존 samdb의 테이블은 삭제하지 않는다 (복사만 수행)
  • MNG 모델에 $connection = 'codebridge'를 설정하여 읽기 대상 DB만 변경
  • React/API 서비스에는 영향 없음

1.3 분리 기준

분류 대상 DB 기준
React 서비스 테이블 samdb (유지) React 프론트엔드 또는 API에서 사용
MNG 전용 테이블 codebridge (이동) MNG에서만 사용, React/API 미참조
공통 테이블 samdb (유지) 양쪽 모두 사용 (users, tenants 등)
API 사용 테이블 samdb (유지 필수) API에 모델/서비스/컨트롤러 존재 — 이동 시 데이터 불일치 발생

경고: API에서 모델/서비스/컨트롤러로 참조하는 테이블을 codebridge로 이동하면, API는 samdb에 쓰고 MNG는 codebridge에서 읽게 되어 데이터 불일치가 발생한다. 절대 이동 금지.


2. codebridge 테이블 목록 (55개)

2026-03-09 점검: API 프로젝트 전체 코드 조사를 통해 API에서 사용하는 22개 테이블을 제외함. 제외된 테이블은 3절 참조.

Admin (9)

테이블 설명
admin_api_flows API 플로우 정의
admin_api_flow_runs API 플로우 실행 이력
admin_pm_daily_logs PM 일일 로그
admin_pm_daily_log_entries PM 일일 로그 항목
admin_pm_issues PM 이슈
admin_pm_projects PM 프로젝트
admin_pm_tasks PM 태스크
admin_roadmap_milestones 로드맵 마일스톤
admin_roadmap_plans 로드맵 계획

DevTools (5)

테이블 설명
api_bookmarks API 북마크
api_deprecations API 지원종료 관리
api_environments API 환경 설정
api_histories API 호출 이력
api_templates API 템플릿

Sales (17)

테이블 설명
sales_partners 영업 파트너
sales_managers 영업 담당자
sales_manager_documents 영업 담당자 문서
sales_commissions 영업 수당
sales_commission_details 영업 수당 상세
sales_consultations 영업 상담
sales_contract_products 계약 제품
sales_products 영업 제품
sales_product_categories 영업 제품 카테고리
sales_prospects 영업 전망
sales_prospect_consultations 전망 상담
sales_prospect_products 전망 제품
sales_prospect_scenarios 전망 시나리오
sales_records 영업 실적
sales_scenario_checklists 시나리오 체크리스트
sales_tenant_managements 테넌트 영업 관리
tenant_prospects 테넌트 전망

Finance (9)

테이블 설명
condolence_expenses 경조사비
consulting_fees 컨설팅비
corporate_cards 법인카드
corporate_card_prepayments 법인카드 선결제
customer_settlements 고객 정산
daily_fund_memos 일일 자금 메모
daily_fund_transactions 일일 자금 거래
incomes 수입
vat_records 부가세 기록

ESign (2)

테이블 설명
esign_field_templates 전자서명 필드 템플릿
esign_field_template_items 전자서명 필드 항목

esign_contracts, esign_audit_logs, esign_sign_fields, esign_signers는 API에서 전자계약 기능으로 사용 중 → samdb 유지

Equipment (2)

테이블 설명
equipments 설비
equipment_processes 설비 공정

HR (1)

테이블 설명
business_income_payments 사업소득 지급

income_tax_brackets는 API IncomeTaxBracketSeeder에서 초기 데이터 관리 → samdb 유지

System (1)

테이블 설명
ai_configs AI 설정

ai_pricing_configs, ai_token_usages는 API 모델에서 직접 사용 → samdb 유지

기타 (9)

테이블 설명
biz_certs 사업자등록증
cm_songs R&D 곡 관리
construction_site_photos 시공 현장 사진
construction_site_photo_rows 시공 사진 행
meeting_logs 회의 로그
meeting_minutes 회의록
meeting_minute_segments 회의록 세그먼트
interview_knowledges 면접 지식
sales_records 매출 기록

3. API 사용 테이블 — samdb 유지 필수 (22개)

경고: 아래 테이블은 API 프로젝트에서 모델/서비스/컨트롤러/시더로 직접 참조한다. 절대 codebridge로 이동 금지.

2026-03-09 점검: sam/api 프로젝트 전체 코드 (모델, 컨트롤러, 서비스, 라우트, 시더) 조사 완료.

Barobill (12) — 전체 samdb 유지

테이블 API 사용처 사유
barobill_billing_records BarobillBillingService 과금 기록 CRUD
barobill_members BarobillUsageService 회원사 사용량 집계
barobill_monthly_summaries BarobillBillingService 월별 집계 갱신
barobill_pricing_policies BarobillUsageService 과금 계산
bank_sync_statuses BankSyncStatus 모델 동기화 상태 추적
bank_transactions BankTransactionController 은행 거래 조회/분개
bank_transaction_overrides BankTransactionOverride 모델 거래 재정의
bank_transaction_splits BankTransactionController 은행 거래 분개
card_transaction_amount_logs CardTransactionAmountLog 모델 금액 수정 이력 + FK → card_transactions
card_transaction_hides CardTransactionHide 모델 거래 숨김 + FK → card_transactions
hometax_invoices BarobillUsageService 세금계산서 사용량 집계
hometax_invoice_journals HometaxInvoiceJournal 모델 세금계산서 분개 + FK → hometax_invoices

핵심: API의 BarobillController, BarobillSettingController, BarobillService, EntertainmentService가 바로빌 테이블을 직접 참조. barobill_card_transactions (samdb 유지)와 FK로 연결된 자식 테이블도 분리 불가.

ESign (4) — API 전자계약 기능

테이블 API 사용처 사유
esign_contracts EsignContractController, EsignService 전자계약 CRUD
esign_audit_logs EsignService 감사 추적 기록
esign_sign_fields EsignService 서명 위치 데이터
esign_signers EsignService 서명자 정보/인증

Audit (2) — API 전사 감사 시스템

테이블 API 사용처 사유
audit_logs AuditLog 모델, AuditLogService, AuditRollbackService 전사 DML 감사
trigger_audit_logs TriggerAuditLog 모델, TriggerAuditLogController, RegenerateAuditTriggers 명령 DB 트리거 감사 + 파티셔닝 관리

DevTools (1)

테이블 API 사용처 사유
api_request_logs ApiRequestLog 모델, SystemStatService API 통계 집계

System (2)

테이블 API 사용처 사유
ai_pricing_configs AiPricingConfig 모델 AI 서비스 비용 계산 (캐시 기반)
ai_token_usages AiTokenUsage 모델 멀티테넌트 AI 토큰 사용량 추적

HR (1)

테이블 API 사용처 사유
income_tax_brackets IncomeTaxBracketSeeder 소득세 구간 초기 데이터 관리

4. 적용 현황

4.1 환경별 상태

환경 codebridge DB 테이블 복사 .env 설정 MNG 모델 적용 상태
로컬 Docker O 55개 O O (develop) 정상 작동
개발 서버 O 55개 O O (develop) 정상 작동
운영 서버 X X X X (revert) 미적용 (기존 samdb 사용)

2026-03-09 정리:

  • finance_* 17개 + barobill_companies 1개: 마이그레이션 없이 수동 생성된 테이블 → 삭제 완료
  • API 사용 테이블 22개: codebridge 이동 대상에서 제외 → samdb 유지 (MNG 모델의 $connection = 'codebridge' 제거 필요)

4.2 코드 변경 사항

config/database.phpcodebridge connection 추가:

'codebridge' => [
    'driver' => 'mysql',
    'host' => env('CODEBRIDGE_DB_HOST', env('DB_HOST', '127.0.0.1')),
    'port' => env('CODEBRIDGE_DB_PORT', env('DB_PORT', '3306')),
    'database' => env('CODEBRIDGE_DB_DATABASE', 'codebridge'),
    'username' => env('CODEBRIDGE_DB_USERNAME', env('DB_USERNAME')),
    'password' => env('CODEBRIDGE_DB_PASSWORD', env('DB_PASSWORD')),
    // ... (mysql 기본 설정과 동일)
],

.env — 추가 설정:

CODEBRIDGE_DB_DATABASE=codebridge

MNG 모델$connection 속성 추가 (codebridge 55개만):

class SalesPartner extends Model
{
    protected $connection = 'codebridge';  // 추가
    protected $table = 'sales_partners';
    // ...
}

주의: API 사용 테이블 22개에 해당하는 MNG 모델은 $connection = 'codebridge'를 설정하지 않는다. 기본 samdb connection을 사용해야 API와 동일한 데이터를 참조한다.


5. 운영 서버 적용 절차 (미완료)

전제: 운영 서버 SSH 접근 + DB root 권한 필요

순서 (반드시 1 → 2 → 3 순서로)

1단계: codebridge DB 생성 + 테이블 복사

# DB 생성
mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS codebridge CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"

# DB 계정 권한 부여
mysql -u root -p -e "GRANT ALL PRIVILEGES ON codebridge.* TO 'codebridge'@'localhost'; FLUSH PRIVILEGES;"

# sam에서 55개 테이블 구조+데이터 복사 (mysqldump → import)
mysqldump -u codebridge -p sam [테이블목록] | mysql -u codebridge -p codebridge

2단계: .env 설정

echo 'CODEBRIDGE_DB_DATABASE=codebridge' >> /home/webservice/mng/.env
cd /home/webservice/mng && php artisan config:clear

3단계: 코드 배포 (main push)

MNG 코드(codebridge 55개 모델 $connection 변경)를 main에 cherry-pick + push. Jenkins가 자동 배포.

주의: 3단계 전에 1, 2단계가 완료되어야 한다. DB가 없는 상태에서 코드를 배포하면 MNG 페이지 접속 불가.


6. 아키텍처 다이어그램

                    React (사용자)
                         |
                    API 서버 (Laravel)
                         |
                    ┌─────┴─────┐
                    |           |
                  samdb      sam_stat
                (서비스 DB)  (통계 DB)
                    |
                    |  (공통 + API 사용 테이블: users, tenants, barobill_*, esign_*, audit_* 등)
                    |
                MNG (관리자)
                    |
              ┌─────┴─────┐
              |           |
            samdb     codebridge
          (공통 참조)  (MNG 전용 55개)
  • React → API → samdb: 서비스 트래픽 (수주, 견적, 생산, 바로빌, 전자서명 등)
  • MNG → samdb: 공통 테이블 (users, tenants, menus) + API 사용 테이블 22개 참조
  • MNG → codebridge: MNG 전용 데이터 (영업관리, 재무, 설비, PM 도구 등)

관련 문서


최종 업데이트: 2026-03-09