Files
sam-react-prod/claudedocs/archive/[PLAN-2025-11-21] component-separation.md
byeongcheolryu 65a8510c0b fix: 품목기준관리 실시간 동기화 수정
- BOM 항목 추가/수정/삭제 시 섹션탭 즉시 반영
- 섹션 복제 시 UI 즉시 업데이트 (null vs undefined 이슈 해결)
- 항목 수정 기능 추가 (useTemplateManagement)
- 실시간 동기화 문서 추가

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 22:19:50 +09:00

23 KiB
Raw Blame History

ItemMasterDataManagement.tsx 컴포넌트 분리 계획

작성일: 2025-11-18 원본 파일 크기: 5,231줄 현재 파일 크기: 3,254줄 (37.8% 절감!) 목표 파일 크기: 1,500-2,000줄 (60-65% 감소)


📊 현재 상태 분석

파일 구성

ItemMasterDataManagement.tsx (5,231줄)
├── State 선언 (121개 useState)
├── Handler 함수 (31개)
├── 유틸리티 함수 (59개)
├── TabsContent 블록들 (약 895줄)
│   ├── attributes (558줄) ✅ 분리 완료 → MasterFieldTab.tsx
│   ├── items (12줄)
│   ├── sections (242줄)
│   ├── hierarchy (43줄) ✅ 분리 완료 → HierarchyTab.tsx
│   └── categories (40줄) ✅ 분리 완료 → CategoryTab.tsx
└── Dialog/Drawer 블록들 (약 2,302줄, 18개)

이미 분리 완료된 컴포넌트

  1. CategoryTab.tsx (약 40줄)
  2. MasterFieldTab.tsx (약 558줄)
  3. HierarchyTab.tsx (약 43줄)

총 분리 완료: 약 641줄


🎯 분리 계획 상세

Phase 1: Dialog 컴포넌트 분리 (우선순위 1)

예상 절감: 약 2,300줄

1.1 필드 관리 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/FieldDialog.tsx
  • 위치: line 3647-4156 (약 510줄)
  • 기능: 필드 추가/편집
  • Props 필요:
    • isOpen, onOpenChange
    • selectedSection
    • editingFieldId
    • onSave (handleSaveField)
    • masterFields
    • fieldType states (name, key, inputType, etc.)

1.2 필드 드로어 (모바일)

src/components/items/ItemMasterDataManagement/dialogs/FieldDrawer.tsx
  • 위치: line 4157-4665 (약 508줄)
  • 기능: 모바일용 필드 편집 드로어
  • Props: FieldDialog와 동일

1.3 페이지 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/PageDialog.tsx
  • 위치: line 3559-3595 (약 36줄)
  • 기능: 페이지(섹션) 추가
  • Props:
    • isOpen, onOpenChange
    • onSave (handleAddPage)

1.4 섹션 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/SectionDialog.tsx
  • 위치: line 3596-3646 (약 50줄)
  • 기능: 하위섹션 추가
  • Props:
    • isOpen, onOpenChange
    • selectedPage
    • onSave (handleAddSection)

1.5 마스터 필드 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/MasterFieldDialog.tsx
  • 위치: line 4729-4908 (약 180줄)
  • 기능: 마스터 항목 추가/편집
  • Props:
    • isOpen, onOpenChange
    • editingMasterFieldId
    • onSave (handleSaveMasterField)
    • field states

1.6 섹션 템플릿 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/SectionTemplateDialog.tsx
  • 위치: line 4909-5005 (약 97줄)
  • 기능: 섹션 템플릿 생성
  • Props:
    • isOpen, onOpenChange
    • onSave (handleSaveTemplate)

1.7 템플릿 필드 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/TemplateFieldDialog.tsx
  • 위치: line 5006-5146 (약 141줄)
  • 기능: 템플릿 항목 추가/편집
  • Props:
    • isOpen, onOpenChange
    • currentTemplateId
    • editingTemplateFieldId
    • onSave

1.8 템플릿 불러오기 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/LoadTemplateDialog.tsx
  • 위치: line 5147-5230 (약 84줄)
  • 기능: 섹션 템플릿 불러오기
  • Props:
    • isOpen, onOpenChange
    • sectionTemplates
    • onLoad (handleLoadTemplate)

