Revert "feat: DB 연결 오버라이딩 및 대시보드 통계 위젯 추가"
This reverts commit bf8036a64b.
This commit is contained in:
142
CURRENT_WORKS.md
142
CURRENT_WORKS.md
@@ -1,55 +1,117 @@
|
||||
# SAM API 저장소 작업 현황
|
||||
|
||||
## 2025-09-30 (월) - DB 연결 환경변수 오버라이딩 설정
|
||||
## 2025-09-24 (화) - FK 제약조건 최적화 및 데이터베이스 성능 개선
|
||||
|
||||
### 주요 작업
|
||||
- 로컬/Docker 환경 DB 연결 오버라이딩 설정
|
||||
- 데이터베이스 FK 제약조건 분석 및 최적화
|
||||
- 성능과 관리 편의성을 위한 비중요 FK 제거
|
||||
- 3단계 점진적 FK 제거 마이그레이션 구현
|
||||
|
||||
### 수정된 파일
|
||||
### 추가된 파일:
|
||||
- `database/migrations/2025_09_24_214146_remove_non_critical_foreign_keys_phase1.php` - 1차 FK 제거 (Classifications, Departments)
|
||||
- `database/migrations/2025_09_24_214200_remove_estimate_foreign_keys_phase2.php` - 2차 FK 제거 (견적 시스템)
|
||||
- `database/migrations/2025_09_24_214300_remove_material_foreign_key_phase3.php` - 3차 FK 제거 (제품-자재 관계)
|
||||
- `CURRENT_WORKS.md` - 저장소별 작업 현황 추적
|
||||
|
||||
#### 환경 설정
|
||||
- `.env` (라인 29) - DB_HOST 로컬 설정 (127.0.0.1)
|
||||
- 기존: `DB_HOST=${DB_HOST:-mysql}` (환경변수 파싱 오류)
|
||||
- 변경: `DB_HOST=127.0.0.1` (로컬 MySQL 컨테이너 접근)
|
||||
- Docker 환경은 docker-compose.yml에서 자동 오버라이드
|
||||
### 수정된 파일:
|
||||
- `CLAUDE.md` - CURRENT_WORKS.md 파일 위치 규칙 명확화
|
||||
- `database/migrations/2025_09_24_000002_create_dynamic_estimate_fields.php` - level 컬럼 제거로 마이그레이션 오류 해결
|
||||
|
||||
### 작업 내용
|
||||
### 작업 내용:
|
||||
|
||||
#### DB 연결 오류 해결
|
||||
**문제**:
|
||||
- `.env` 파일의 `${DB_HOST:-mysql}` 형식이 Laravel에서 리터럴 문자열로 인식
|
||||
- 에러: `php_network_getaddresses: getaddrinfo for ${DB_HOST failed`
|
||||
#### 1. FK 제약조건 현황 분석
|
||||
- 현재 8개 마이그레이션에서 FK 제약조건 사용 확인
|
||||
- 권한 관리, 제품/자재 관리, 견적 시스템, 기타 시스템별 분류
|
||||
- 총 15+개의 FK 제약조건 식별
|
||||
|
||||
**해결**:
|
||||
1. `.env`: `DB_HOST=127.0.0.1` (로컬 기본값)
|
||||
2. `docker-compose.yml`: 환경변수 `DB_HOST=mysql`로 오버라이드
|
||||
3. 로컬/Docker 모두 정상 연결 확인
|
||||
#### 2. 중요도별 테이블 분류
|
||||
**🔴 핵심 테이블 (FK 유지 필수):**
|
||||
- 인증/권한 시스템: users, roles, permissions 관계
|
||||
- 제품/BOM 관리 핵심: products.category_id, product_components 내부 관계
|
||||
- 멀티테넌트 핵심: 모든 tenant_id 참조
|
||||
|
||||
#### 환경변수 오버라이딩 구조
|
||||
**로컬 실행 시** (`php artisan serve`):
|
||||
- `.env`의 `DB_HOST=127.0.0.1` 사용
|
||||
- 호스트에서 MySQL 컨테이너 포트 3306으로 직접 접근
|
||||
**🟡 중요 테이블 (FK 선택적 유지):**
|
||||
- 견적 시스템: estimates, estimate_items 관계
|
||||
- 자재 관리: product_components.material_id
|
||||
|
||||
**Docker 컨테이너 실행 시**:
|
||||
- docker-compose.yml 환경변수가 `.env` 값을 오버라이드
|
||||
- `DB_HOST=mysql`로 컨테이너 간 통신
|
||||
- `samnet` 네트워크를 통한 내부 DNS 해석
|
||||
**🟢 일반 테이블 (FK 제거 권장):**
|
||||
- 분류/코드 관리: classifications.tenant_id
|
||||
- 부서 관리: departments.parent_id (자기참조)
|
||||
- 감사 로그: 모든 audit 관련 FK
|
||||
|
||||
### 품질 검증
|
||||
- ✅ 로컬 DB 연결: `php artisan tinker` 정상 작동
|
||||
- ✅ Docker DB 연결: 컨테이너 내부 연결 확인
|
||||
- ✅ 마이그레이션: `php artisan migrate:status` 성공
|
||||
- ✅ Tinker 테스트: `DB::connection()->getPdo()` 성공
|
||||
#### 3. 코드 영향도 분석 결과
|
||||
**✅ 중요 결론: 모델/컨트롤러/서비스 코드 수정 불필요!**
|
||||
- Laravel Eloquent 관계가 FK 제약조건과 독립적으로 작동
|
||||
- 현재 코드가 CASCADE 동작에 의존하지 않음
|
||||
- BelongsToTenant 트레잇과 소프트 딜리트로 무결성 관리
|
||||
- 비즈니스 로직이 애플리케이션 레벨에서 처리됨
|
||||
|
||||
### 현재 상태
|
||||
- ✅ API 서버 정상 작동
|
||||
- ✅ 로컬/Docker DB 연결 안정화
|
||||
- ✅ Swagger 문서 정상 접근 가능
|
||||
- ⚠️ Parameter-based BOM 파일들 untracked 상태 (개발 진행 중)
|
||||
#### 4. 3단계 점진적 FK 제거 전략
|
||||
|
||||
### 참고사항
|
||||
- API는 DB 스키마 관리 주체이므로 모든 마이그레이션은 API에서만 실행
|
||||
- Admin/Front는 데이터 CRUD만 가능, 테이블/컬럼 작업 금지
|
||||
**Phase 1 (즉시 적용 가능):**
|
||||
- `classifications.tenant_id` → `tenants`
|
||||
- `departments.parent_id` → `departments` (자기참조)
|
||||
- 영향도: 낮음, 관리 편의성 증가
|
||||
|
||||
---
|
||||
**업데이트**: 2025-09-30 23:30 KST
|
||||
**Phase 2 (견적 시스템):**
|
||||
- `estimates.model_set_id` → `categories`
|
||||
- `estimate_items.estimate_id` → `estimates`
|
||||
- 영향도: 중간, 성능 향상 효과
|
||||
- 멀티테넌트 보안 FK는 유지
|
||||
|
||||
**Phase 3 (신중한 검토 필요):**
|
||||
- `product_components.material_id` → `materials`
|
||||
- 영향도: 중간, 자재 관리 유연성 증가
|
||||
- 핵심 제품 관계 FK는 유지
|
||||
|
||||
#### 5. 마이그레이션 특징
|
||||
- 동적 FK 이름 탐지로 안전한 제거
|
||||
- 성능을 위한 인덱스 유지/추가
|
||||
- 상세한 진행 상황 로깅
|
||||
- 완전한 롤백 기능
|
||||
- 각 단계별 영향도와 주의사항 문서화
|
||||
|
||||
### 데이터베이스 마이그레이션 상태:
|
||||
- 기존 마이그레이션 오류 해결 완료 (level 컬럼 이슈)
|
||||
- 새로운 FK 제거 마이그레이션 3개 생성
|
||||
- 롤백 가능한 안전한 구조로 설계
|
||||
|
||||
### 예상 효과:
|
||||
1. **성능 향상**: 견적 시스템과 분류 관리에서 FK 검증 오버헤드 제거
|
||||
2. **관리 편의성**: 부서 구조 변경, 자재 관리 시 유연성 증가
|
||||
3. **개발 생산성**: 데이터 변경 시 FK 제약 에러 감소
|
||||
4. **확장성**: 향후 시스템 확장 시 유연한 스키마 변경 가능
|
||||
|
||||
### 향후 작업:
|
||||
1. Phase 1 마이그레이션 개발 서버 테스트
|
||||
2. 각 단계별 성능 영향 모니터링
|
||||
3. Service 레벨에서 데이터 무결성 검증 로직 보강 검토
|
||||
4. 프로덕션 적용 전 백업 및 롤백 계획 수립
|
||||
|
||||
### 논리적 관계 자동화 시스템 구축:
|
||||
- **자동화 도구 4개 생성**: 관계 문서 생성/업데이트/모델생성 명령어
|
||||
- **Provider 시스템**: 마이그레이션 후 자동 문서 업데이트
|
||||
- **간소화 문서**: 즉시 사용 가능한 관계 문서 생성 (LOGICAL_RELATIONSHIPS_SIMPLE.md)
|
||||
|
||||
### 새로운 명령어:
|
||||
- `php artisan db:update-relationships` - 모델에서 관계 자동 추출
|
||||
- `php artisan db:generate-simple-relationships` - 기본 관계 문서 생성
|
||||
- `php artisan make:model-with-docs` - 모델 생성 후 관계 문서 자동 업데이트
|
||||
|
||||
### ERD 생성 시스템:
|
||||
- **ERD 생성 도구**: beyondcode/laravel-er-diagram-generator 활용
|
||||
- **GraphViz 설치**: `brew install graphviz`로 dot 명령어 지원
|
||||
- **모델 오류 해결**: BelongsToTenantTrait → BelongsToTenant 수정
|
||||
- **생성 결과**: 60개 모델의 완전한 관계도 생성 (`graph.png`, 4.1MB)
|
||||
- **명령어**: `php artisan generate:erd --format=png`
|
||||
|
||||
### 예상 효과 (업데이트):
|
||||
1. **시각화 개선**: 복잡한 다중 테넌트 구조의 시각적 이해 향상
|
||||
2. **개발 생산성**: ERD를 통한 빠른 스키마 파악 및 설계 검증
|
||||
3. **문서화 자동화**: 스키마 변경 시 ERD 자동 업데이트 가능
|
||||
4. **기존 효과 유지**: 성능 향상, 관리 편의성, 확장성은 FK 제거로 달성
|
||||
|
||||
### Git 커밋:
|
||||
- `cfd4c25` - fix: categories 테이블 level 컬럼 제거로 마이그레이션 오류 해결
|
||||
- `7dafab3` - docs: CURRENT_WORKS.md 파일 위치 규칙 명확화
|
||||
- `c63e676` - feat: 데이터베이스 FK 제약조건 최적화 및 3단계 마이그레이션 구현
|
||||
Reference in New Issue
Block a user