# DB 정리 작업 로그 (2026-01-20) ## 작업 개요 - **작업일**: 2026-01-20 - **작업자**: AI Assistant (Claude) - **대상 DB**: postgresql://39.117.244.52:11132/plm - **백업 파일**: `/db/plm_full_backup_20260120_182421.dump` (5.3MB) --- ## 작업 결과 요약 | 구분 | 정리 전 | 정리 후 | 변동 | |------|---------|---------|------| | 테이블 수 | 336개 | 206개 | -130개 | | table_type_columns | 3,307개 | 3,307개 | 0 (복원됨) | | **FK 제약조건** | **119개** | **0개** | **-119개** | --- ## 삭제된 테이블 목록 (130개) ### 1. 백업/날짜 패턴 테이블 (6개) ``` item_info_20251202 item_info_20251202_log order_table_20251201 purchase_order_master_241216 q20251001 sales_bom_report_part_241218 ``` ### 2. 테스트 테이블 (3개) ``` copy_table my_custom_table writer_test_table ``` ### 3. PMS 레거시 (14개) ``` pms_invest_cost_mng pms_pjt_concept_info pms_pjt_info pms_pjt_year_goal pms_rel_pjt_concept_milestone pms_rel_pjt_concept_prod pms_rel_pjt_prod pms_rel_prod_ref_dept pms_wbs_task pms_wbs_task_confirm pms_wbs_task_info pms_wbs_task_standard pms_wbs_task_standard2 pms_wbs_template ``` ### 4. profit_loss 관련 (12개) ``` profit_loss profit_loss_coefficient profit_loss_coolingtime profit_loss_depth profit_loss_lossrate profit_loss_machine profit_loss_pretime profit_loss_srrate profit_loss_total profit_loss_total_addlist profit_loss_total_addlist2 profit_loss_weight ``` ### 5. OEM 관련 (3개) ``` oem_factory_mng oem_milestone_mng oem_mng ``` ### 6. 기타 레거시 (4개) ``` chartmgmt counselingmgmt inboxtask klbom_tbl nswos100_tbl (table_type_columns에 등록되어 있었으나 2개 컬럼뿐이라 유지 안함) ``` ### 7. 미사용 비즈니스 테이블 (약 90개) 계약/견적, 고객/서비스, 자재/제품, 주문/발주, 생산/BOM, 출하/배송, 영업, 공급업체 관련 테이블들 --- ## 복원된 테이블 (7개) `table_type_columns`에 등록되어 있어서 복원한 테이블: | 테이블 | 컬럼 정의 수 | 데이터 | |--------|-------------|--------| | purchase_order_master | 112개 | 0건 | | production_record | 24개 | 0건 | | dtg_maintenance_history | 30개 | 0건 | | inspection_equipment_mng | 12개 | 0건 | | shipment_instruction | 21개 | 0건 | | work_order | 24개 | 0건 | | work_orders | 42개 | 0건 | --- ## FK 제약조건 전체 제거 (119개) ### 제거 이유 1. **로우코드 플랫폼 특성**: 동적으로 테이블/관계 생성되므로 DB FK가 방해됨 2. **앱 레벨 관계 관리**: `cascading_relation`, `screen_field_joins`에서 관리 3. **코드에서 JOIN 처리**: SQL JOIN으로 직접 처리 4. **삭제 유연성**: MES 공정 등에서 FK로 인한 삭제 불가 문제 해결 ### 제거된 FK 유형 - `→ company_mng.company_code`: 약 30개 (멀티테넌시용) - `flow_*` 관련: 약 15개 - `screen_*` 관련: 약 15개 - `batch_*`, `cascading_*`, `dashboard_*` 등 시스템용: 약 60개 ### 주의사항 - 앱 레벨에서 참조 무결성 체크 필요 - 고아 데이터 관리 로직 필요 - `cascading_relation` 활용 권장 --- ## 중요 유의사항 ### 1. table_type_columns 관련 - **절대 함부로 정리하지 말 것!** - 이 테이블은 **로우코드 플랫폼의 가상 테이블 정의**를 저장 - 실제 DB 테이블과 **무관한 독립적인 메타데이터** - `/admin/systemMng/tableMngList` 페이지에서 관리하는 데이터 - 잘못 삭제 후 덤프에서 복원함 (3,307개 레코드) ### 2. 삭제 전 체크리스트 테이블 삭제 전 반드시 확인할 것: 1. **table_type_columns에 등록 여부** - 등록되어 있으면 삭제 금지 2. **screen_definitions에서 사용 여부** - 화면에서 사용 중이면 삭제 금지 3. **백엔드 코드 사용 여부** - Grep 검색으로 확인 4. **프론트엔드 코드 사용 여부** - Grep 검색으로 확인 5. **wace 작성자 데이터 여부** - 신규 시스템에서 생성된 데이터인지 확인 6. **덕일 DB 비교** - 덕일에 있으면 레거시 가능성 높음 ### 3. 덕일 DB 정보 - 구시스템 (Java 기반) - 연결 정보: `jdbc:postgresql://59.13.244.189:5432/duckil` - 322개 테이블 보유 - 현재 DB와 교집합: 17개 테이블 (핵심 시스템 테이블) ### 4. 복원 방법 ```bash # 전체 복원 docker run --rm --network host -v /Users/gbpark/ERP-node/db:/backup postgres:16 \ pg_restore --clean --if-exists --no-owner --no-privileges \ -d "postgresql://postgres:ph0909!!@39.117.244.52:11132/plm" \ /backup/plm_full_backup_20260120_182421.dump # 특정 테이블만 복원 docker run --rm --network host -v /Users/gbpark/ERP-node/db:/backup postgres:16 \ pg_restore -t "테이블명" --no-owner --no-privileges \ -d "postgresql://postgres:ph0909!!@39.117.244.52:11132/plm" \ /backup/plm_full_backup_20260120_182421.dump ``` --- ## 현재 DB 현황 ### 테이블 분류 - **총 테이블**: 206개 - **table_type_columns 등록**: 98개 - **화면에서 사용**: 약 70개 - **wace 데이터 있음**: 75개 ### 추가 검토 필요 테이블 다음 테이블들은 데이터가 있지만 코드/화면에서 미사용: - `sales_bom_part_qty` (404건) - 2022년 데이터 - `sales_bom_report` (1,116건) - `sales_long_delivery_input` (1,588건) - `sales_part_chg` (248건) - `sales_request_part` (25건) → 삭제 전 업무 담당자 확인 필요 --- ## 변경 이력 | 시간 | 작업 | 비고 | |------|------|------| | 18:21 | 스키마 덤프 생성 | plm_schema_20260120.sql | | 18:24 | 전체 덤프 생성 | plm_full_backup_20260120_182421.dump | | 18:25 | 1차 삭제 (115개) | 백업/테스트/레거시 테이블 | | 18:26 | table_type_columns 정리 | 686개 레코드 삭제 (잘못된 작업) | | 18:35 | 2차 삭제 (21개) | 미사용 비즈니스 테이블 | | 18:36 | table_type_columns 추가 정리 | 153개 레코드 삭제 (잘못된 작업) | | 18:50 | table_type_columns 복원 | 3,307개 레코드 복원 | | 19:05 | 7개 테이블 복원 | table_type_columns에 등록된 테이블 복원 | | 19:45 | **FK 전체 제거** | 119개 Foreign Key 제약조건 삭제 | | 20:15 | **미사용 배치 테이블 삭제** | batch_jobs(5건), batch_schedules, batch_job_executions, batch_job_parameters | | 20:25 | **중복 external_db 테이블 정리** | external_db_connection(단수형) 삭제 + flowExecutionService.ts 코드 수정 | | 20:35 | **레거시 comm 테이블 삭제** | comm_code(752건), comm_code_history(1720건), comm_exchange_rate(4건) + referenceCacheService.ts 정리 | | 20:50 | **미사용 0건 테이블 삭제** | defect_standard_mng_log, file_down_log, inspection_equipment_mng_log, sales_order_detail_log, work_instruction_log, work_instruction_detail_log, dashboard_shares, dashboard_slider_items, dashboard_sliders, category_column_mapping_test (10개) | | 21:00 | **미사용 테이블 추가 삭제** | dataflow_external_calls, external_call_logs, mail_log (3개) | | 21:10 | **미구현 기능 테이블 삭제** | flow_external_connection_permission | | 21:20 | **미사용 테이블 삭제** | category_values_test(11건), ratecal_mgmt(2건) | | 21:40 | **레거시 테이블 삭제 (13개)** | sales_*, drivers, dtg_*, time_sheet 등 (총 3,612건) | | 22:00 | **미사용 0건 테이블 삭제 (6개)** | cascading_reverse_lookup, cascading_multi_parent*, category_values_test, screen_widgets, screen_group_members | | 22:15 | **미사용 0건 테이블 삭제 (2개)** | collection_batch_executions, collection_batch_management | | 22:30 | **레거시 테이블 삭제 (1개)** | customer_service_workingtime (5건, 2023년 데이터) | --- ## 삭제된 레거시 테이블 (2026-01-22 추가) 코드 미사용 + TTC/SD 미등록 + 레거시 데이터(wace 아님) 13개: | 테이블 | 데이터 | 작성자 | |--------|--------|--------| | sales_long_delivery_input | 1,588건 | 레거시 | | sales_bom_report | 1,116건 | plm_admin 등 | | sales_bom_part_qty | 404건 | 레거시 | | sales_part_chg | 248건 | hosang.park 등 | | time_sheet | 155건 | 레거시 | | sales_request_part | 25건 | plm_admin 등 | | supply_mng | 24건 | 레거시 | | work_request | 12건 | 레거시 | | dtg_monthly_settlements | 10건 | admin | | used_mng | 10건 | plm_admin | | drivers | 9건 | 레거시 | | input_resource | 8건 | plm_admin | | dtg_contracts | 3건 | admin | --- ## 작업자 메모 1. `table_type_columns`는 로우코드 플랫폼의 핵심 메타데이터 테이블 2. 실제 DB 테이블 삭제와 `table_type_columns` 레코드는 별개로 관리해야 함 3. 앞으로 DB 정리 시 `table_type_columns` 등록 여부를 **가장 먼저** 확인할 것 4. 덤프 파일은 최소 1개월간 보관 권장 5. pg_stat_user_tables의 n_live_tup 값은 부정확할 수 있음 - 실제 COUNT(*) 확인 필수 ### production_task (2026-01-22 22:50) - **데이터**: 336건 (2021년 3월~5월) - **작성자**: esshin, plm_admin (레거시) - **TTC/SD**: 미등록/미사용 - **코드 사용**: 없음 (문서만) - **삭제 사유**: 5년 전 레거시 데이터 --- ## 2026-01-22 최종 정리 완료 ### 미사용 테이블 분석 결과 - **0건 + TTC/SD 미등록 테이블**: 18개 → **전부 코드에서 사용 중** (삭제 불가) - **현재 총 테이블**: 164개 - **추가 삭제 대상**: 없음 ### 생성된 문서 - `DB_STRUCTURE_DIAGRAM.md`: 전체 DB 구조 및 ER 다이어그램 - 핵심 테이블 관계도 6개 섹션 - 코드 기반 JOIN 분석 완료 - Mermaid 다이어그램 포함 ### 정리 완료 요약 | 항목 | 수치 | |------|------| | 삭제된 테이블 | 약 50개+ | | 남은 테이블 | 164개 | | 활성 테이블 비율 | 100% |