1.9 옵션 관리 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/OptionDialog.tsx
  • 위치: line 3236-3382 (약 147줄)
  • 기능: 단위/재질/표면처리 옵션 추가
  • Props:
    • isOpen, onOpenChange
    • optionType
    • onSave (handleAddOption)

1.10 칼럼 관리 다이얼로그들

src/components/items/ItemMasterDataManagement/dialogs/ColumnManageDialog.tsx
src/components/items/ItemMasterDataManagement/dialogs/ColumnDialog.tsx
  • 위치: line 3383-3518, 4666-4728 (약 210줄)
  • 기능: 칼럼 구조 관리
  • Props: 칼럼 관련 states 및 handlers

1.11 탭 관리 다이얼로그들

src/components/items/ItemMasterDataManagement/dialogs/TabManagementDialogs.tsx
  • 위치: line 2929-3235 (약 307줄)
  • 포함 다이얼로그:
    • ManageTabsDialog
    • DeleteTabDialog (AlertDialog)
    • AddTabDialog
    • ManageAttributeTabsDialog
    • DeleteAttributeTabDialog (AlertDialog)
    • AddAttributeTabDialog
  • Props: 탭 관련 모든 states 및 handlers

1.12 경로 편집 다이얼로그

src/components/items/ItemMasterDataManagement/dialogs/PathEditDialog.tsx
  • 위치: line 3519-3558 (약 40줄)
  • 기능: 절대경로 편집
  • Props:
    • editingPathPageId
    • onOpenChange, onSave

Phase 2: 타입 정의 분리 (우선순위 2) 순서 변경

예상 절감: 약 25줄 (수정됨) 변경 이유: 빠른 작업, 코드 정리 참고: 주요 타입들은 ItemMasterContext에 이미 정의되어 있음

src/components/items/ItemMasterDataManagement/types.ts

분리할 로컬 타입들 (3개)

  • ItemCategoryStructure - 품목 카테고리 구조 (4줄)
  • OptionColumn - 옵션 컬럼 타입 (7줄)
  • MasterOption - 마스터 옵션 타입 (14줄)

Context에서 이미 Import하는 타입들 (분리 불필요)

  • ItemPage, ItemSection, ItemField
  • FieldDisplayCondition, ItemMasterField
  • ItemFieldProperty, SectionTemplate

Phase 3: 추가 탭 컴포넌트 분리 (우선순위 3) 순서 변경

예상 절감: 약 254줄 변경 이유: 가시적 효과, Dialog 분리와 유사한 패턴

3.1 섹션 관리 탭

src/components/items/ItemMasterDataManagement/tabs/SectionsTab.tsx
  • 위치: line 2604-2846 (약 242줄)
  • 기능: 섹션 템플릿 관리
  • Props:
    • sectionTemplates
    • handlers (CRUD)

3.2 아이템 탭

src/components/items/ItemMasterDataManagement/tabs/ItemsTab.tsx
  • 위치: line 2592-2604 (약 12줄)
  • 기능: 아이템 목록 (단순)
  • Props: itemMasters

Phase 4: 유틸리티 & Hooks 통합 분리 (우선순위 4) Phase 통합

예상 절감: 약 900줄 (Utils 500줄 + Hooks 400줄) 변경 이유: 순수 Utils가 적음, Hooks와 함께 정리하는 게 효율적

4.1 Utils 파일 생성

src/components/items/ItemMasterDataManagement/utils/
├── pathUtils.ts - 경로 생성/관리 함수
├── fieldUtils.ts - 필드 생성/검증 함수
├── sectionUtils.ts - 섹션 관리 함수
└── validationUtils.ts - 유효성 검증 함수

주요 유틸리티 함수들:

  • generateAbsolutePath() - 절대경로 생성
  • generateFieldKey() - 필드 키 생성
  • validateField() - 필드 검증
  • findFieldByKey() - 필드 검색
  • 기타 순수 함수들

4.2 Custom Hooks 생성

src/components/items/ItemMasterDataManagement/hooks/
├── usePageManagement.ts - 페이지 관리 로직
├── useSectionManagement.ts - 섹션 관리 로직
├── useFieldManagement.ts - 필드 관리 로직
├── useTemplateManagement.ts - 템플릿 관리 로직
└── useTabManagement.ts - 탭 관리 로직

