Files
sam-react-prod/docs/[PLAN-2025-11-21] component-separation.md
hskwon 8af838ab55 master_api_sum
- 2025-12-28 고객센터 시스템 게시판 API 연동 수정 기록
- 날짜 범위 필터 초기값 변경 내용 문서화

fix: 고객센터 목록 날짜 범위 초기값 변경

- EventList, InquiryList, NoticeList 날짜 범위 초기값 빈 문자열로 변경
- 페이지 진입 시 전체 데이터 조회 가능하도록 수정

feat: 1:1 문의 댓글 기능 API 연동

- 댓글 CRUD API 함수 구현 (shared/actions.ts)
  - getComments, createComment, updateComment, deleteComment
- CommentApiData 타입 및 transformApiToComment 변환 함수 추가
- InquiryDetail 컴포넌트 callback props 방식으로 변경
- user.id localStorage 저장으로 본인 글 수정/삭제 버튼 표시
- page.tsx에서 댓글 API 호출 및 상태 관리

feat(WEB): 게시판 시스템 Mock → API 연동 (Phase J)

- BoardList: getPosts, getMyPosts API 연동
- BoardDetail: getPost API 연동, 새 라우트 구조 적용
- BoardForm: getBoards, createPost, updatePost API 연동
- 라우트 변경: /board/[id] → /board/[boardCode]/[postId]
- Toast 라이브러리 sonner로 통일
- MOCK_BOARDS 완전 제거, types.ts 정리

chore: 작업 현황 업데이트

refactor: BoardForm 부서 Mock 데이터 분리

- types.ts에서 MOCK_DEPARTMENTS 제거
- BoardForm 내부에 임시 Mock 데이터 정의
- TODO: API에서 부서 목록 연동 필요

feat: 종합현황 반려 사유 입력 Dialog 추가

- 반려 시 사유 입력 Dialog 표시
- 사유 미입력 시 toast 에러 메시지
- rejectIssue 함수에 reason 파라미터 추가

feat: 고객센터 Mock → API 연동 완료

- shared/actions.ts: 공통 게시글 API 액션 추가
- shared/types.ts: 공통 타입 정의
- InquiryList: Mock → API 연동, transform 함수 추가
- FAQList: Mock → API 연동, transform 함수 추가
- 상세 페이지: API 연동 (notices, events, inquiries)
- 각 types.ts: transformPost 함수 추가

fix: 고객센터 board_code 불일치 수정

- 공지사항: notice → notices
- 이벤트: event → events
- DB 시스템 게시판 코드와 일치하도록 수정

feat: 결재 문서 작성 파일 첨부 기능 구현

- UploadedFile 타입 추가 및 ProposalData/ExpenseReportData에 uploadedFiles 필드 추가
- uploadFiles() 함수 구현 (/api/v1/files/upload API 연동)
- createApproval/updateApproval에서 파일 업로드 후 저장 처리
- ProposalForm/ExpenseReportForm에 첨부파일 UI 개선
  - 기존 업로드 파일 표시 (파일 보기/삭제 기능)
  - 새 첨부 파일 목록 표시 및 삭제 기능
- DraftBox에서 결재자 부서/직책 정보 표시
- 문서 상세 모달에서 실제 API 데이터 표시 (목업 데이터 제거)
- 수정 모드 상신 시 PATCH 메서드 사용 (405 에러 수정)

feat: [mock-migration] Phase J-4 게시판 관리 Mock → API 연동 완료

- types.ts: BoardApiData, BoardExtraSettings API 타입 추가
- actions.ts: Server Actions 생성 (CRUD, 변환 함수)
- index.tsx: Mock 데이터 → API 호출로 전환
- [id]/page.tsx: 상세 페이지 API 연동
- [id]/edit/page.tsx: 수정 페이지 API 연동
- new/page.tsx: 등록 페이지 API 연동

주요 정책:
- /boards/tenant 엔드포인트로 테넌트 게시판만 조회
- 수정 시 board_code 전송 안함 (코드 변경 불가)
- extra_settings 내 target/target_name 저장

feat: 매입유형(purchase_type) 필드 저장 기능 추가

- actions.ts: API 응답/요청에 purchase_type 매핑 추가
- PurchaseDetail.tsx: 저장 시 purchaseType 포함하도록 수정

fix(salary): 직책/직급 매핑 수정 (사원관리 기준 통일)

- transformApiToFrontend: position → job_title_label (직책), rank → rank (직급)
- transformApiToDetail: 동일하게 수정
- 기존 잘못된 매핑: position_label(직위) → 직책, job_title_label(직책) → 직급

feat: [mock-migration] Phase M 잔여 Mock/TODO 제거 완료

