Files
sam-api/CURRENT_WORKS.md

5.4 KiB

SAM API 저장소 작업 현황

2025-09-24 (화) - FK 제약조건 최적화 및 데이터베이스 성능 개선

주요 작업

  • 데이터베이스 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 - 저장소별 작업 현황 추적

수정된 파일:

  • CLAUDE.md - CURRENT_WORKS.md 파일 위치 규칙 명확화
  • database/migrations/2025_09_24_000002_create_dynamic_estimate_fields.php - level 컬럼 제거로 마이그레이션 오류 해결

작업 내용:

1. FK 제약조건 현황 분석

  • 현재 8개 마이그레이션에서 FK 제약조건 사용 확인
  • 권한 관리, 제품/자재 관리, 견적 시스템, 기타 시스템별 분류
  • 총 15+개의 FK 제약조건 식별

2. 중요도별 테이블 분류

🔴 핵심 테이블 (FK 유지 필수):

  • 인증/권한 시스템: users, roles, permissions 관계
  • 제품/BOM 관리 핵심: products.category_id, product_components 내부 관계
  • 멀티테넌트 핵심: 모든 tenant_id 참조

🟡 중요 테이블 (FK 선택적 유지):

  • 견적 시스템: estimates, estimate_items 관계
  • 자재 관리: product_components.material_id

🟢 일반 테이블 (FK 제거 권장):

  • 분류/코드 관리: classifications.tenant_id
  • 부서 관리: departments.parent_id (자기참조)
  • 감사 로그: 모든 audit 관련 FK

3. 코드 영향도 분석 결과

중요 결론: 모델/컨트롤러/서비스 코드 수정 불필요!

  • Laravel Eloquent 관계가 FK 제약조건과 독립적으로 작동
  • 현재 코드가 CASCADE 동작에 의존하지 않음
  • BelongsToTenant 트레잇과 소프트 딜리트로 무결성 관리
  • 비즈니스 로직이 애플리케이션 레벨에서 처리됨

4. 3단계 점진적 FK 제거 전략

Phase 1 (즉시 적용 가능):

  • classifications.tenant_idtenants
  • departments.parent_iddepartments (자기참조)
  • 영향도: 낮음, 관리 편의성 증가

Phase 2 (견적 시스템):

  • estimates.model_set_idcategories
  • estimate_items.estimate_idestimates
  • 영향도: 중간, 성능 향상 효과
  • 멀티테넌트 보안 FK는 유지

Phase 3 (신중한 검토 필요):

  • product_components.material_idmaterials
  • 영향도: 중간, 자재 관리 유연성 증가
  • 핵심 제품 관계 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단계 마이그레이션 구현