분리할 Handler들:

  • Page 관련 (5개): handleAddPage, handleDeletePage, handleUpdatePage, etc.
  • Section 관련 (8개): handleAddSection, handleDeleteSection, handleUpdateSection, etc.
  • Field 관련 (10개): handleAddField, handleEditField, handleDeleteField, etc.
  • Template 관련 (6개): handleSaveTemplate, handleLoadTemplate, etc.
  • Tab 관련 (6개): handleAddTab, handleDeleteTab, handleUpdateTab, etc.

📦 최종 디렉토리 구조

src/components/items/ItemMasterDataManagement/
├── index.tsx                      # 메인 컴포넌트 (약 1,500-2,000줄)
├── tabs/
│   ├── CategoryTab.tsx            # ✅ 완료 (40줄)
│   ├── MasterFieldTab.tsx         # ✅ 완료 (558줄)
│   ├── HierarchyTab.tsx           # ✅ 완료 (43줄)
│   ├── SectionsTab.tsx            # ⏳ 예정 (242줄)
│   └── ItemsTab.tsx               # ⏳ 예정 (12줄)
├── dialogs/
│   ├── FieldDialog.tsx            # ⏳ 예정 (510줄)
│   ├── FieldDrawer.tsx            # ⏳ 예정 (508줄)
│   ├── PageDialog.tsx             # ⏳ 예정 (36줄)
│   ├── SectionDialog.tsx          # ⏳ 예정 (50줄)
│   ├── MasterFieldDialog.tsx      # ⏳ 예정 (180줄)
│   ├── SectionTemplateDialog.tsx  # ⏳ 예정 (97줄)
│   ├── TemplateFieldDialog.tsx    # ⏳ 예정 (141줄)
│   ├── LoadTemplateDialog.tsx     # ⏳ 예정 (84줄)
│   ├── OptionDialog.tsx           # ⏳ 예정 (147줄)
│   ├── ColumnManageDialog.tsx     # ⏳ 예정 (100줄)
│   ├── ColumnDialog.tsx           # ⏳ 예정 (110줄)
│   ├── TabManagementDialogs.tsx   # ⏳ 예정 (307줄)
│   └── PathEditDialog.tsx         # ⏳ 예정 (40줄)
├── hooks/
│   ├── usePageManagement.ts       # ⏳ 예정
│   ├── useSectionManagement.ts    # ⏳ 예정
│   ├── useFieldManagement.ts      # ⏳ 예정
│   ├── useTemplateManagement.ts   # ⏳ 예정
│   └── useTabManagement.ts        # ⏳ 예정
├── utils/
│   ├── pathUtils.ts               # ⏳ 예정
│   ├── fieldUtils.ts              # ⏳ 예정
│   ├── sectionUtils.ts            # ⏳ 예정
│   └── validationUtils.ts         # ⏳ 예정
└── types.ts                       # ⏳ 예정 (200줄)

📈 예상 효과

파일 크기 변화 ( Phase 순서 변경됨)

단계 작업 예상 감소 누적 감소 남은 크기
시작 - - - 5,231줄
Phase 0 (완료) Tabs 분리 641줄 641줄 4,590줄
Phase 1 (완료) Dialogs 분리 1,977줄 2,618줄 2,613줄
Phase 2 (다음) Types 분리 200줄 2,818줄 2,413줄
Phase 3 추가 Tabs 254줄 3,072줄 2,159줄
Phase 4 Utils + Hooks 900줄 3,972줄 1,259줄

최종 목표

  • 메인 파일: 약 936-1,500줄 (현재 대비 70-82% 감소)
  • 분리된 컴포넌트: 13개 다이얼로그, 5개 탭, 5개 hooks, 4개 utils, 1개 types
  • 총 파일 수: 약 28개 파일

🚀 실행 계획

우선순위별 작업 순서

1단계: 대형 다이얼로그 분리 (즉시 시작)

# 가장 큰 것부터 분리
1. FieldDialog.tsx (510줄)
2. FieldDrawer.tsx (508줄)
3. TabManagementDialogs.tsx (307줄)
4. ColumnDialogs (210줄)
5. MasterFieldDialog.tsx (180줄)

예상 절감: 약 1,700줄

2단계: 나머지 다이얼로그 분리

6. OptionDialog.tsx (147줄)
7. TemplateFieldDialog.tsx (141줄)
8. SectionTemplateDialog.tsx (97줄)
9. LoadTemplateDialog.tsx (84줄)
10. SectionDialog.tsx (50줄)
11. PathEditDialog.tsx (40줄)
12. PageDialog.tsx (36줄)