- M-1: 매입 상세 모달 MOCK_ACCOUNTS, MOCK_VENDORS → API 연동
- M-2: 직원 관리 파일 업로드 API 연동 (uploadProfileImage)
- M-4: 결재 문서 생성 MOCK_EMPLOYEES 제거 → getEmployees API
- M-5: 결재함/기안함 console.log 제거 → 승인/반려 API 연동
- M-6: 구독 관리 TODO 제거 → requestDataExport, cancelSubscription
- M-7: 계정 정보 TODO 제거 → withdrawAccount, suspendTenant

docs: 휴가관리 사용현황 동기화 수정 작업 기록

- 2025-12-26 휴가 사용현황 동기화 수정 내용 추가
- fetchUsageData 호출 추가, 부여일수 계산 수정 문서화

feat: Phase G 생산관리/품질검사 Mock → API 연동 완료

G-1 작업지시관리:
- WorkOrderList: getWorkOrders, getWorkOrderStats API
- WorkOrderDetail: getWorkOrderById API
- WorkOrderCreate: createWorkOrder API
- SalesOrderSelectModal: getSalesOrdersForWorkOrder API

G-2 작업실적관리:
- WorkResultList: getWorkResults, getWorkResultStats API

G-3 생산대시보드:
- actions.ts 생성, getDashboardData API

G-4 작업자화면:
- actions.ts 생성
- getMyWorkOrders, completeWorkOrder API
- MaterialInputModal: getMaterialsForWorkOrder, registerMaterialInput API
- ProcessDetailSection: getProcessSteps, requestInspection API

G-5 품질검사:
- actions.ts 생성
- InspectionList: getInspections, getInspectionStats API
- InspectionDetail: getInspectionById, updateInspection API
- InspectionCreate: createInspection API

fix: [vacation] 휴가 사용현황 동기화 및 부여일수 계산 수정

- 승인 후 fetchUsageData() 호출 추가로 사용현황 즉시 반영
- baseVacation: 동적 totalDays → 고정 '15일' (기본 연차)
- grantedVacation: 하드코딩 '0일' → Math.max(0, totalDays-15) 계산
- useCallback dependencies에 fetchUsageData 추가

feat: Phase I Excel/PDF 다운로드 API 연동

- ReceivablesStatus: 채권현황 엑셀 다운로드 API 연동
- VendorLedger: 거래처원장 목록 엑셀, 상세 PDF 다운로드 API 연동
- DailyReport: 일일일보 엑셀 다운로드 API 연동
- Blob 다운로드 패턴 및 toast 알림 적용

feat: L-2 견적 관리 Mock → API 연동

## 변경사항
- SAMPLE_QUOTES Mock 데이터 제거
- Server Actions 생성 (CRUD + 특수 기능 14개)
- QuoteManagementClient 분리 (SSR/CSR 패턴)
- Quote 타입 및 변환 함수 정의

## 추가된 API 연동
- 목록/상세/등록/수정/삭제/일괄삭제
- 최종확정/확정취소/수주전환
- PDF 생성/이메일/카카오 발송
- 견적번호 미리보기/요약 통계

feat: 공정관리 페이지 및 컴포넌트 추가

- 공정관리 목록/상세/등록/수정 페이지 구현
- ProcessListClient, ProcessDetail, ProcessForm 컴포넌트 추가
- ProcessWorkLogPreviewModal, RuleModal 추가
- MobileCard 공통 컴포넌트 추가
- WorkLogModal.tsx 개선
- .gitignore 업데이트

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
(cherry picked from commit f0c0de2ecd)

chore: React 공통 컴포넌트 업데이트

- VacationManagement: API 연동 개선
- WorkOrders: 작업자 선택 모달 개선
- TypeScript 빌드 설정 업데이트

feat: I-8 휴가 정책 관리 API 연동

- actions.ts: 휴가 정책 CRUD Server Actions
- LeavePolicyManagement 컴포넌트 API 연동

feat: I-7 종합분석 API 연동

- actions.ts: 종합분석 조회 Server Actions
- ComprehensiveAnalysis 컴포넌트 API 연동

feat: I-6 일일 생산현황 API 연동

- actions.ts: 일일 리포트 조회 Server Actions
- DailyReport 컴포넌트 API 연동

feat: I-5 미수금 현황 API 연동

- actions.ts: 미수금 조회 Server Actions
- ReceivablesStatus 컴포넌트 API 연동

feat: I-4 거래통장 조회 API 연동

- actions.ts: 은행 거래내역 조회 Server Actions
- BankTransactionInquiry 컴포넌트 API 연동

feat: I-3 법인카드 사용내역 API 연동

- actions.ts: 카드 거래내역 조회 Server Actions
- CardTransactionInquiry 컴포넌트 API 연동

feat: I-2 거래처 원장 API 연동

