diff --git a/sam/docs/system/database/codebridge-separation.md b/sam/docs/system/database/codebridge-separation.md index 74a0874..9022cbe 100644 --- a/sam/docs/system/database/codebridge-separation.md +++ b/sam/docs/system/database/codebridge-separation.md @@ -1,8 +1,8 @@ # codebridge DB 분리 > **작성일**: 2026-03-07 -> **상태**: 로컬/개발 서버 적용 완료, 운영 서버 미적용 -> **최종 수정**: 2026-03-09 — API 사용 테이블 점검 완료, codebridge 이동 대상 100개 → 59개로 축소, 개발 서버 samdb에서 59개 테이블 삭제 완료 +> **상태**: 로컬/개발 서버 적용 완료, **운영 서버 코드 revert 상태 — DB 선행 작업 필요** +> **최종 수정**: 2026-03-09 — API 사용 테이블 점검, 로컬/개발 samdb 삭제 완료, 운영 코드 revert --- @@ -58,11 +58,11 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리 | 테이블 | 설명 | 비고 | |--------|------|------| -| `admin_api_bookmarks` | API 북마크 | 문서 기존명 `api_bookmarks` → 실제 테이블명 | -| `api_deprecations` | API 지원종료 관리 | | -| `api_environments` | API 환경 설정 | | -| `api_histories` | API 호출 이력 | | -| `api_templates` | API 템플릿 | | +| `admin_api_bookmarks` | API 북마크 | 기존명 `api_bookmarks` | +| `admin_api_deprecations` | API 지원종료 관리 | 기존명 `api_deprecations` | +| `admin_api_environments` | API 환경 설정 | 기존명 `api_environments` | +| `admin_api_histories` | API 호출 이력 | 기존명 `api_histories` | +| `admin_api_templates` | API 템플릿 | 기존명 `api_templates` | ### Sales (17) @@ -220,24 +220,32 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리 ### 4.1 환경별 상태 -| 환경 | codebridge DB | 테이블 복사 | samdb 삭제 | .env 설정 | MNG 모델 적용 | 상태 | +| 환경 | codebridge DB | 테이블 복사 | samdb 삭제 | .env 설정 | MNG 코드 | 상태 | |------|:---:|:---:|:---:|:---:|:---:|------| -| **로컬 Docker** | O | 59개 | 미수행 | O | O (develop) | 정상 작동 | -| **개발 서버** | O | 59개 | **59개 삭제 완료** | O | O (develop) | 정상 작동 | -| **운영 서버** | X | X | X | X | X (revert) | 미적용 (기존 samdb 사용) | +| **로컬 Docker** | O | 100개 | **58개 삭제** | O | O (develop) | ✅ 정상 작동, samdb 265개 | +| **개발 서버** | O | 101개 | **63개 삭제** | O | O (develop) | ✅ 정상 작동, samdb 265개 | +| **운영 서버** | **X** | **X** | **X** | **X** | **revert됨** | ⚠️ DB 선행 작업 후 코드 재배포 필요 | > **2026-03-09 작업 내역**: > - API 사용 테이블 22개: codebridge 이동 대상에서 제외 → samdb 유지 > - `finance_*` 17개 + `barobill_companies` 1개: codebridge에 없는 유령 테이블 → samdb에서만 삭제 > - Equipment 하위 4개 테이블: FK 의존성으로 codebridge 이동 대상에 추가 (55→59개) -> - **개발 서버 samdb에서 59개 테이블 DROP 완료** (FOREIGN_KEY_CHECKS=0 사용) +> - **개발 서버 samdb에서 63개 테이블 DROP 완료** (59개 + DevTools 실제 테이블명 4개 추가분) +> - **로컬 samdb에서 58개 테이블 DROP 완료** → 로컬/개발 265개로 동기화 +> - 로컬에 `quality_documents` 등 4개 테이블 구조 동기화 (개발서버에서 복사) > - 백업: `/home/pro/backup/sam_backup_20260309.sql.gz` (6.3MB) -> - 개발 서버 상태: samdb 276개 테이블, codebridge 101개 테이블 > > **테이블명 불일치 발견 (수정 완료)**: > - `api_bookmarks` → 실제: `admin_api_bookmarks` > - `meeting_logs` → 실제: `admin_meeting_logs` > - `biz_certs` → 실제: `biz_cert` (단수형) +> - DevTools 4개: `api_deprecations` → `admin_api_deprecations`, `api_environments` → `admin_api_environments`, `api_histories` → `admin_api_histories`, `api_templates` → `admin_api_templates` +> +> **운영 서버 revert 사유 (2026-03-09)**: +> - MNG main에 codebridge 코드 2건 cherry-pick → Jenkins 배포됨 (빌드 #456, #457) +> - 운영 서버에 codebridge DB가 없는 상태에서 코드 배포 → **59개 모델 사용 페이지 오류 발생 위험** +> - kent가 main에서 revert 2건 push → 운영 서버 정상 복구 +> - **교훈: 운영 서버는 반드시 DB 선행 작업(1~2단계) 완료 후 코드 배포(3단계)** ### 4.2 코드 변경 사항 @@ -298,11 +306,20 @@ SET FOREIGN_KEY_CHECKS = 1; ## 5. 운영 서버 적용 절차 (미완료) > **전제**: 운영 서버 SSH 접근 + DB root 권한 필요 -> **코드는 이미 main에 배포 완료** — 운영 서버에 codebridge DB만 생성하면 즉시 적용됨 +> **현재 상태**: 운영 서버 main 코드는 revert 상태 (codebridge 코드 없음). DB 작업 완료 후 코드 재배포 필요. +> **⚠️ 교훈**: 2026-03-09에 DB 없이 코드만 배포하여 장애 위험 발생 → **반드시 DB 선행 후 코드 배포** -### 순서 (반드시 1 → 2 → 3 → 4 순서로) +### 순서 (반드시 1 → 2 → 3 → 4 → 5 순서로) -**1단계: codebridge DB 생성 + 테이블 복사** +**1단계: 운영 sam DB 백업** + +```bash +# 운영 서버 접속 후 +mysqldump -u codebridge -p'[운영PW]' sam --single-transaction > ~/backup/sam_backup_$(date +%Y%m%d).sql +gzip ~/backup/sam_backup_$(date +%Y%m%d).sql +``` + +**2단계: codebridge DB 생성 + 59개 테이블 복사** ```bash # DB 생성 @@ -311,33 +328,80 @@ mysql -u root -p -e "CREATE DATABASE IF NOT EXISTS codebridge CHARACTER SET utf8 # DB 계정 권한 부여 mysql -u root -p -e "GRANT ALL PRIVILEGES ON codebridge.* TO 'codebridge'@'localhost'; FLUSH PRIVILEGES;" -# sam에서 59개 테이블 구조+데이터 복사 (mysqldump → import) -mysqldump -u codebridge -p sam [테이블목록] | mysql -u codebridge -p codebridge +# sam에서 59개 테이블 구조+데이터 복사 +mysqldump -u codebridge -p sam \ + admin_api_flows admin_api_flow_runs \ + admin_pm_daily_logs admin_pm_daily_log_entries admin_pm_issues admin_pm_projects admin_pm_tasks \ + admin_roadmap_milestones admin_roadmap_plans \ + admin_api_bookmarks admin_api_deprecations admin_api_environments admin_api_histories admin_api_templates \ + 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 \ + condolence_expenses consulting_fees corporate_cards corporate_card_prepayments \ + customer_settlements daily_fund_memos daily_fund_transactions incomes vat_records \ + esign_field_templates esign_field_template_items \ + equipments equipment_process equipment_inspections equipment_inspection_details \ + equipment_inspection_templates equipment_repairs \ + business_income_payments ai_configs \ + biz_cert cm_songs construction_site_photos construction_site_photo_rows \ + admin_meeting_logs meeting_minutes meeting_minute_segments \ + interview_knowledge \ + | mysql -u codebridge -p codebridge ``` -**2단계: .env 설정** +**3단계: .env 설정** ```bash echo 'CODEBRIDGE_DB_DATABASE=codebridge' >> /home/webservice/mng/.env cd /home/webservice/mng && php artisan config:clear ``` -**3단계: MNG 웹 동작 확인** +**4단계: MNG 코드 재배포 (main cherry-pick)** -codebridge connection이 활성화되므로 MNG 관리자 페이지에서 영업관리, 설비, 재무 등 주요 메뉴 동작 확인. +> develop에 codebridge 코드가 있으므로, revert 커밋 이후 develop의 최신 커밋을 cherry-pick. +> 또는 develop의 해당 커밋을 다시 cherry-pick하여 main에 push. -**4단계: samdb에서 59개 테이블 삭제 (선택)** +```bash +# 로컬에서 실행 +cd /home/aweso/sam/mng +git checkout main && git pull origin main +git cherry-pick +git push origin main +git checkout develop +``` -개발 서버에서 검증 완료 후, 운영 서버에서도 삭제하여 실질적 분리 완성. +**5단계: 동작 확인 + samdb 테이블 삭제 (선택)** + +MNG 관리자 페이지에서 영업관리, 설비, 재무 등 주요 메뉴 동작 확인 후, 문제없으면 sam DB에서 59개 테이블 삭제. ```sql SET FOREIGN_KEY_CHECKS = 0; -DROP TABLE IF EXISTS [59개 테이블 목록]; +DROP TABLE IF EXISTS + admin_api_flows, admin_api_flow_runs, + admin_pm_daily_logs, admin_pm_daily_log_entries, admin_pm_issues, admin_pm_projects, admin_pm_tasks, + admin_roadmap_milestones, admin_roadmap_plans, + admin_api_bookmarks, admin_api_deprecations, admin_api_environments, admin_api_histories, admin_api_templates, + 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, + condolence_expenses, consulting_fees, corporate_cards, corporate_card_prepayments, + customer_settlements, daily_fund_memos, daily_fund_transactions, incomes, vat_records, + esign_field_templates, esign_field_template_items, + equipments, equipment_process, equipment_inspections, equipment_inspection_details, + equipment_inspection_templates, equipment_repairs, + business_income_payments, ai_configs, + biz_cert, cm_songs, construction_site_photos, construction_site_photo_rows, + admin_meeting_logs, meeting_minutes, meeting_minute_segments, + interview_knowledge; SET FOREIGN_KEY_CHECKS = 1; ``` -> **주의**: 2단계 전에 1단계가 완료되어야 한다. DB가 없는 상태에서 .env를 설정하면 MNG 페이지 접속 불가. -> **코드 배포**: 이미 main에 59개 모델의 `$connection = 'codebridge'` 코드가 반영됨. .env에 `CODEBRIDGE_DB_DATABASE`가 없으면 기본값 'codebridge'가 사용되므로, DB가 존재하지 않으면 에러 발생. 반드시 1단계 먼저 완료할 것. +> **⚠️ 핵심 주의사항**: +> - 반드시 **1→2→3→4** 순서 (DB 먼저, 코드 나중) +> - 4단계(코드 배포) 전에 3단계(.env)까지 완료되어야 함 +> - 5단계(samdb 삭제)는 4단계 동작 확인 후 선택적 수행 --- @@ -376,4 +440,4 @@ SET FOREIGN_KEY_CHECKS = 1; --- -**최종 업데이트**: 2026-03-09 +**최종 업데이트**: 2026-03-09 (운영 revert 반영, 적용 절차 5단계로 개정)