예상 절감: 약 600줄

3단계: 유틸리티 함수 분리

- pathUtils.ts
- fieldUtils.ts
- sectionUtils.ts
- validationUtils.ts

예상 절감: 약 500줄

4단계: 타입 정의 분리

- types.ts

예상 절감: 약 200줄

5단계: Custom Hooks 분리

- usePageManagement.ts
- useSectionManagement.ts
- useFieldManagement.ts
- useTemplateManagement.ts
- useTabManagement.ts

예상 절감: 약 400줄


작업 체크리스트 (세션 중단 시 여기서 이어서 진행)

Phase 0: 기존 Tab 분리 (완료)

  • CategoryTab.tsx (40줄) - 완료
  • MasterFieldTab.tsx (558줄) - 완료
  • HierarchyTab.tsx (43줄) - 완료
  • 분리 계획 문서 작성 - 완료

Phase 1: Dialog 컴포넌트 분리 (2,300줄 절감 목표)

1-1. 디렉토리 구조 준비

  • dialogs/ 디렉토리 생성 - 완료

1-2. 대형 다이얼로그 (우선순위 최상)

  • FieldDialog.tsx (510줄) - line 3647-4156 - 완료 (462줄 절감)

    • 컴포넌트 추출 및 파일 생성
    • Props 인터페이스 정의
    • 메인 파일에서 import로 교체
    • 빌드 테스트 - 통과
  • FieldDrawer.tsx (508줄) - line 3696-4203 - 완료 (462줄 절감)

    • 컴포넌트 추출 및 파일 생성
    • Props 인터페이스 정의
    • 메인 파일에서 import로 교체
    • 빌드 테스트 - 통과
  • TabManagementDialogs.tsx (307줄) - line 2930-3236 - 완료 (265줄 절감)

    • 6개 다이얼로그 추출
    • Props 인터페이스 정의
    • 메인 파일에서 import로 교체
    • 빌드 테스트 - 통과