- actions.ts: 거래처 원장 조회 Server Actions
- VendorLedger 컴포넌트 API 연동
- VendorLedgerDetail 상세 조회 연동

feat: H-3 출하 관리 API 연동

- actions.ts: Server Actions (CRUD, 상태 변경)
- ShipmentList: 출하 목록 API 연동
- ShipmentCreate: 출하 등록 API 연동
- ShipmentEdit: 출하 수정 API 연동
- ShipmentDetail: 출하 상세 API 연동

feat: G-2 작업실적 관리 API 연동

- types.ts API 타입 추가 (WorkResultApi, WorkResultStatsApi 등)
- transformApiToFrontend/transformFrontendToApi 변환 함수 추가
- actions.ts 서버 액션 생성 (8개 함수)
- index.ts 액션 exports 추가

Server Actions:
- getWorkResults: 목록 조회 (페이징, 필터링)
- getWorkResultStats: 통계 조회
- getWorkResultById: 상세 조회
- createWorkResult: 등록
- updateWorkResult: 수정
- deleteWorkResult: 삭제
- toggleInspection: 검사 상태 토글
- togglePackaging: 포장 상태 토글

fix: StockStatusList Hook 순서 오류 수정

- 조건부 return 전에 모든 Hooks(useCallback, useMemo) 선언
- React Rules of Hooks 준수

feat: H-2 재고현황 Mock → API 연동 완료

- StockStatusDetail.tsx: 상세 조회 API 연동
- StockStatusList.tsx: 목록 조회 API 연동 (이전 세션)
- actions.ts: 재고 현황 Server Actions 구현

feat: H-1 입고 관리 Mock → API 연동 완료

- ReceivingDetail.tsx: 상세 조회 및 입고처리 API 연동
- ReceivingProcessDialog.tsx: 폼 데이터 API 전달 구조로 변경
- InspectionCreate.tsx: 검사 대상 목록 API 조회 적용
- ReceivingList.tsx: 미사용 타입 import 정리

feat: G-1 작업지시 관리 API 연동

- actions.ts 서버 액션 11개 함수 구현
- types.ts API 타입 및 변환 함수 추가
- index.ts 액션 함수 export 추가

Server Actions:
- getWorkOrders (목록)
- getWorkOrderStats (통계)
- getWorkOrderById (상세)
- createWorkOrder (등록)
- updateWorkOrder (수정)
- deleteWorkOrder (삭제)
- updateWorkOrderStatus (상태변경)
- assignWorkOrder (담당자배정)
- toggleBendingField (벤딩토글)
- addWorkOrderIssue (이슈등록)
- resolveWorkOrderIssue (이슈해결)

feat: I-1 미지급비용 관리 React 연동

- Server Actions 패턴으로 API 연동 구현 (actions.ts)
- Mock 데이터 제거, props 기반 데이터 주입
- Server Component로 초기 데이터 로딩
- 삭제/지급일 변경 등 CRUD 액션 연동

feat: HR 모듈 API 연동 완료 및 휴가관리 버그 수정

## 휴가관리 (VacationManagement)
- 휴가 부여 API 연동: createLeaveGrant 호출 추가
- 휴가 신청 시 선택된 사원 userId 전달 (잔여휴가 오류 수정)
- LeaveType 타입 분리 (VacationType과 구분)
- VacationGrantDialog에 부여일(grantDate) 필드 추가

## 근태관리 (AttendanceManagement)
- actions.ts 추가: API 호출 함수 분리
- 타입 정의 확장 및 개선

## 기타 개선
- CardManagement, SalaryManagement: actions 개선
- DocumentCreate: 전자결재 actions 및 index 개선
- GoogleMap: 지도 컴포넌트 개선

feat: Phase E 인사관리 Mock → API 마이그레이션

- E-1 법인카드 관리 API 연동
  - actions.ts 생성 (getCards, createCard, updateCard, deleteCard, toggleCardStatus)
  - CardForm, 페이지 컴포넌트 API 연동
- E-2 급여 관리 API 연동
  - actions.ts 생성 (getSalaries, getSalary, updateSalaryStatus, bulkUpdateSalaryStatus)
  - 급여 목록 컴포넌트 API 연동
- 결재 시스템 actions.ts 추가 (ApprovalBox, DraftBox, ReferenceBox, DocumentCreate)
- DepositManagement actions.ts 페이지네이션 응답 구조 수정
- 부서 관리, 휴가 관리 actions.ts 개선
- API URL에 /api prefix 추가

회계 및 설정 모듈 리팩토링: actions 분리, 타입 정의 개선

feat: 휴가 부여현황 Mock 데이터 제거 및 API 연동

