docs: [database] codebridge 분리 문서 최종 업데이트

- Equipment 하위 4개 테이블 추가 (55→59개)
- 개발 서버 samdb에서 59개 테이블 삭제 완료 반영
- 테이블명 불일치 수정 (api_bookmarks→admin_api_bookmarks 등)
- 운영 서버 적용 절차 4단계로 구체화
This commit is contained in:
김보곤
2026-03-09 21:02:50 +09:00
parent ec3abc1a85
commit 03ccd7ba93

View File

@@ -2,7 +2,7 @@
> **작성일**: 2026-03-07
> **상태**: 로컬/개발 서버 적용 완료, 운영 서버 미적용
> **최종 수정**: 2026-03-09 — API 사용 테이블 점검 완료, codebridge 이동 대상 100개 → 55개로 축소
> **최종 수정**: 2026-03-09 — API 사용 테이블 점검 완료, codebridge 이동 대상 100개 → 59개로 축소, 개발 서버 samdb에서 59개 테이블 삭제 완료
---
@@ -17,9 +17,10 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
### 1.2 핵심 원칙
- 기존 samdb 테이블**삭제하지 않는다** (복사만 수행)
- codebridge DB에 테이블을 복사한 후, samdb에서 해당 테이블**삭제**하여 실질적 분리
- MNG 모델에 `$connection = 'codebridge'`를 설정하여 읽기 대상 DB만 변경
- React/API 서비스에는 **영향 없음**
- 개발 서버: samdb에서 59개 테이블 삭제 완료 (백업: `/home/pro/backup/sam_backup_20260309.sql.gz`)
### 1.3 분리 기준
@@ -34,9 +35,10 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
---
## 2. codebridge 테이블 목록 (55개)
## 2. codebridge 테이블 목록 (59개)
> 2026-03-09 점검: API 프로젝트 전체 코드 조사를 통해 API에서 사용하는 22개 테이블을 제외함. 제외된 테이블은 [3절](#3-api-사용-테이블--samdb-유지-필수-22개) 참조.
> Equipment 하위 테이블 4개 추가 (FK 의존성으로 equipments와 동일 DB 필수).
### Admin (9)
@@ -54,13 +56,13 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
### DevTools (5)
| 테이블 | 설명 |
|--------|------|
| `api_bookmarks` | API 북마크 |
| `api_deprecations` | API 지원종료 관리 |
| `api_environments` | API 환경 설정 |
| `api_histories` | API 호출 이력 |
| `api_templates` | API 템플릿 |
| 테이블 | 설명 | 비고 |
|--------|------|------|
| `admin_api_bookmarks` | API 북마크 | 문서 기존명 `api_bookmarks` → 실제 테이블명 |
| `api_deprecations` | API 지원종료 관리 | |
| `api_environments` | API 환경 설정 | |
| `api_histories` | API 호출 이력 | |
| `api_templates` | API 템플릿 | |
### Sales (17)
@@ -107,12 +109,18 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
> esign_contracts, esign_audit_logs, esign_sign_fields, esign_signers는 API에서 전자계약 기능으로 사용 중 → samdb 유지
### Equipment (2)
### Equipment (6)
| 테이블 | 설명 |
|--------|------|
| `equipments` | 설비 |
| `equipment_processes` | 설비 공정 |
| `equipment_inspections` | 설비 점검 (FK → equipments) |
| `equipment_inspection_details` | 설비 점검 상세 (FK → equipment_inspections) |
| `equipment_inspection_templates` | 설비 점검 템플릿 (FK → equipments) |
| `equipment_repairs` | 설비 수리 (FK → equipments) |
> Equipment 하위 4개 테이블은 `equipments`에 FK 의존하므로 반드시 동일 DB에 있어야 한다.
### HR (1)
@@ -132,17 +140,17 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
### 기타 (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` | 매출 기록 |
| 테이블 | 설명 | 비고 |
|--------|------|------|
| `biz_cert` | 사업자등록증 | 문서 기존명 `biz_certs` → 실제 테이블명 (단수) |
| `cm_songs` | R&D 곡 관리 | |
| `construction_site_photos` | 시공 현장 사진 | |
| `construction_site_photo_rows` | 시공 사진 행 | |
| `admin_meeting_logs` | 회의 로그 | 문서 기존명 `meeting_logs` → 실제 테이블명 |
| `meeting_minutes` | 회의록 | |
| `meeting_minute_segments` | 회의록 세그먼트 | |
| `interview_knowledges` | 면접 지식 | |
| `sales_records` | 매출 기록 | |
---
@@ -212,15 +220,24 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
### 4.1 환경별 상태
| 환경 | codebridge DB | 테이블 복사 | .env 설정 | MNG 모델 적용 | 상태 |
|------|:---:|:---:|:---:|:---:|------|
| **로컬 Docker** | O | 55개 | O | O (develop) | 정상 작동 |
| **개발 서버** | O | 55개 | O | O (develop) | 정상 작동 |
| **운영 서버** | X | X | X | X (revert) | 미적용 (기존 samdb 사용) |
| 환경 | codebridge DB | 테이블 복사 | samdb 삭제 | .env 설정 | MNG 모델 적용 | 상태 |
|------|:---:|:---:|:---:|:---:|:---:|------|
| **로컬 Docker** | O | 59개 | 미수행 | O | O (develop) | 정상 작동 |
| **개발 서버** | O | 59개 | **59개 삭제 완료** | O | O (develop) | 정상 작동 |
| **운영 서버** | X | X | X | X | X (revert) | 미적용 (기존 samdb 사용) |
> **2026-03-09 정리**:
> - `finance_*` 17개 + `barobill_companies` 1개: 마이그레이션 없이 수동 생성된 테이블 → 삭제 완료
> - API 사용 테이블 22개: codebridge 이동 대상에서 제외 → samdb 유지 (MNG 모델의 `$connection = 'codebridge'` 제거 필요)
> **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 사용)
> - 백업: `/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` (단수형)
### 4.2 코드 변경 사항
@@ -244,7 +261,7 @@ SAM 프로젝트의 DB를 **서비스용**과 **내부 관리용**으로 분리
CODEBRIDGE_DB_DATABASE=codebridge
```
**MNG 모델**`$connection` 속성 추가 (codebridge 55개만):
**MNG 모델**`$connection` 속성 추가 (codebridge 59개만):
```php
class SalesPartner extends Model
@@ -257,13 +274,33 @@ class SalesPartner extends Model
> **주의**: API 사용 테이블 22개에 해당하는 MNG 모델은 `$connection = 'codebridge'`를 설정하지 않는다. 기본 samdb connection을 사용해야 API와 동일한 데이터를 참조한다.
### 4.3 samdb 테이블 삭제 절차 (개발 서버 완료)
> Sales 테이블 그룹은 FK 상호 참조가 있어 `FOREIGN_KEY_CHECKS = 0`으로 일괄 삭제.
```sql
-- FK 체크 비활성화 (Sales, Equipment 등 FK 체인 테이블)
SET FOREIGN_KEY_CHECKS = 0;
-- 59개 테이블 DROP (codebridge에 복제 완료 확인 후)
DROP TABLE IF EXISTS admin_api_flows, admin_api_flow_runs, ...;
SET FOREIGN_KEY_CHECKS = 1;
```
> **롤백**: 백업에서 특정 테이블만 복원 가능
> ```bash
> gunzip < /home/pro/backup/sam_backup_20260309.sql.gz | mysql -u codebridge -p sam
> ```
---
## 5. 운영 서버 적용 절차 (미완료)
> **전제**: 운영 서버 SSH 접근 + DB root 권한 필요
> **코드는 이미 main에 배포 완료** — 운영 서버에 codebridge DB만 생성하면 즉시 적용됨
### 순서 (반드시 1 → 2 → 3 순서로)
### 순서 (반드시 1 → 2 → 3 → 4 순서로)
**1단계: codebridge DB 생성 + 테이블 복사**
@@ -274,7 +311,7 @@ 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에서 55개 테이블 구조+데이터 복사 (mysqldump → import)
# sam에서 59개 테이블 구조+데이터 복사 (mysqldump → import)
mysqldump -u codebridge -p sam [테이블목록] | mysql -u codebridge -p codebridge
```
@@ -285,12 +322,22 @@ echo 'CODEBRIDGE_DB_DATABASE=codebridge' >> /home/webservice/mng/.env
cd /home/webservice/mng && php artisan config:clear
```
**3단계: 코드 배포 (main push)**
**3단계: MNG 웹 동작 확인**
MNG 코드(codebridge 55개 모델 `$connection` 변경)를 main에 cherry-pick + push.
Jenkins가 자동 배포.
codebridge connection이 활성화되므로 MNG 관리자 페이지에서 영업관리, 설비, 재무 등 주요 메뉴 동작 확인.
> **주의**: 3단계 전에 1, 2단계가 완료되어야 한다. DB가 없는 상태에서 코드를 배포하면 MNG 페이지 접속 불가.
**4단계: samdb에서 59개 테이블 삭제 (선택)**
개발 서버에서 검증 완료 후, 운영 서버에서도 삭제하여 실질적 분리 완성.
```sql
SET FOREIGN_KEY_CHECKS = 0;
DROP TABLE IF EXISTS [59 테이블 목록];
SET FOREIGN_KEY_CHECKS = 1;
```
> **주의**: 2단계 전에 1단계가 완료되어야 한다. DB가 없는 상태에서 .env를 설정하면 MNG 페이지 접속 불가.
> **코드 배포**: 이미 main에 59개 모델의 `$connection = 'codebridge'` 코드가 반영됨. .env에 `CODEBRIDGE_DB_DATABASE`가 없으면 기본값 'codebridge'가 사용되므로, DB가 존재하지 않으면 에러 발생. 반드시 1단계 먼저 완료할 것.
---
@@ -313,7 +360,7 @@ Jenkins가 자동 배포.
┌─────┴─────┐
| |
samdb codebridge
(공통 참조) (MNG 전용 55개)
(공통 참조) (MNG 전용 59개)
```
- **React → API → samdb**: 서비스 트래픽 (수주, 견적, 생산, 바로빌, 전자서명 등)