1-3. 칼럼 관리 다이얼로그

  • ColumnManageDialog.tsx (135줄) - 완료 (119줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과
  • ColumnDialog.tsx (110줄) - 완료 (48줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과

1-4. 필드 관련 다이얼로그

  • MasterFieldDialog.tsx (180줄) - 완료 (148줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과
  • OptionDialog.tsx (147줄) - line 2973-3119 - 완료 (122줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과

1-5. 템플릿 관련 다이얼로그

  • TemplateFieldDialog.tsx (141줄) - 완료 (113줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과
  • SectionTemplateDialog.tsx (97줄) - 완료 (78줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과
  • LoadTemplateDialog.tsx (84줄) - 완료 (74줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과

1-6. 기타 다이얼로그

  • PathEditDialog.tsx (40줄) - 완료

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
  • PageDialog.tsx (36줄) - 완료

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
  • SectionDialog.tsx (50줄) - 완료 (총 95줄 절감)

    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • 빌드 테스트 - 통과

1-7. Phase 1 완료 검증

  • 모든 다이얼로그 분리 완료 확인 - 13개 다이얼로그 분리 완료
  • TypeScript 에러 없음 확인 - 통과
  • 빌드 성공 확인 - 통과
  • 현재 파일 크기 확인 - 3,254줄 (목표 2,900줄 이하 달성!)

Phase 2: 타입 정의 분리 (25줄 절감 목표) 순서 변경

2-1. 타입 파일 생성

  • types.ts 생성

2-2. 로컬 타입 정의 이동 (2개 - ItemCategoryStructure는 존재하지 않음)

  • OptionColumn 타입
  • MasterOption 타입

2-3. Phase 2 완료 검증

  • types.ts 생성 완료
  • 메인 파일에서 import 확인
  • Dialog 파일에서 import 확인 (ColumnManageDialog)
  • 빌드 테스트 진행 중
  • 현재 파일 크기 확인 (목표: ~3,230줄 이하)

Phase 3: 추가 탭 컴포넌트 분리 (254줄 절감 목표) 순서 변경

3-1. 섹션 탭 분리

  • SectionsTab.tsx (239줄) - line 2878-3117 - 완료
    • 컴포넌트 추출
    • Props 정의
    • 메인 파일 교체
    • tabs/index.ts export 추가
    • 빌드 테스트

3-2. 아이템 탭 분리

  • MasterFieldTab.tsx (558줄) - Phase 1에서 이미 완료
    • 컴포넌트 추출 (Phase 1 완료)
    • Props 정의 (Phase 1 완료)
    • 메인 파일 교체 (Phase 1 완료)
    • ItemsTab은 MasterFieldTab으로 이미 분리됨

3-3. Phase 3 완료 검증

  • 탭 컴포넌트 분리 완료 (SectionsTab + MasterFieldTab)
  • 빌드 성공 확인
  • 현재 파일 크기 확인 (목표: ~3,000줄 이하)

Phase 4: Utils & Hooks 통합 분리 (900줄 절감 목표) Phase 통합

4-1. Utils 분리

  • utils/ 디렉토리 생성
  • pathUtils.ts 완료
    • generateAbsolutePath() 이동
    • getItemTypeLabel() 추가
    • 메인 파일에서 import 적용
  • fieldUtils.ts ⏸️ 주말 작업으로 연기
    • generateFieldKey() 이동
    • findFieldByKey() 이동
    • 필드 관련 helper 함수들 이동
  • sectionUtils.ts ⏸️ 주말 작업으로 연기
    • moveSection() 이동
    • 섹션 관련 helper 함수들 이동
  • validationUtils.ts ⏸️ 주말 작업으로 연기
    • validateField() 이동
    • 유효성 검증 함수들 이동

4-2. Hooks 분리 ⏸️ 주말 작업으로 연기

  • hooks/ 디렉토리 생성 ⏸️ 주말 작업
  • usePageManagement.ts ⏸️ 주말 작업
    • handleAddPage, handleDeletePage, handleUpdatePage 등
    • 관련 state 및 handler 5개 이동
  • useSectionManagement.ts ⏸️ 주말 작업
    • handleAddSection, handleDeleteSection 등
    • 관련 state 및 handler 8개 이동
  • useFieldManagement.ts ⏸️ 주말 작업
    • handleAddField, handleEditField 등
    • 관련 state 및 handler 10개 이동
  • useTemplateManagement.ts ⏸️ 주말 작업
    • handleSaveTemplate, handleLoadTemplate 등
    • 관련 state 및 handler 6개 이동
  • useTabManagement.ts ⏸️ 주말 작업
    • handleAddTab, handleDeleteTab 등
    • 관련 state 및 handler 6개 이동

4-3. Phase 4 Utils 부분 완료 검증

  • pathUtils 분리 완료
  • 메인 파일에서 import 적용
  • Hooks 분리는 주말 작업으로 연기 ⏸️
  • 빌드 성공 확인 (다음 작업)
  • 최종 파일 크기 확인 (목표: ~1,300줄 이하 - Hooks 완료 후)

최종 검증 체크리스트

  • 메인 파일 크기: 1,500줄 이하 달성
  • TypeScript 에러: 0개
  • 빌드 에러: 0개
  • ESLint 경고: 최소화
  • 기능 테스트: 모든 다이얼로그 정상 동작
  • 탭 테스트: 모든 탭 전환 정상 동작
  • 데이터 저장: localStorage 정상 동작
  • 코드 리뷰: 가독성 향상 확인

📝 작업 이력 (날짜별)

2025-11-18 (오전)

  • CategoryTab 분리 완료 (40줄)
  • MasterFieldTab 분리 완료 (558줄)
  • HierarchyTab 분리 완료 (43줄)
  • 분리 계획 문서 작성 완료
  • 체크리스트 기반 작업 문서로 업데이트

2025-11-18 (오후) - Phase 1 Dialog 분리 완료

  • dialogs/ 디렉토리 생성 완료
  • FieldDialog.tsx 분리 완료 (462줄 절감) - 빌드 테스트 통과
  • FieldDrawer.tsx 분리 완료 (462줄 절감) - 빌드 테스트 통과
  • TabManagementDialogs.tsx 분리 완료 (265줄 절감) - 6개 다이얼로그 통합
  • OptionDialog.tsx 분리 완료 (122줄 절감)
  • ColumnManageDialog.tsx 분리 완료 (119줄 절감)
  • PathEditDialog.tsx, PageDialog.tsx, SectionDialog.tsx 분리 완료 (95줄 절감)
  • MasterFieldDialog.tsx 분리 완료 (148줄 절감)
  • TemplateFieldDialog.tsx 분리 완료 (113줄 절감)
  • SectionTemplateDialog.tsx 분리 완료 (78줄 절감)
  • LoadTemplateDialog.tsx 분리 완료 (74줄 절감)
  • ColumnDialog.tsx 분리 완료 (48줄 절감)
  • 📊 최종 상태: 5,231줄 → 3,254줄 (1,977줄 절감, 37.8%)
  • 🎉 Phase 1 완료! 목표 ~2,900줄 이하 달성 (3,254줄)

2025-11-18 (저녁) - Phase 순서 재조정 및 Phase 2 조사 완료

  • 📋 Phase 순서 변경 결정: 효율성 극대화를 위해 순서 조정
    • Phase 2: Utils → Types 분리 (빠른 효과, 다른 Phase 기반)
    • Phase 3: Types → Tabs 분리 (가시적 효과)
    • Phase 4: Tabs/Hooks → Utils + Hooks 통합 (대규모 정리)
  • 🔍 Phase 2 범위 조사 완료:
    • 초기 예상: 200줄 → 실제: 25줄 (로컬 타입 3개만 존재)
    • 주요 타입들은 이미 ItemMasterContext에서 import 중
    • 분리 대상: ItemCategoryStructure, OptionColumn, MasterOption
  • COMPONENT_SEPARATION_PLAN.md 문서 업데이트 완료 (정확한 Phase 2 범위 반영)

🎯 세션 체크포인트 (2025-11-18 종료)

완료된 작업

  • Phase 1 완전 완료: 13개 다이얼로그 분리
  • 파일 크기 절감: 5,231줄 → 3,254줄 (1,977줄 절감, 37.8%)
  • Phase 순서 최적화: 효율성 기반 순서 재조정 완료
  • Phase 2 사전 조사: 실제 범위 확인 및 문서 업데이트

📋 다음 세션 시작 시 작업

  1. Phase 2: Types 분리 (25줄 절감 목표)

    • types.ts 파일 생성
    • ItemCategoryStructure, OptionColumn, MasterOption 추출
    • 메인 파일에서 import 수정
    • 빌드 테스트
  2. Phase 3: Tabs 분리 (254줄 절감 목표)

    • SectionsTab.tsx (242줄)
    • ItemsTab.tsx (12줄)
  3. Phase 4: Utils + Hooks 통합 분리 (900줄 절감 목표)

📊 현재 상태

  • 메인 파일: 3,254줄
  • 분리된 컴포넌트: 13개 다이얼로그, 3개 탭
  • 최종 목표까지: 약 2,000줄 추가 절감 필요

💾 세션 재개 명령

# 다음 세션 시작 시:
1. COMPONENT_SEPARATION_PLAN.md 확인
2. Phase 2 체크리스트부터 시작
3. 문서의 "### Phase 2: 타입 정의 분리" 섹션 참고

🚀 다음 작업: Phase 2 (Types 분리) - 내일 시작 예정


🔄 세션 재개 가이드

세션이 중단되었을 때 이 문서를 기준으로 작업 재개:

  1. 위 체크리스트에서 체크되지 않은 첫 번째 항목 찾기
  2. 해당 항목의 line 번호예상 라인 수 확인
  3. ItemMasterDataManagement.tsx 파일에서 해당 섹션 Read
  4. 새 파일 생성 및 컴포넌트 추출
  5. Props 인터페이스 정의
  6. 메인 파일에서 해당 부분을 import로 교체
  7. 빌드 테스트 (npm run build)
  8. 체크리스트 업데이트 (체크 표시)
  9. 다음 항목으로 이동

현재 진행 상태: Phase 0 완료, Phase 1 시작 대기


💡 주의사항

Props Drilling 방지

  • Context API 또는 Zustand 활용 고려
  • 현재 ItemMasterContext가 있으므로 최대한 활용

타입 안정성 유지

  • 모든 분리된 컴포넌트에 명확한 Props 타입 정의
  • types.ts에서 중앙 관리

재사용성 고려

  • Dialog 컴포넌트는 독립적으로 재사용 가능하게
  • Utils는 순수 함수로 작성

테스트 필요성

  • 각 분리 단계마다 빌드 테스트 필수
  • 기능 동작 검증 필요

🎯 성공 기준

  1. 메인 파일 크기 1,500줄 이하 달성
  2. 빌드 에러 없음
  3. 모든 기능 정상 동작
  4. 타입 에러 없음
  5. 코드 가독성 향상

문서 버전: 1.0 마지막 업데이트: 2025-11-18