Phase 6 마이그레이션 (41개 컴포넌트 완료): - 건설/시공: 협력업체, 시공관리, 기성관리, 발주관리, 계약관리 등 - 영업: 견적관리(V2), 고객관리(V2), 수주관리 - 회계: 청구관리, 매입관리, 매출관리, 거래처관리, 악성채권 등 - 생산: 작업지시, 검수관리 - 출고: 출하관리 - 자재: 입고관리, 재고현황 - 고객센터: 문의관리, 이벤트관리, 공지관리 - 인사: 직원관리 - 설정: 권한관리 주요 변경사항: - 34개 xxxConfig.ts 파일 생성 (설정 기반 페이지 구성) - PageLayout/PageHeader → IntegratedDetailTemplate 통합 - 일관된 타이틀/버튼 영역 (목록, 상세, 수정, 삭제) - 1112줄 코드 감소 (중복 제거) 프로젝트 공통화 현황 분석 문서 추가: - 상세 페이지 62%, 목록 페이지 82% 공통화 달성 - 추가 공통화 기회 및 로드맵 정리 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.6 KiB
4.6 KiB
품목관리 경로 통합 이슈 정리
작성일: 2026-01-20 브랜치:
feature/universal-detail-component커밋:6f457b2
문제 발견
증상
/production/screen-production경로에서 품목 등록 실패/production/screen-production경로에서 품목 수정 시 기존 값 미표시
원인 분석
중복 경로 존재:
/items → 신버전 (DynamicItemForm)
/production/screen-production → 구버전 (ItemForm)
백엔드 메뉴 설정:
- 사이드바 "생산관리 > 품목관리" 클릭 시 →
/production/screen-production으로 연결 - 메뉴 URL이 API에서 동적으로 관리되어 프론트에서 직접 변경 불가
결과:
- 사용자는 항상
/production/screen-production(구버전 폼)으로 접속 - 구버전
ItemForm은 API 필드 매핑이 맞지 않아 등록/수정 오류 발생 - 신버전
DynamicItemForm(/items)은 정상 작동하지만 접근 경로 없음
파일 비교
등록 페이지 (create/page.tsx)
| 항목 | /items/create |
/production/screen-production/create |
|---|---|---|
| 폼 컴포넌트 | DynamicItemForm |
ItemForm |
| 폼 타입 | 동적 (품목기준관리 API) | 정적 (하드코딩) |
| API 매핑 | 정상 | 불일치 |
| 상태 | ✅ 정상 작동 | ❌ 등록 오류 |
목록/상세 페이지
| 항목 | /items |
/production/screen-production |
|---|---|---|
| 목록 | ItemListClient |
ItemListClient |
| 상세 | ItemDetailView |
ItemDetailView |
| 수정 | ItemDetailEdit |
ItemDetailEdit |
| 상태 | 동일 컴포넌트 공유 | 동일 컴포넌트 공유 |
결론: 목록/상세/수정은 같은 컴포넌트를 공유하지만, 등록만 다른 폼이 연결되어 있었음
해결 방법
선택지
-
백엔드 메뉴 URL 변경:
/production/screen-production→/items- 백엔드 DB 수정 필요
- 프론트 단독 작업 불가
-
프론트 경로 통합:
/items파일들을/production/screen-production으로 이동 ✅- 백엔드 수정 불필요
- 프론트 단독으로 해결 가능
적용한 해결책
/items → /production/screen-production 파일 이동 및 통합
# 1. 기존 screen-production 삭제
rm -rf src/app/[locale]/(protected)/production/screen-production
# 2. items 파일들을 screen-production으로 복사
cp -r src/app/[locale]/(protected)/items/* \
src/app/[locale]/(protected)/production/screen-production/
# 3. items 폴더 삭제
rm -rf src/app/[locale]/(protected)/items
수정된 파일
라우트 파일 (삭제)
src/app/[locale]/(protected)/items/page.tsxsrc/app/[locale]/(protected)/items/create/page.tsxsrc/app/[locale]/(protected)/items/[id]/page.tsxsrc/app/[locale]/(protected)/items/[id]/edit/page.tsx
라우트 파일 (신버전으로 교체)
src/app/[locale]/(protected)/production/screen-production/page.tsxsrc/app/[locale]/(protected)/production/screen-production/create/page.tsxsrc/app/[locale]/(protected)/production/screen-production/[id]/page.tsxsrc/app/[locale]/(protected)/production/screen-production/[id]/edit/page.tsx
컴포넌트 경로 참조 수정 (/items → /production/screen-production)
| 파일 | 수정 개수 |
|---|---|
ItemListClient.tsx |
3개 |
ItemForm/index.tsx |
1개 |
ItemDetailClient.tsx |
1개 |
ItemDetailEdit.tsx |
2개 |
DynamicItemForm/index.tsx |
2개 |
| 합계 | 9개 |
교훈
문제 원인
- 템플릿/테스트용 페이지에 메뉴를 연결한 채로 방치
- 신버전 개발 시 구버전 경로 정리 누락
- 두 경로가 같은 컴포넌트 일부를 공유해서 문제 파악 지연
예방책
- 신버전 개발 완료 시 구버전 경로 즉시 삭제 또는 리다이렉트 처리
- 메뉴 URL과 실제 라우트 파일 매핑 정기 점검
- 중복 경로 생성 시 명확한 용도 구분 및 문서화
최종 상태
/production/screen-production → DynamicItemForm (신버전)
/items → 삭제됨
품목관리 CRUD 테스트 결과:
| 품목 유형 | Create | Read | Update | Delete |
|---|---|---|---|---|
| 소모품(CS) | ✅ | ✅ | ✅ | ✅ |
| 원자재(RM) | ✅ | ✅ | ✅ | ✅ |
| 부자재(SM) | ✅ | ✅ | ✅ | ✅ |
| 부품-구매(PT) | ✅ | ✅ | ✅ | ✅ |
| 부품-절곡(PT) | ✅ | ✅ | ✅ | ✅ |
| 부품-조립(PT) | ✅ | ✅ | ✅ | ✅ |
| 제품(FG) | ✅ | ✅ | ✅ | ✅ |