- P&ID: 연결 분석 API, Prefix 규칙 관리, 카테고리 분류, DXF 그래프 빌드 - LLM: 대화 요약, tool card 영구 보존, 시계열 차트(uPlot), 에이전트 모드 - KB: 청크 미리보기, Field Instrument Inference, 인증/Qdrant 클라이언트 - MCP: 서버 기능 확장, 파이프라인 수정, timeout 개선 - Frontend: P&ID UI, LLM UI, KB UI, OPC UA Write 탭 추가 - 설정: AGENTS.md, plant_context, README, opencode.json 업데이트 - 정리: 진단 체크리스트 문서 삭제
4.7 KiB
카테고리삽입코딩.md
1. 개요 (Context)
현재 P&ID 엑셀 내보내기 로직에서 카테고리 분류가 부족하며, 시트 순서가 고정되어 있습니다. 사용자가 검토하기 용이하도록 Pipings 카테고리를 추가하고, 분류되지 않은 항목(Unmatched)을 항상 시트의 마지막에 배치하여 데이터의 가독성과 정렬 규칙을 확립합니다.
2. 변경 목표 (Objectives)
PidEquipment도메인 모델에Pipings카테고리 상수 추가.PidExtractorService의 엑셀 생성 로직에서 시트 생성 순서 및 명칭 조정.Unmatched항목이 항상 엑셀의 가장 마지막 시트로 출력되도록 보장.
3. 상세 구현 계획 (Implementation Plan)
🛠 STEP 1: 도메인 모델 수정
대상 파일: src/Core/Domain/Entities/PidEquipment.cs
CategoryPipings상수 추가:public const string CategoryPipings = "pipings";AllCategories배열에 신규 상수 포함.
🛠 STEP 2: 서비스 로직 수정
대상 파일: src/Core/Application/Services/PidExtractorService.cs
sheetOrder배열 수정:- 기존:
[Instrument, Power, Storage, Process, Utility, "__unmatched__"] - 변경:
[Instrument, Power, Storage, Process, Utility, "pipings", "__unmatched__"]
- 기존:
sheetNames딕셔너리 수정:[PidEquipment.CategoryPipings] = "Pipings"추가.
🛠 STEP 3: 검증 (Verification)
dotnet test를 실행하여 엑셀 생성 관련 유닛 테스트가 통과하는지 확인.- (필요 시) 엑셀 파일 생성 테스트 코드를 추가하여 시트 순서(Sheet Index)를 검증.
4. diagnosis-checklist.md 준수 사항 (Quality Assurance)
| 체크 항목 | 준수 계획 |
|---|---|
| 동시성 / 비동기 | ExportToExcelAsync가 이미 Task.Run으로 오프로드되어 있으므로, 기존의 비동기 흐름을 깨뜨리지 않고 상수 추가만 수행하여 이벤트 루프 블로킹 방지. |
| 에러 처리 | 새로운 카테고리 추가 시 null 또는 empty 카테고리에 대한 예외 처리가 기존 __unmatched__ 로직을 통해 안전하게 처리됨을 확인. |
| 리소스 관리 | using var package 블록 내에서 모든 시트 생성이 완료되므로 메모리 누수 없음. |
| 코드 구조 | 하드코딩된 문자열 대신 PidEquipment에 정의된 const를 사용하여 유지보수성 확보. |
5. 영향도 분석 (Impact Analysis)
- DB:
category컬럼은string타입이므로 새로운 값(pipings) 저장에 영향 없음. - UI: 기존 UI는 카테고리 값에 의존하지 않고 엑셀을 다운로드하므로 하위 호환성 유지됨.
6. 진단 결과 (Diagnosis) — diagnosis-checklist.md 기준
[1]. PidEquipment.CategoryPipings 상수 누락 (HIGH)
문제: CategoryPipings 상수가 정의되지 않아 Prefix Rule 생성 시 pipings 카테고리를 선택하면 Controller에서 validation 실패 (AllCategories에 없음).
근거: src/Core/Domain/Entities/PidEquipment.cs:54-62 — 상수 및 AllCategories 배열에 pipings 없음
영향: 운전원이 pipings 카테고리를 가진 Prefix Rule을 생성하면 HTTP 400 BadRequest 반환
수정: 상수 추가 + AllCategories 배열에 포함
[2]. Excel Export 시트 누락 (MED)
문제: sheetOrder와 sheetNames에 pipings가 없어 Excel 내보내기 시 piping 항목이 Unmatched 시트로 섞임.
근거: src/Core/Application/Services/PidExtractorService.cs:345-363 — sheetOrder 배열과 sheetNames 딕셔너리에 pipings 누락
영향: Excel에서 pipings 항목이 별도의 시트로 분리되지 않고 Unmatched에 포함됨
수정: sheetOrder에 PidEquipment.CategoryPipings 추가, sheetNames에 [PidEquipment.CategoryPipings] = "Pipings" 추가
[3]. Frontend CATEGORY_META / CATEGORY_ORDER 누락 (MED)
문제: JS 측 CATEGORY_META와 CATEGORY_ORDER에 pipings가 없어 UI에서 필터링·정렬·badge 표시가 깨짐.
근거: src/Web/wwwroot/js/app.js:3268-3275 — CATEGORY_META와 CATEGORY_ORDER에 pipings 누락
영향: pipings 카테고리 항목의 badge가 빈 문자열로 렌더링, 카테고리 순서가 무작위
수정: CATEGORY_META에 pipings 항목 추가, CATEGORY_ORDER 배열에 포함
[4]. PidController validation — 교차 검증 결과 (Q2 통과)
문제: PidController.cs:266-279에서 AllCategories로 category 유효성 검증
교차 검증 Q2: 다른 레이어에서 처리되는가? → AllCategories 배열에 CategoryPipings 포함 시 Controller 검증도 자동으로 통과하므로 별도 수정 불필요
결론: [1]에서 AllCategories 수정 시 함께 해결됨