Files
sam-react-prod/claudedocs/archive/[PLAN-2025-11-18] refactoring-plan.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

6.1 KiB

DataContext.tsx 리팩토링 계획

현황 분석

기존 파일 구조

  • 총 라인: 6,707줄
  • 파일 크기: 222KB
  • 상태 변수: 33개
  • 타입 정의: 50개 이상

문제점

  1. 단일 파일에 모든 도메인 집중 → 유지보수 불가능
  2. 6700줄 분석 시 토큰 과다 소비 → 세션 종료 빈번
  3. 관련 없는 데이터도 항상 로드 → 성능 저하

도메인 분류 (10개 도메인, 33개 상태)

1. ItemMaster (품목 마스터) - 13개 상태

파일: contexts/ItemMasterContext.tsx 관련 페이지: 품목관리, 품목기준관리

상태:

  • itemMasters (품목 마스터 데이터)
  • specificationMasters (규격 마스터)
  • materialItemNames (자재 품목명)
  • itemCategories (품목 분류)
  • itemUnits (단위)
  • itemMaterials (재질)
  • surfaceTreatments (표면처리)
  • partTypeOptions (부품 유형 옵션)
  • partUsageOptions (부품 용도 옵션)
  • guideRailOptions (가이드레일 옵션)
  • sectionTemplates (섹션 템플릿)
  • itemMasterFields (품목 필드 정의)
  • itemPages (품목 입력 페이지)

타입:

  • ItemMaster, ItemRevisio1n, ItemCategory, ItemUnit, ItemMaterial
  • SurfaceTreatment, PartTypeOption, PartUsageOption, GuideRailOption
  • ItemMasterField, ItemFieldProperty, FieldDisplayCondition
  • ItemField, ItemSection, ItemPage, SectionTemplate
  • SpecificationMaster, MaterialItemName
  • BOMLine, BOMItem, BendingDetail

2. Sales (판매) - 3개 상태

파일: contexts/SalesContext.tsx 관련 페이지: 견적관리, 수주관리, 거래처관리

상태:

  • salesOrders (수주 데이터)
  • quotes (견적 데이터)
  • clients (거래처 데이터)

타입:

  • SalesOrder, SalesOrderItem, OrderRevision, DocumentSendHistory
  • Quote, QuoteRevision, QuoteCalculationRow, BOMCalculationRow
  • Client

3. Production (생산) - 2개 상태

파일: contexts/ProductionContext.tsx 관련 페이지: 생산관리, 품질관리

상태:

  • productionOrders (생산지시 데이터)
  • qualityInspections (품질검사 데이터)

타입:

  • ProductionOrder
  • QualityInspection

4. Inventory (재고) - 2개 상태

파일: contexts/InventoryContext.tsx 관련 페이지: 재고관리, 구매관리

상태:

  • inventoryItems (재고 데이터)
  • purchaseOrders (구매 데이터)

타입:

  • InventoryItem
  • PurchaseOrder

5. Shipping (출고) - 1개 상태

파일: contexts/ShippingContext.tsx 관련 페이지: 출고관리

상태:

  • shippingOrders (출고지시서 데이터)

타입:

  • ShippingOrder, ShippingOrderItem
  • ShippingSchedule, ShippingLot, ShippingLotItem

6. HR (인사) - 3개 상태

파일: contexts/HRContext.tsx 관련 페이지: 직원관리, 근태관리, 결재관리

상태:

  • employees (직원 데이터)
  • attendances (근태 데이터)
  • approvals (결재 데이터)

타입:

  • Employee
  • Attendance
  • Approval

7. Accounting (회계) - 2개 상태

파일: contexts/AccountingContext.tsx 관련 페이지: 회계관리, 매출채권관리

상태:

  • accountingTransactions (회계 거래 데이터)
  • receivables (매출채권 데이터)

타입:

  • AccountingTransaction
  • Receivable

8. Facilities (시설) - 2개 상태

파일: contexts/FacilitiesContext.tsx 관련 페이지: 차량관리, 현장관리

상태:

  • vehicles (차량 데이터)
  • sites (현장 데이터)

타입:

  • Vehicle
  • Site, SiteAttachment

9. Pricing (가격/계산식) - 3개 상태

파일: contexts/PricingContext.tsx 관련 페이지: 가격관리, 계산식관리

상태:

  • formulas (계산식 데이터)
  • formulaRules (계산식 규칙 데이터)
  • pricing (가격 데이터)

타입:

  • CalculationFormula, FormulaRevision
  • FormulaRule, FormulaRuleRevision, RangeRule
  • PricingData, PriceRevision

10. Auth (인증) - 2개 상태

파일: contexts/AuthContext.tsx 관련 페이지: 로그인, 사용자관리

상태:

  • users (사용자 데이터)
  • currentUser (현재 사용자)

타입:

  • User, UserRole

공통 타입 파일

types/index.ts

재사용되는 공통 타입 정의:

  • 없음 (각 도메인이 독립적)

통합 Provider

contexts/RootProvider.tsx

모든 Context를 통합하는 최상위 Provider

export function RootProvider({ children }: { children: ReactNode }) {
  return (
    <AuthProvider>
      <ItemMasterProvider>
        <SalesProvider>
          <ProductionProvider>
            <InventoryProvider>
              <ShippingProvider>
                <HRProvider>
                  <AccountingProvider>
                    <FacilitiesProvider>
                      <PricingProvider>
                        {children}
                      </PricingProvider>
                    </FacilitiesProvider>
                  </AccountingProvider>
                </HRProvider>
              </ShippingProvider>
            </InventoryProvider>
          </ProductionProvider>
        </SalesProvider>
      </ItemMasterProvider>
    </AuthProvider>
  );
}

마이그레이션 체크리스트

Phase 1: 준비

  • 전체 구조 분석
  • 도메인 분류 설계
  • 기존 파일 백업

Phase 2: Context 생성 (10개)

  • AuthContext.tsx
  • ItemMasterContext.tsx
  • SalesContext.tsx
  • ProductionContext.tsx
  • InventoryContext.tsx
  • ShippingContext.tsx
  • HRContext.tsx
  • AccountingContext.tsx
  • FacilitiesContext.tsx
  • PricingContext.tsx

Phase 3: 통합

  • RootProvider.tsx 생성
  • app/layout.tsx에서 RootProvider 적용
  • 기존 DataContext.tsx 삭제

Phase 4: 검증

  • 빌드 테스트 (npm run build)
  • 타입 체크 (npm run type-check)
  • 품목관리 페이지 동작 확인
  • 기타 페이지 동작 확인

예상 효과

파일 크기 감소

  • 기존: 6,707줄 → 각 도메인: 평균 500-1,500줄
  • ItemMaster: ~2,000줄 (가장 큼)
  • Auth: ~300줄 (가장 작음)

토큰 사용량 감소

  • 품목관리 작업 시: 70% 감소
  • 기타 페이지 작업 시: 60-80% 감소

유지보수성 향상

  • 도메인별 독립적 관리
  • 수정 시 영향 범위 명확
  • 협업 시 충돌 최소화