2026-03-20 15:04:35 +09:00
|
|
|
# 일일업무일지 codebridge DB 이관 누락 수정
|
|
|
|
|
|
|
|
|
|
**날짜:** 2026-03-20
|
|
|
|
|
**작업자:** Claude Code
|
2026-03-20 15:12:54 +09:00
|
|
|
**상태:** ✅ 완료 (운영서버 적용 완료)
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
## 변경 개요
|
|
|
|
|
|
|
|
|
|
운영서버 MNG 일일업무일지 데이터가 조회/저장 불가 상태 발생.
|
2026-03-20 15:12:54 +09:00
|
|
|
원인은 DB 이관 마이그레이션(`2026_03_19_200000`)에서 `daily_work_logs` 테이블이 이관 대상(`existingTables`)에서 누락된 것.
|
|
|
|
|
|
|
|
|
|
---
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
## 원인 분석
|
|
|
|
|
|
|
|
|
|
### 발생 경위
|
|
|
|
|
|
2026-03-20 15:12:54 +09:00
|
|
|
1. MNG 모델 `DailyWorkLog`의 `$connection`이 `codebridge`로 변경됨 (MNG 커밋 `82adb7a3`)
|
2026-03-20 15:04:35 +09:00
|
|
|
2. `2026_03_19_200000_migrate_mng_tables_to_codebridge.php` 마이그레이션에서:
|
2026-03-20 15:12:54 +09:00
|
|
|
- codebridge DB에 빈 `daily_work_logs`, `daily_work_log_items` 테이블 스키마 생성 ✅
|
2026-03-20 15:04:35 +09:00
|
|
|
- `existingTables` 배열에 `daily_work_logs` 미포함 → **데이터 미이관** ❌
|
2026-03-20 15:12:54 +09:00
|
|
|
3. MNG 코드(모델 connection 변경)는 운영서버에 배포 완료, API 마이그레이션은 미실행 상태
|
|
|
|
|
4. 결과: MNG가 codebridge DB를 바라보지만 테이블/데이터 없음 → 조회 빈 결과, 저장 에러
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
### 영향 범위
|
|
|
|
|
|
2026-03-20 15:12:54 +09:00
|
|
|
| 환경 | 이관 전 상태 |
|
2026-03-20 15:04:35 +09:00
|
|
|
|------|------|
|
2026-03-20 15:12:54 +09:00
|
|
|
| 운영서버 sam DB | `daily_work_logs` 24건, `daily_work_log_items` 120건 (데이터 보존 상태) |
|
2026-03-20 15:04:35 +09:00
|
|
|
| 운영서버 codebridge DB | 테이블 미존재 (마이그레이션 미실행) |
|
2026-03-20 15:12:54 +09:00
|
|
|
| 개발서버 codebridge DB | 빈 테이블만 존재 (기존 데이터 없었음) |
|
|
|
|
|
|
|
|
|
|
### 증상
|
|
|
|
|
|
|
|
|
|
- 일일업무일지 화면에서 데이터가 전부 사라진 것처럼 보임
|
|
|
|
|
- 저장 버튼 클릭 시 저장 실패 (codebridge DB에 테이블 없음)
|
|
|
|
|
|
|
|
|
|
---
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
## 수정 내용
|
|
|
|
|
|
|
|
|
|
### 새 마이그레이션 추가
|
|
|
|
|
|
|
|
|
|
**파일**: `api/database/migrations/2026_03_20_120000_migrate_daily_work_logs_to_codebridge.php`
|
|
|
|
|
|
|
|
|
|
**동작 순서:**
|
2026-03-20 15:12:54 +09:00
|
|
|
1. **Phase 1** (복사): sam → codebridge 데이터 복사 (부모 `daily_work_logs` → 자식 `daily_work_log_items` 순서)
|
|
|
|
|
- sam DB에 테이블 없으면 스킵
|
2026-03-20 15:04:35 +09:00
|
|
|
- codebridge에 이미 데이터가 있으면 중복 방지로 스킵
|
2026-03-20 15:12:54 +09:00
|
|
|
- 복사 후 건수 검증 — 불일치 시 예외 발생(롤백)
|
|
|
|
|
2. **Phase 2** (삭제): sam 테이블 삭제 (자식 → 부모 역순, FK 안전)
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
## 배포 이력
|
|
|
|
|
|
|
|
|
|
### 1. 개발서버 (자동 배포)
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
API develop push → Jenkins 자동 배포 → migrate 실행
|
|
|
|
|
결과: sam에 테이블 없으므로 스킵 (정상)
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 2. 운영서버 (수동 적용)
|
2026-03-20 15:04:35 +09:00
|
|
|
|
2026-03-20 15:12:54 +09:00
|
|
|
Jenkins 자동 배포가 트리거되지 않아 수동 적용:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 마이그레이션 파일 2개를 scp로 운영서버에 복사
|
|
|
|
|
scp → /tmp/ → sudo cp → /home/webservice/api/current/database/migrations/
|
|
|
|
|
|
|
|
|
|
# 마이그레이션 실행
|
|
|
|
|
cd /home/webservice/api/current && php artisan migrate --force
|
|
|
|
|
|
|
|
|
|
# 실행 결과:
|
|
|
|
|
# 2026_03_19_200000_migrate_mng_tables_to_codebridge ......... 3초 DONE
|
|
|
|
|
# 2026_03_20_120000_migrate_daily_work_logs_to_codebridge ... 97ms DONE
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### 3. 이관 결과 검증
|
|
|
|
|
|
|
|
|
|
| 항목 | 결과 |
|
|
|
|
|
|------|------|
|
|
|
|
|
| codebridge.daily_work_logs | **24건** 이관 완료 |
|
|
|
|
|
| codebridge.daily_work_log_items | **120건** 이관 완료 |
|
|
|
|
|
| sam.daily_work_logs | 삭제 완료 (테이블 제거됨) |
|
|
|
|
|
| sam.daily_work_log_items | 삭제 완료 (테이블 제거됨) |
|
|
|
|
|
|
|
|
|
|
---
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
## 수정된 파일
|
|
|
|
|
|
|
|
|
|
| 파일 | 변경 내용 |
|
|
|
|
|
|------|----------|
|
|
|
|
|
| `api/database/migrations/2026_03_20_120000_migrate_daily_work_logs_to_codebridge.php` | 신규 — daily_work_logs 데이터 이관 마이그레이션 |
|
|
|
|
|
|
2026-03-20 15:12:54 +09:00
|
|
|
## 확인 체크리스트
|
|
|
|
|
|
|
|
|
|
- [x] 운영서버 API `php artisan migrate --force` 실행
|
|
|
|
|
- [x] codebridge DB 데이터 건수 검증 (24건 logs + 120건 items)
|
|
|
|
|
- [x] sam DB 원본 테이블 삭제 확인
|
|
|
|
|
- [ ] MNG 일일업무일지 데이터 조회 확인 (사용자 확인 필요)
|
|
|
|
|
- [ ] MNG 일일업무일지 저장 기능 확인 (사용자 확인 필요)
|
|
|
|
|
|
|
|
|
|
## 교훈
|
2026-03-20 15:04:35 +09:00
|
|
|
|
2026-03-20 15:12:54 +09:00
|
|
|
> DB 이관 마이그레이션 작성 시 `existingTables` 배열에 **모든 이관 대상 테이블**이 포함되었는지 반드시 검증할 것.
|
|
|
|
|
> 모델의 `$connection` 변경과 데이터 이관 마이그레이션은 **동일 배포**에서 함께 실행되어야 불일치가 발생하지 않는다.
|
2026-03-20 15:04:35 +09:00
|
|
|
|
|
|
|
|
## 관련 문서
|
|
|
|
|
|
|
|
|
|
- [20260319_db_codebridge_migration_and_fixes.md](20260319_db_codebridge_migration_and_fixes.md) — 원본 이관 마이그레이션
|