- getLeaveGrants, createLeaveGrant, deleteLeaveGrant API 함수 추가
- LeaveGrantType, LeaveGrantRecord, CreateLeaveGrantRequest 타입 추가
- generateGrantData Mock 함수 제거
- fetchGrantData로 실제 API 호출
- grantData 상태를 API 데이터로 갱신

feat: 휴가 사용현황 Mock 데이터 제거 및 API 연동

- getLeaveBalances() API 함수 추가
- LeaveBalanceRecord, GetLeaveBalancesParams 타입 정의
- generateUsageData() Mock 함수 제거
- fetchUsageData()로 실제 API 호출
- hireDate 날짜 포맷팅 예외 처리 추가

feat: C-4 부서 관리 Mock → API 연동

- actions.ts 생성 (getDepartmentTree, createDepartment, updateDepartment, deleteDepartment, deleteDepartmentsMany)
- index.tsx Mock 데이터 제거 및 API 연동
- 트리 구조 CRUD 완전 연동

⚠️ .env.local에 API_URL=https://api.sam.kr/api 설정 필요 (Server Actions용)

feat: C-3 휴가 관리 Mock → API 연동

- actions.ts 생성: getLeaves, createLeave, approveLeave, rejectLeave, cancelLeave 등
- index.tsx 수정: 신청현황 탭 Mock 데이터 → API 호출 전환
- 일괄 승인/반려 API 연동 (approveLeavesMany, rejectLeavesMany)
- 휴가 신청 다이얼로그 createLeave API 연동

feat: C-2 근태 관리 Mock → API 연동

- actions.ts 생성 (checkIn/checkOut/getTodayAttendance)
- GoogleMap.tsx userLocation 콜백 추가
- page.tsx Mock console.log 제거 + API 연동
- 처리중 상태 및 버튼 텍스트 추가

feat: C-1 직원 관리 Mock → API 연동

- actions.ts 생성 (CRUD + 통계 + 일괄삭제 Server Actions)
- utils.ts 생성 (API ↔ Frontend 데이터 변환)
- index.tsx Mock 데이터 제거, API 연동
- [id]/page.tsx 상세 페이지 API 연동
- [id]/edit/page.tsx 수정 페이지 API 연동
- new/page.tsx 등록 페이지 API 연동

API Endpoints:
- GET/POST /api/v1/employees
- GET/PATCH/DELETE /api/v1/employees/{id}
- POST /api/v1/employees/bulk-delete
- GET /api/v1/employees/stats

feat: Daum 우편번호 서비스 연동 및 악성채권 UI 개선

- useDaumPostcode 공통 훅 생성 (Daum Postcode API 연동)
- 우편번호 찾기 기능 적용: 악성채권, 거래처, 직원, 회사정보, 주문등록
- 악성채권 페이지 토글 순서 변경 (라벨 → 토글)
- 악성채권 토글 기능 수정 (매출/매입 → 등록/해제)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
(cherry picked from commit 41ef0bdd86)

feat: A-2 팝업 관리 Mock → API 연동

- 상세 조회 페이지: MOCK_POPUPS → getPopupById() API
- 수정 페이지: MOCK_POPUPS → getPopupById() API + 로딩 상태
- PopupForm: console.log → createPopup/updatePopup Server Actions
- 삭제 기능: deletePopup() API 연동 + 로딩 상태
- 데이터 변환 유틸리티 추가 (API ↔ Frontend)

feat: A-1 악성채권 관리 Mock → API 연동 완료

- 상세 페이지 서버 컴포넌트 전환 ([id]/page.tsx, [id]/edit/page.tsx)
- BadDebtDetail.tsx: CRUD API 연동 (createBadDebt, updateBadDebt, deleteBadDebt)
- actions.ts: 메모 API 추가 (addBadDebtMemo, deleteBadDebtMemo)

feat: 매입 관리 Mock → API 전환 및 세금계산서 토글 연동

- index.tsx: Mock 데이터 제거, API 데이터 로딩으로 전환
- actions.ts: getPurchases(), togglePurchaseTaxInvoice() 서버 액션 추가
- vendorOptions 빈 문자열 필터링 (Select.Item 에러 수정)

feat: 매출 상세 페이지 API 연동

- 목데이터(MOCK_VENDORS, fetchSalesDetail) 제거
- getSaleById, createSale, updateSale, deleteSale API 연동
- getClients로 거래처 목록 로드
- 상태 관리 개선 (clients, isLoading, isSaving)

fix: Mock 데이터를 실제 API 연동으로 복원

- 팝업 관리, 결제 내역, 구독 관리, 알림 설정 API 연동
- 입금/출금/거래처 관리 API 연동
- page.tsx를 서버 컴포넌트로 변환
- actions.ts 서버 액션 추가
2025-12-29 16:46:55 +09:00

23 KiB
Raw Permalink 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