80 KiB
SFR-010-004~SFR-010-007 조사사업 통합 검증 결과
1. 문서 목적
- 구현된 단계의 실제 검증 결과와 차단 사유를 기능 완료와 구분해 누적한다.
2. 수행한 검증
| 날짜 | 검증 | 결과 |
|---|---|---|
| 2026-07-22 | git diff --check |
통과, 공백 오류 없음 |
| 2026-07-22 | tsc --noEmit 기본 실행 |
저장소 기존 ignoreDeprecations=6.0 값 오류 확인 |
| 2026-07-22 | tsc --noEmit --ignoreDeprecations 5.0 |
신규 trtdst 파일 오류 0건, 저장소 선행 오류 존재 |
| 2026-07-22 | Next 프로덕션 빌드 | 실행 권한 승인 거절로 미수행 |
| 2026-07-22 | 브라우저/API 통합 | 백엔드·메뉴 원천 미구현으로 미수행 |
| 2026-07-22 | FE-0 import 경계 정적 확인 | 라우트가 client UI 파일을 직접 import하고 대상 파일 존재·git diff --check 통과 |
| 2026-07-22 | FE-0 Next 개발 서버 재컴파일 | 실행 권한이 허용되지 않아 미수행, 사용자 재진입 확인 대기 |
| 2026-07-22 | FE-0 메뉴 진입 | 사용자 화면 확인으로 Next Hook 경계 오류 해소와 화면 렌더링 통과 |
| 2026-07-22 | FE-0 UI 마무리 정적 확인 | 공통 정렬 props·정렬 표시 목록 기반 선택·12열 필터 폭·버튼 공통 클래스 확인, UTF-8·git diff --check 통과 |
| 2026-07-22 | FE-0 UI 마무리 브라우저 확인 | 3002 개발 서버 미실행으로 사용자 재확인 대기 |
| 2026-07-22 | FE-0 UI 1차 사용자 재확인 | 시도·시군구 간격 미적용, 조회 버튼이 저장 버튼보다 약 0.6rem 왼쪽임을 캡처로 확인 |
| 2026-07-22 | FE-0 UI 2차 정적 확인 | .next 생성 CSS에 gap-10·col-span-12가 없음을 확인하고 인라인 2rem 간격·고정 폭·조회 버튼 0.6rem 이동 적용, UTF-8·공백 검사 통과 |
| 2026-07-22 | FE-0 최종 사용자 확인 | 처리분구관리 화면과 2차 UI 보정이 정상임을 사용자가 확인, 화면 단계 완료 판정 |
| 2026-07-22 | FE-1 import·Hook·API 경로 정적 검사 | 상대 import 누락과 client 경계 누락 없음, 승인된 SFR-010-004 API 경로 확인 |
| 2026-07-22 | FE-1 공백·한글 검사 | 신규/수정 대상 후행 공백 없음, 한글 본문 UTF-8 재조회 정상 |
| 2026-07-22 | FE-1 git diff --check |
추적 파일 통과, 신규 파일은 별도 후행 공백 검사 통과 |
| 2026-07-22 | FE-1 TypeScript 실행 | pnpm 비대화형 의존성 정리 중단 및 compiler 파일 샌드박스 EPERM으로 결과 미확보 |
| 2026-07-22 | FE-1 Tailwind 경로 확인 | 기존 content에 src/features가 없음을 확인하고 ./src/**/* 추가 |
| 2026-07-22 | FE-1 브라우저·실 API | 3002 서버 미실행·백엔드 미구현으로 사용자 화면 확인 및 통합 단계 대기 |
| 2026-07-22 | FE-1 사용자 1차 화면 확인 | 연도·지역 선택 컴포넌트, 사업명 폭, 상단 영역 분리, 불필요 PPL 버튼, 목록 열 순서 보완 요청 확인 |
| 2026-07-22 | FE-1 사용자 1차 보정 정적 확인 | 기존 연도 옵션·I/I 지역 선택 재사용, 상단 단일 카드, PPL 버튼 제거, 9개 열 순서·단위 반영 |
| 2026-07-22 | FE-1 WindowPopup 전환 정적 확인 | popup key·registry·content·부모 메시지, 처리분구 가나다순 체크 선택, 결과 파일 5종 확인 |
| 2026-07-22 | FE-1 샘플 경로 Next 개발 서버 확인 | /oper/exmn/register?sample=Y, 사업등록 popup, 결과등록 popup 모두 HTTP 200 |
| 2026-07-22 | FE-1 사업등록 2차 보정 | popup 920×620, 5개 입력, 버튼 구성·green 스타일, client mount hydration 방어 정적 확인 |
| 2026-07-22 | FE-1 샘플 전환·라우트 재확인 | 일반 목록, 샘플 목록, 사업등록 샘플 popup, 결과등록 샘플 popup 모두 HTTP 200 |
| 2026-07-22 | FE-1 사업등록 3차 배치 보정 | 정밀조사연장 첫 줄 이동, 처리분구 높이 20rem 확장, 샘플 배지 제거 및 popup HTTP 200 확인 |
| 2026-07-22 | FE-1 사업등록 4차 배치 보정 | 정밀조사연장 한 줄·입력 7rem, 처리분구 높이 21rem, 샘플 21개 및 초과 스크롤 구조 확인 |
| 2026-07-22 | FE-1 팝업 5차 보정 | 연장 스피너 제거·최대 10자, 결과 popup 980×620, 4개 사업요약·경계선 table, 샘플 배지 제거 및 두 popup HTTP 200 |
| 2026-07-22 | FE-1 결과 popup 6차 보정 | 980×460, 닫기 제거, 강한 격자 제거, 창 스크롤 차단·본문 조건부 스크롤 및 HTTP 200 확인 |
| 2026-07-22 | FE-1 결과 popup 7차 보정 | html/body 문서 스크롤 잠금·복원, 업로드 행 높이 확대 및 HTTP 200 정적 확인 |
| 2026-07-22 | FE-1 결과 popup 최종 크기 보정 | 두 캡처 외곽 높이 차이를 반영해 definition 980×340으로 조정 |
| 2026-07-22 | FE-1 결과 popup 최종 UI 보정 | 헤더·행 gap-3 통일, 선택 파일명 파란색·굵게 표시 및 HTTP 200 확인 |
| 2026-07-22 | FE-1 결과 사업요약 순서 보정 | 사업차수→사업년도→행정구역→사업명, 비율 열·gap-8 적용 |
| 2026-07-22 | FE-1 사업·결과 WindowPopup 사용자 확인 | 사업등록과 조사결과 업로드 최종 UI 완료 판정 |
| 2026-07-23 | 조사현황 목록·상세 스크롤 보정 정적 확인 | 가로 여백 1.2rem, 전체 셀 행 선택, 양쪽 내부 스크롤 및 목록 페이지네이션 제거 확인 |
| 2026-07-23 | 변경 파일 공백·UTF-8 검사 | git diff --check 통과, 대상 코드·문서 UTF-8 확인 |
| 2026-07-23 | 조사현황 브라우저 재검증 | 3002 개발 서버 미실행으로 미수행 |
| 2026-07-23 | 조사현황 사용자 재확인 | 목록·상세 실제 가로 경계 불일치, 상세 하단 여백, 일부 열만 클릭되는 문제 확인 |
| 2026-07-23 | 조사현황 2차 구조 보정 | 동일 외부 스크롤 래퍼·stable gutter, 상세 남은 높이 사용, 전체 열 기존 cellClick 적용 |
| 2026-07-23 | 조사현황 사용자 3차 재확인 | 목록 3행에서도 스크롤·하단선 잘림, 행·탭의 시각 영역과 실제 클릭 영역 불일치 확인 |
| 2026-07-23 | 조사현황 3차 구조 보정 | 목록 18rem, 공통 표 <tr> 단위 rowClick, 80×32px 실제 button 탭, 상세 샘플 10행 적용 |
| 2026-07-23 | 조사현황 사용자 4차 재확인 | 정밀조사 연장 우측 일부부터 보고서 영역만 선택되고 앞쪽 셀은 클릭되지 않아 공통 rowClick 방식 실패 판정 |
| 2026-07-23 | 조사현황 4차 클릭 구조 교체 | 목록을 공통 Table 스타일의 화면 전용 표로 교체하고 모든 데이터 셀을 전체 면적 button으로 구성, 공통 rowClick 제거 |
| 2026-07-23 | 조사관리 상세현황 사용자 최종 확인 | 전체 행 선택, 관로·맨홀 탭, 목록·상세 배치와 상세 집계 표시 확인 완료. 조사관리 상세현황 화면 단계 완료 판정 |
| 2026-07-23 | git status·문서 정합성 점검 | 추적 코드 8개·신규 코드 15개와 FE 문서 4개를 대조하고 작업카드·구현·검증 문서의 단계 상태와 실제 파일 목록을 동기화 |
| 2026-07-23 | 사업보고서 다운로드 정적 확인 | 첨부 ID가 있는 보고서 셀의 파란 밑줄 링크, 행 클릭 전파 차단, 기존 첨부서비스 Blob 다운로드, 샘플 미연결 안내 확인 |
| 2026-07-27 | FE-0 신규 행 인라인 입력 정적 확인 | 변경상태 표시 열 제거, 선택 행정구역 신규 행 생성, 처리분구명 셀 입력, 내부 CREATE 상태 유지 확인 |
| 2026-07-27 | FE-0 기존 행 인라인 수정 정적 확인 | 선택 행 수정 버튼, 처리분구명 셀 입력 전환, 원본 대비 modified/clean 상태 복원, 수정 모달 제거 확인 |
| 2026-07-27 | FE-0 최초 자동 조회 정적 확인 | 최초 Effect에서 조건 없는 활성 목록 조회, 개발 모드 Effect 재실행 중복 요청 방지 ref 확인 |
| 2026-07-27 | FE-0 저장 후 목록 유지 정적 확인 | 임시 선택값과 적용 조회조건 분리, 성공 즉시 저장 상태 정규화·삭제 행 제거, 적용 조건 서버 재조회 확인 |
| 2026-07-27 | FE-0 실 API CRUD 사용자 확인 | 최초·조건 조회, 그리드 추가·수정, 무참조 삭제와 저장 후 최신 목록 표시까지 정상 동작 확인 |
| 2026-07-27 | FE-0 TypeScript 재실행 | pnpm 비대화형 모듈 정리 중단 및 로컬 compiler 파일 EPERM으로 결과 미확보 |
3. FE-0 검증 결과
- 신규 라우트와 feature 파일은 TypeScript 검사 출력에 오류가 없었다.
- 일괄 저장 변환은
added → CREATE,modified → UPDATE,deletePending → DELETE로 구현됐다. - 활성 행 전체의 빈 이름과 행정구역별 중복 검증이 저장 전에 실행된다.
- 기존 행 삭제는 참조 API 성공과 참조 건수 0을 확인해야 삭제대기로 전환된다.
- API 실패 시 목록 또는 변경 상태를 성공으로 위장하지 않고 오류 메시지를 표시한다.
- 서버 라우트의 feature 배럴 import를 client UI 직접 import로 교체해 Hook 포함 API 유틸이 서버 import 그래프에 노출되지 않게 했다.
- 공통
UiTable의 오름차순·내림차순·기본 순환 상태를 사용하고 표시 목록 기준으로 선택 키를 유지하도록 구현했다. - 생성 CSS 누락 영향을 받지 않도록 검색조건 필터의 전체 열·간격·폭을 인라인 값으로 고정하고, 조회 버튼을 캡처 차이만큼 이동했다.
- 주요 버튼의 흰색 글자 스타일을 통일했다.
- 신규 행은 추가 모달 없이 그리드에 생성하며 처리분구명 셀에서 직접 입력한다. 변경상태는 화면 열에서 제거하고 일괄 저장 변환을 위한 내부 상태로 유지한다.
- 기존 행은 선택 후
수정을 누르면 처리분구명 셀에서 직접 편집한다. 입력값이 원래 이름과 같아지면 수정 상태를 해제하고, 삭제대기 행은 편집 진입을 차단한다.
4. 선행 오류와 차단 사유
- 저장소 전체 TypeScript에는 지도 컴포넌트 타입, 좌표 튜플,
@common/auth,uuid, 잘못된 alias 등 기존 오류가 남아 있다. - 이번 변경이 있는
app/components/lib/api/index.ts도 기존@common/auth해석 오류 때문에 전체 검사를 완전 통과하지 못한다. - 프로덕션 빌드는 의존성 실행에 필요한 권한 승인이 거절되어 결과를 확보하지 못했다. 기능 실패로 판정하지 않는다.
- 변경 파일 단독 TSX 변환 검사는 루트에서
typescript모듈을 직접 찾을 수 없어 수행하지 못했으며, 기존 TypeScript 검사 결과와 소스 정적 확인으로 보완했다.
5. 현재 검증 상태
- FE-0 코드 정적 검증: 부분 통과
- FE-0 프로덕션 빌드: 미수행
- FE-0 화면 렌더링·최종 UI: 사용자 확인 통과, 화면 단계 완료
- FE-0 실 API: 백엔드 구현 대기
- FE-1 코드: 사업등록·결과등록 WindowPopup과 조사관리 상세현황 UI 구현·개발 서버 컴파일·사용자 확인 완료, 실 API 검증 대기
- 조사현황·관로·맨홀 종합집계 화면: 사용자 확인 통과, 화면 단계 완료
- 상세보기 실제 화면·다운로드·지도보기: 미착수/보류
- 사용자 확인 기준 화면 1~3단계: 완료
- 공식 요구사항 기준 FE-3 상세 기능과 FE-4 GIS: 미착수. 현재 맨홀은 종합집계 UI까지만 완료
6. 보류/리스크
- 백엔드 응답 필드와
409오류 body를 구현 후 대조해야 한다. - 메뉴 원천 등록과 화면 진입은 해결됐지만 최종 권한별 노출·직접 URL 접근 제어는 통합 검증에서 확인해야 한다.
- FE-0 정상 CRUD 실 API는 사용자 확인으로 완료했다. 참조 중 삭제·중복의 실제 409 응답은 별도 통합 검증으로 유지한다.
- 프로덕션 빌드는 다음 프론트 단계 시작 전 또는 사용자가 허용한 시점에 다시 실행한다.
- FE-1 multipart 필드명과 응답 DTO는 백엔드 구현 시 최종 대조해야 한다.
- TypeScript 실행 결과를 확보하지 못했으므로 사용자 개발 서버의 Next 컴파일 결과를 FE-1 단계 종료 전에 확인해야 한다.
8. FE-1 정적 검증 결과
/oper/exmn/register/page.tsx는 client UI를 직접 import해 FE-0의 서버/클라이언트 배럴 오류를 반복하지 않는다.- 사업 조회조건은 draft/applied로 분리되고 페이지·정렬 요청에도 적용 조건을 유지한다.
- 사업등록은 활성 처리분구 조회와 필수값·연도·음수·선택 검증을 저장 전에 수행한다.
- 파일 변경 시 기존 검토 결과를 폐기하고, 정상 검토 전 최종 저장 버튼을 비활성화한다.
- Tus 업로드 실패 콜백이 Promise reject와 화면 오류로 연결된다.
- PPL 상세는
PPL_UNIT_V1정규화 계약의 단위·상태·결함 필드를 렌더링하고 보고서 미확정 기능은 활성화하지 않는다. - 일반 URL의 런타임 성공 목업과 자동 fallback은 없다. 사용자 승인 샘플은
sample=Y에서만 명시적으로 격리한다. - 사용자 1차 보정으로 직접 연도 입력과 독립 지역 셀렉트를 제거하고 기존
getStartYearArray·CtpvSggPrcsFcltSelectBox를 재사용했다. - 상단 검색조건과 3개 액션을 하나의
SearchDiv에 두고PPL 집계·상세직접 버튼을 제거했다. - 목록은 사용자 확정 9개 열로 재배치했으며 총사업비는 등록 필드로만 유지한다.
- 사업등록·결과등록은 공통
windowPopup의 definition→registry→content 흐름으로 열리고 완료 메시지는 동일 origin 부모창에만 반영한다. - 사업등록 처리분구는 한글 가나다순 체크박스이며, 결과등록은 캡처 기준 파일 5종과 행별 찾기·데이터 검토 구조를 사용한다.
- 샘플 URL 세 경로는 개발 서버에서 HTTP 200을 확인했고, 사업등록·결과등록의 클릭·선택·팝업 크기·실제 시각 배치는 사용자 확인을 통과했다.
- 일반 목록의 개발 전용
샘플 데이터 보기는sample=Y로 재진입하며, 자동 성공 fallback 없이 샘플 사업 선택과 결과등록 진입을 가능하게 한다. - popup content의 첫 서버 출력에는 Radix Select를 렌더링하지 않고 client mount 후 화면을 구성해 보고된 hydration ID 불일치를 차단했다.
9. 조사현황·집계 1차 정적 검증 결과
- 원본 화면설계서 슬라이드 3·4를 이미지로 렌더링해 상단 사업목록, 행 선택, 하단 조사 상세현황, 두 조사유형 탭과 세 버튼 위치를 대조했다.
- 신규 route는 client UI를 직접 import해 Hook 포함 feature 배럴이 서버 컴포넌트 import 경계에 들어가지 않게 했다.
- 일반 모드와
sample=Y를 분리했고 샘플은 사업별 처리분구 수에 맞춘 관로·맨홀 집계만 반환한다. CCTV조사사용자 표출은 신규 조사현황 화면에 사용하지 않고관로조사,맨홀조사로 구성했다.- 세 버튼은 실제 상세·파일·지도 동작을 성공으로 가장하지 않고 미연결 또는 보류 안내만 제공한다.
- 첫 구현의 별도 조사현황 목록을 제거하고
ExmnStatusDetailPanel을 기존ExmnRegistrationPage목록 아래에 결합해 PPT 3·4의 동일 화면 선택 전·후 구조로 수정했다. - 선택 전에는 패널을 렌더링하지 않고 사업 행 선택 후에만 같은 화면 하단에 패널을 추가한다.
- 사용자 캡처에서 불필요한 선택 사업 요약 띠를 제거하고 조사유형을 공통
UITab으로 교체했다. 후속 보정에서는 분석도구의 활성 메뉴 느낌과 맞도록 기본 파란 활성 탭을 컴팩트하게 적용했다. - 합계 행은 앞의 두 열을
colSpan=2로 병합하고 연한 배경·굵은 글씨를 적용해 일반 처리분구 행과 구분했다. - 기본
Table의 외부 스크롤과 stickythead조합에서 스크롤 중 행 일부가 잘려 보이는 브라우저 문제가 사용자 캡처로 확인됐다. - 집계표를 공통
UiTable로 교체하고 내부 표 래퍼를 유일한 스크롤 컨테이너로 지정했다. 사용자 캡처에서16.2rem은 데이터 3번째 행의 하단선을 자르는 것이 확인되어16.7rem으로 보정했다. - 실행 중인 개발 서버의
/oper/exmn/register?sample=Y요청은 변경 후 HTTP 200을 반환했다. 페이지 전체 스크롤 제거와 그리드 내부 스크롤의 최종 시각 확인은 사용자 재확인 대상으로 남긴다. - 후속 캡처에서 남은 페이지 스크롤의 원인을
BaseLayout의calc(100vh - 50px)와 실제6rem헤더 높이 차이로 확인했다. 최초 경로 전용 CSS는 실제 SSR DOM에 존재하는group/sidebar-wrapper중간 래퍼를 건너뛰어 매칭되지 않았고, 선택자를.sn-exmn-base-layout > div > .flex-1 > .flex > .flex-1로 정정했다. - 합계 표시는 관로 열 비율
6%+18%, 맨홀 열 비율8%+28%를 기준으로 첫 두 열 전체 중앙에 오도록 표시 영역을 확장했다. - 보정 후 샘플 경로 HTTP 200, 초기 HTML의
sn-exmn-base-layout및group/sidebar-wrapperDOM 연결, 개발 CSS의 정확한 전용 선택자와max-height: 16.7rem생성을 확인했다. 실제 브라우저의 우측 스크롤 제거와 3번째 행 하단선 표시는 사용자 최종 확인 대상으로 남긴다. - 상세현황 표시 여부와 무관하게 조사사업 본문·Footer 합계가 뷰포트 높이를 넘지 않도록 route 전용 고정 높이와 flex 축소 구조를 적용했다. Next 개발 서버 생성 CSS에서
height: calc(100dvh - 6rem)을 확인했다. - 공통
UiTable의rowClick코드와 선택 상태가 Next 서버 번들에 생성된 것은 확인했으나 사용자 재확인에서 전체 열 클릭을 보장하지 못했다. 해당 방식은 검증 실패로 판정하고 기존cellClick전체 열 연결로 교체했다. - 3002 포트에 개발 서버 listener가 없어 신규 route의 HTTP 렌더 검증은 확보하지 못했다.
- 저장소 로컬 TypeScript compiler는 샌드박스
EPERM후 권한 요청이 허용되지 않아 실행 결과를 확보하지 못했다. 대상 소스의 필수UiTableprops와 import·client 경계는 정적으로 확인했다. - 목록과 상세현황의 동일 폭 보정 과정에서 전역
sn-exmn-grid-scroll을 사용했으나, 팝업 디자인 회귀 보고 후 해당 전역 클래스를 제거했다. 최종안은 각 조사 그리드의 인라인scrollbarGutter: "stable"만 사용한다. - 목록은 기존
cellClick을 전달하고clickableHeadIds를 지정하지 않으므로 공통UiTable계약상 모든 데이터 셀이 클릭 가능 대상이다. 선택 함수는 표시 행 인덱스로 원본 사업을 찾아selectedBusinessId를 갱신한다. - 조사사업 목록은
page=0,size=1000으로 조회하고total={0}으로 페이지 이동 UI를 숨긴다. 목록만16.7rem상한을 두고 상세 집계 래퍼는flex-1로 남은 세로 공간을 사용한다. git diff --check와 UTF-8 검사는 통과했고 개발 서버 산출물에 신규 스크롤 class와 전체 셀 callback이 포함된 것을 확인했다. 로그인 세션이 없는 검증 브라우저는/auth/login으로 이동하므로 실제 선택 동작과 최종 픽셀 정렬은 사용자 세션에서 재확인이 필요하다.- 3차
UiTable.rowClick보정도 사용자 화면에서 전체 행 선택을 보장하지 못해 실패로 판정했다. 4차 보정에서는 목록만 화면 전용 공통 Table 스타일로 교체하고, 생성 번들에서 각 셀의min-h-[4rem] w-fullbutton,<tr>보조 클릭,18rem높이와 기존 정렬 순환을 확인했다. - 탭은 생성 번들에서
tablist,aria-selected, 각w-[8rem] h-[3.2rem]button과 직접setJobType호출을 확인했다. - 당시 샘플 번들의 세 사업
trtdstCnt: 10을 확인했다. 이후 목록 내부 스크롤 검증을 위해 네 번째 사업 샘플을 추가했다. 개발 서버 라우트는 빌드 오류 없이 렌더링됐으나 검증 브라우저에 로그인 세션이 없어 실제 샘플 10행과 클릭 동작의 사용자 화면 확인은 남아 있었다. - 이후 사용자가 로그인된 실제 화면에서 전체 행 선택, 관로·맨홀 탭, 목록·상세 배치와 집계 표시를 최종 확인해 앞선 브라우저 세션 제한을 보완했다.
10. 조사사업 목록·상세현황 최종 검증 결과
ExmnRegistrationPage에서 검색조건 간격과 사업차수·사업연도·시도·시군구 선택 연결을 확인했다.- 모든 데이터 셀을 채우는 실제 button과
<tr>보조 선택 함수,data-state=selected를 확인해 전체 행 클릭과 선택 행 강조 계약을 확인했다. - 정렬 상태 전이가
asc → desc → undefined이며 서버 요청과 샘플 배열이 같은 열 키·비교 함수를 사용하는 것을 확인했다. EXMN_SAMPLE_BUSINESSES에SAMPLE-BIZ-004가 추가됐고 목록 인라인 높이 제한과 내부 스크롤로 3행 이후 데이터를 확인하는 구조를 확인했다.- 목록과 상세에 동일한 인라인 스크롤바 예약과 좌우 기준이 적용됐고 sticky 헤더·하단 보정선이 있는 것을 확인했다.
ExmnStatusDetailPanel의 관로·맨홀 선택은 각각 전체80×32px가 실제 button이며 선택 변경 시 집계를 재조회한다.summaryRequestIdRef비교로 과거 성공·오류·loading 응답이 최신 사업·탭 선택을 덮어쓰지 않는 것을 확인했다.- 합계 행은 실제
colSpan=2, 중앙 정렬, 전 셀#d2deef배경을 사용한다. - 상세 헤더는 sticky이고 상세 영역은 인라인
maxHeight: 23.8rem과 내부 세로 스크롤을 사용한다. 다음 행 일부가 하단에 노출되지 않도록 목록과 같은 높이 제한 방식을 적용했다. - 공통
layout.tsx는BaseLayout → PageLayout구조를 유지한다. 페이지 높이 계산, FooterResizeObserver, 문서 overflow 잠금·복원은ExmnRegistrationPage내부에만 존재하며 공통 Header·Footer 컴포넌트는 수정하지 않았다. - 공통
UiTable의noOuterMargin과 선택 행 상태는 소스에 남아 있으나 조사사업 목록·상세현황 최종 표는 병합·클릭·스크롤 제어를 위해 직접 구성한 테이블임을 확인했다. components.css의 의미 있는 diff가 제거됐고 조사 그리드 gutter는 두 화면 컴포넌트에만 인라인으로 적용된다.- 완료 화면 캡처와 대조해
tailwind.config.ts의./src/**/*누락이 결과등록 grid와 사업등록 임의 폭 클래스 미생성 원인임을 확인했다. 스캔 경로를 복구하고 핵심 grid·폭을 인라인 스타일로 이중 고정했다. - 사업등록은 당시
920×620, 처리분구21rem, 사업명 최대480px; 결과등록은980×340, 사업요약 4열과 파일행180px / 가변 / 80px / 112px계약으로 복구했다. 사업등록의 현재 가로 폭은 16절의 사업차수 입력 보완으로1000px다. - 사용자의 로그인된 실제 화면 최종 확인으로 행 전체 선택, 관로·맨홀 전환, 목록·상세 배치와 상세 집계 표시를 완료 판정했다.
- 남은 검증은 실 API/백엔드 연동과 후속 상세보기·다운로드 구현이다. 지도보기는 보류다.
11. 조사사업 목록 사업보고서 다운로드 검증 결과
bizRptpAtchFileId가 있는 행만 보고서 텍스트에 파란색·밑줄·hover 스타일을 적용했다.- 보고서 링크 클릭 시
stopPropagation()으로 조사사업 행 선택 동작과 파일 다운로드 동작을 분리했다. - 기존 첨부서비스 경로
/attach-service/api/v1/download/{atflId}와 공통fileDownload()를 재사용했다. - 목록 응답에는 실제 파일명이 없으므로 첨부 코드로 첨부서비스 메타데이터를 조회해
orgnlFileNm을 링크와 다운로드 파일명에 사용한다. sample=Y는 실제 첨부서비스를 호출하지 않고 안내를 표시한다.- 실제 첨부 ID를 사용한 브라우저 다운로드와 PDF 열림 확인은 백엔드·첨부 데이터 준비 후 수행해야 한다.
12. 관로·맨홀 상세보기 팝업 검증 결과
- 사용자가 조사사업 행 선택과 관로·맨홀 탭 선택 후
상세보기WindowPopup 진입을 확인했다. - 공통 팝업 디자인에 맞춘 파란 헤더·흰색 제목, 본문 상단 조회조건·조회·다운로드 배치와 사업정보 요약 띠 제거를 확인했다.
- 관로·맨홀 화면은 같은 고정 정보 열과 대·중·소 3열 구조를 사용하며 이상항목 내용만 코드 정의에 따라 달라지는 것을 확인했다.
- 상세표 헤더 배경·글꼴을 공통 그리드와 맞추고 팝업 문서 대신 표 영역에서만 가로·세로 스크롤하는 구조를 확인했다.
- 관로/맨홀번호 입력 폭을 축소하고 번호 포함 검색으로 샘플 행을 필터링하는 동작을 확인했다.
- 보고서번호부터 주행거리까지만 정렬 버튼이 표시되고
asc → desc → undefined로 순환하는 소스를 확인했다. - 소계는 연장·주행거리와 이상항목별 대·중·소 합산값을 표시한다.
- 합계는 각 이상항목의 대·중·소 3열을 병합하고 총합을 표시한다.
- 소계·합계 라벨을 보고서번호부터 규격까지 가운데 배치하고, 가로 스크롤로 규격이 사라진 뒤에도 고정열 오른쪽에서 라벨과 경계선이 유지되도록 보정했다.
- 조사사업 목록
NO정렬은 가상 필드를 서버에 전달하지 않고 조회 원본 정·역순으로 동작한다. - 조사 상세현황은 합계 행을 정렬 배열 밖에 유지하고 처리분구 데이터 행만 모든 표시 열에서 정렬한다.
- 상세현황 버튼 순서를
상세보기 → 지도보기 → 다운로드로 변경하고 다운로드 버튼에 기존 초록색을 적용했다. - 사용자가 최종 화면을 확인하고 상세보기 프론트 화면을 완료 판정했다.
git diff --check는 통과했다. 실행 중 개발 서버 보호와 로컬 TypeScript compiler의 샌드박스EPERM이력 때문에 별도 프로덕션 빌드·타입 검사는 수행하지 않았다.- 실 상세 API, JSONB 코드 매핑, 실제 엑셀 다운로드와 지도보기는 검증되지 않았으며 후속 범위다.
13. 결함 분류별 상세보기와 팝업 최종 보완 검증 결과
- 구조적·운영적 결함 건수가 1개 이상일 때만 파란색 밑줄 링크와 팝업 클릭 동작이 활성화되는 조건을 소스에서 확인했다.
- 링크 클릭이 처리분구 선택과
defectType=STRUCTURAL|OPERATIONAL상세 팝업 열기를 함께 수행하는 것을 확인했다. - 상단 상세보기는 기본값
ALL을 전달하며 잘못된defectType은 팝업 content에서ALL로 정규화한다. - 관로·맨홀 상세표 모두 선택 분류의 코드 열과 해당 결함이 존재하는 시설 행만 남기는 필터를 확인했다.
- 구조적·운영적 내부결함 고정 열과 관련 샘플 필드가 제거됐고 이상항목 헤더가
명칭 (코드)로 표시되는 것을 확인했다. - 소계·합계가 필터 후 표시 행·열을 기준으로 다시 계산되는 것을 소스와 샘플 데이터로 확인했다.
- 사업등록의 처리분구 검색·검색결과 선택·초기화와 결과등록의 읽기 전용 사업정보 요약 구현을 확인했다.
- 사업등록·결과등록·상세보기 팝업이 공통 파란 헤더와 옅은 파란 본문 배경을 사용하는 것을 확인했다.
git diff --check정적 검증을 수행 대상으로 유지한다.- 이번 문서 반영 시점에는 로그인 세션이 없어 브라우저 자동 재검증을 수행하지 못했다. 기존 사용자 화면 완료 판정을 유지하되 이번 결함 분류 링크는 로그인된 화면에서 최종 클릭 확인이 필요하다.
- 로컬 TypeScript compiler는 샌드박스
EPERM이력으로 별도 실행하지 않았다. 이는 기능 실패가 아니라 실행 환경 차단으로 분류한다.
14. 흡수한 기존 문서
- 없음
15. 관로 본단위구간과 결함별 상세 팝업 검증 결과
15.1 확인 결과
- 관로 전체 상세보기에서
관로·본단위구간전환 UI가 표시되고, 맨홀 상세보기에서는 표시되지 않는 분기를 소스로 확인했다. - 본단위구간 초기 진입 시 3개 샘플 관로의 33개 상세 레코드를 표시하고 관리번호 입력 시 부분 일치로 거르는 동작을 확인했다.
- 구조적·운영적 결함 건수 링크 팝업에서 조회 조건 영역이 제거되고 제목, 조회 건수, 합계 정보와 다운로드가 한 행에 표시되는 화면을 사용자가 확인해 완료 판정했다.
defectType=ALL과defectType=STRUCTURAL팝업 경로가 로컬 개발 서버에서 각각 HTTP 200으로 응답하는 것을 확인했다.- 다운로드 구현이 현재 정렬·필터 결과와 표시 열을 전달하고 전체·분류별 표의 소계·합계 및 본단위구간 14개 열을 생성하는 것을 소스로 확인했다.
- 변경 파일에 대한
git diff --check를 통과했다.
15.2 미수행·후속 검증
- 생성된 실제
.xlsx파일을 Excel에서 열어 병합 범위와 소계·합계 값을 대조하는 검증은 아직 수행하지 않았다. - 로컬 TypeScript compiler는 기존 샌드박스
EPERM이력에 따라 별도 실행하지 않았다. - 실제 서버 JSONB 데이터 연결과 코드·점수·단위구간 매핑 검증은 백엔드 연동 단계의 후속 항목이다.
- 지도보기는 보류 범위로 이번 검증 대상에 포함하지 않았다.
16. 2026-07-27 사업등록 사업차수·행정구역 배치 보완 검증 결과
- 사업차수 입력 상태가 추가되고 기존 고정
bizCycl: 1대신 입력값을 저장 요청에 전달하는 소스를 확인했다. - 검증 함수가 사업차수를 1 이상의 정수로 제한하도록 변경된 것을 확인했다.
- 첫 줄을
사업차수 → 사업년도 → 시도 → 시군구 → 정밀조사연장, 둘째 줄을사업명으로 구성했다. - 과도한
justify-between배치를 제거하고 항목 묶음 사이를 20px 고정 간격으로 조정했다. - 시도 180px, 시군구 144px와 사업등록 WindowPopup
1000×620설정을 확인했다. - 공통 행정구역 컴포넌트의
compact기본값이false여서 기존 호출 화면에는 새 폭이 자동 적용되지 않는다. - 변경 파일을 포함한 프론트 저장소
git diff --check를 통과했다. - 로그인되지 않은 브라우저에서는 사업등록 경로가 로그인 화면으로 이동해 최종 팝업 시각 확인을 수행하지 못했다. 사용자 화면 확인을 최종 완료 조건으로 유지한다.
17. 2026-07-28 조사사업 실제 API·양식 다운로드 검증 결과
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 페이지 최초 조사사업 조회 | 통과 | 사용자 로그인 화면 확인 |
| 조사사업 등록 후 목록 갱신 | 통과 | 저장 결과 즉시 표시 |
| 등록 후 상세현황 자동 열림 방지 | 통과 | 목록만 갱신 |
| 기존 사업 수정 팝업 정보 복원 | 통과 | 기본정보·처리분구 복원 |
| 정밀조사연장 숫자 입력 | 통과 | 입력·저장 확인 |
| 처리분구별 조사 입력양식 다운로드 | 통과 | 다중 시트 생성 확인 |
| 본단위등급표 동적 관로번호 | 통과 | #REF! 없이 표시 |
| 첫 처리분구만 예시 데이터 유지 | 통과 | 이후 시트는 빈 입력 양식 |
| 이후 관로조사 글꼴 검정색 | 통과 | 사용자 최종 확인 |
| 결과 미등록 상세현황 | 통과 | 오류 배너 없이 조회 결과 없음 표시 |
| 조사보고서 양식 최종 클릭 | 확인 필요 | API와 프론트 호출 구현 완료 |
남은 검증
- 다음 파일 업로드 단계에서 생성 양식 업로드와 Excel 파서 호환성을 확인한다.
- 지도보기는 기존 보류 범위를 유지한다.
18. 2026-07-29 결과등록 파일별 검토 내역 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 파일별 검토 결과 독립 보관 | 통과 | Excel·관로 PDF·맨홀 PDF 상태와 메시지를 파일 구분별로 관리 |
| Excel 재선택 시 의존 검토 초기화 | 통과 | 관로·맨홀 PDF 검토 상태와 내역을 함께 폐기 |
| 검토 항목·건수·실패 사유 표시 | 통과 | 검토한 파일만 하단 내역에 표시 |
| 최종 저장 검토 해시 | 통과 | 조사결과 Excel의 정상 검토 결과를 사용 |
| 프론트 변경 공백·문법 흔적 검사 | 통과 | 대상 파일 git diff --check 통과 |
남은 검증
- 실제 로그인 화면에서 세 파일을 순서대로 검토해 하단 내역의 높이, 문구, 성공·실패 색상을 최종 확인한다.
- 맨홀 PDF 내부 번호 대조는 검토 기준 확정 후 별도 검증한다.
19. 2026-07-29 사업보고서 원본 파일명 표시 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 첨부 메타데이터 원본 파일명 조회 | 통과 | 원문 JSON의 직접 배열·data·content 응답을 정규화한 뒤 첨부 ID가 일치하는 orgnlFileNm 선택 |
| 목록 보고서 셀 표시 | 통과 | 원본 파일명 우선, 메타데이터 실패 시 있음, 미첨부 시 없음 |
| 다운로드 파일명 | 통과 | 원본 파일명 우선 사용 |
| 목록 조회 장애 격리 | 통과 | 첨부 메타 조회 실패를 행별 null로 처리 |
| 변경 파일 공백 검사 | 통과 | git diff --check 통과 |
남은 검증
- 로그인된 실제 화면에서 저장된 사업보고서 원본 파일명이 표시되고 같은 이름으로 다운로드되는지 확인한다.
20. 2026-07-29 결과등록 사용자 통합 검증과 목록 UI 최종 확인
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 조사결과 Excel 데이터 검토 | 통과 | 처리분구별 PPL·MNHL 및 본단위구간 검토 완료 |
| 관로 PDF 관로번호 검토 | 통과 | PDF 관로번호가 Excel 관로번호에 포함되는지 확인 |
| 파일별 검토 상태 표시 | 통과 | 성공은 연한 초록색·검토 완료, 실패는 연한 빨간색·검토 실패 |
| 최종 저장 활성 조건 | 통과 | Excel과 관로 PDF 검토가 모두 정상일 때 활성 |
| 조사결과 최종 저장 | 통과 | 사용자 화면에서 PPL/MNHL 저장·집계 완료 메시지 확인 |
| 사업보고서 원본 파일명 표시 | 통과 | 있음 대신 첨부 원본 파일명 표시 확인 |
| 보고서 열 폭 | 통과 | 보고서 22%, 사업차수 6%, 처리구역·분구/정밀조사 연장 각 8% |
| 좁은 헤더 한 줄 표시 | 통과 | 헤더 줄바꿈 금지와 간격·글자 크기 보정 |
| 프론트 공백 검사 | 통과 | git diff --check |
남은 검증
- 사업보고서 링크 클릭 시 첨부 원본 파일명으로 실제 다운로드되는지 최종 확인한다.
- 맨홀 PDF 내부 맨홀번호 대조는 검토 기준 협의 후 구현·검증한다.
- GIS 기준시설과 조사결과 시설번호 대조 및 지도보기는 후속 범위다.
21. 2026-07-29 조사 상세현황 실제 집계 조회
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 프론트 API URL·파라미터 계약 | 정적 확인 | /sections?jobType=PPL|MNHL |
| 관로 집계 필드 매핑 | 정적 확인 | PPL 전체이상·구조·운영·기타, 연장·주행거리 |
| 맨홀 집계 필드 매핑 | 정적 확인 | MNHL 전체이상·구조·운영·기타 |
| 빈 배열 화면 | 정적 확인 | 조회된 결과가 없습니다. |
| 빠른 사업·탭 전환 보호 | 유지 | request id 기반 이전 응답 차단 |
| 실제 서버 화면 검증 | 대기 | 백엔드 재기동 후 사용자 확인 필요 |
남은 검증
- 결과가 저장된 사업을 선택해 관로·맨홀 탭의 처리분구별 수치와 DB 집계를 대조한다.
- 결과 미등록 사업에서 오류 배너가 표시되지 않는지 확인한다.
22. 2026-07-29 조사 상세보기 전체 집계 API 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 상세 API 요청 | 정적 확인 | 사업·처리분구·PPL/MNHL·관리번호 전달 |
| 실제/샘플 데이터 분리 | 통과 | sample=Y는 기존 샘플, 일반 URL은 서버 응답 |
| 기존 표 계약 유지 | 통과 | 고정 열·다단 결함 열·소계·합계·정렬 재사용 |
| 요청 순서 보호 | 통과 | effect cleanup 후 이전 응답 무시 |
| 후속 기능 격리 | 통과 | UNIT·결함별 화면은 아직 실 API 미호출 |
| 변경 공백 검사 | 통과 | git diff --check |
잔여 확인
- 실제 서버 재기동 후 상세보기 팝업의 6개 PPL·6개 MNHL 시설과 JSONB 코드별 대·중·소 값을 확인한다.
- 본단위구간, 결함별 조회와 서버 다운로드는 다음 단계에서 검증한다.
23. 2026-07-29 맨홀 전체 상세표 고정정보 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 맨홀 식별 열 용어 | 통과 | 맨홀번호 대신 관로번호 표시 |
| 관로 고정 열 | 정적 확인 | 보고서번호부터 주행거리까지 표시 |
| 맨홀 구조·운영 등급 | 정적 확인 | 공통 열 뒤에 시설 등급코드 두 열 표시 |
| 소계·합계 | 정적 확인 | 관로는 연장·주행거리, 맨홀은 구조·운영 등급까지 합산 |
| 조사유형별 결함 열 | 정적 확인 | 고정 열 이후 PPL/MNHL 코드 정의 분기 |
| 엑셀 다운로드 열 | 정적 확인 | 관로·맨홀 화면별 고정 열과 결함 집계 생성 |
| 변경 화면 ESLint | 통과 | ExmnSurveyDetailPopupPage.tsx 오류·경고 없음 |
남은 검증
- 실제 맨홀 상세 팝업에서 덕풍 3건의 공통 기본정보·등급과 결함별 대·중·소 건수를 확인한다.
- 가로 스크롤 시 두 고정 열과 소계·합계 라벨 경계가 유지되는지 확인한다.
- 현재 브라우저 세션은 로그인 화면이므로 인증 후 실제 팝업을 재확인한다.
24. 2026-07-29 상세보기 처리분구 선택 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 조사유형별 처리분구 목록 | 정적 확인 | 기존 /sections API를 PPL·MNHL로 구분 호출 |
| 진입 처리분구 기본값 | 통과 | 조사 상세현황에서 선택한 처리분구 ID 유지 |
| 처리분구 변경 재조회 | 정적 확인 | 선택 ID를 시설 상세 API에 전달 |
| 이전 조회 상태 초기화 | 통과 | 상세 행·관리번호·정렬·안내 초기화 |
| 제목·다운로드 이름 | 통과 | 현재 선택 처리분구명 사용 |
| 대상 화면 ESLint | 통과 | ExmnSurveyDetailPopupPage.tsx 오류·경고 없음 |
| 변경 공백 검사 | 통과 | git diff --check |
남은 검증
- 로그인된 실제 화면에서 덕풍처리분구로 진입한 뒤 초이처리분구를 선택해 표 내용과 제목이 함께 변경되는지 확인한다.
- 관로 상세보기에는 PPL 처리분구만, 맨홀 상세보기에는 MNHL 처리분구만 표시되는지 확인한다.
25. 2026-07-29 관로 본단위구간 실데이터 연결 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 실제 API 연결 | 통과 | PPL 단위구간 전용 API 호출 |
| 초기 전체 조회 | 정적 확인 | 관리번호 없이 현재 처리분구 전체 |
| 관리번호 부분 조회 | 정적 확인 | 조회 버튼 확정값 전달 |
| 상태·결함 명칭 | 통과 | 코드 기반 프론트 매핑 |
| 빈 상세 단위구간 | 통과 | 결함 필드 하이픈 표시 |
| 기존 샘플·다운로드 | 유지 | 현재 14열 화면 계약 재사용 |
| 대상 ESLint | 통과 | 관련 4개 파일 오류·경고 없음 |
남은 검증
- 사용자 환경에서 관로 상세보기 →
본단위구간전환 후 덕풍·초이 전체 관로가 표시되는지 확인한다. - 관리번호 일부를 입력해 해당 관로 단위구간만 표시되는지 확인한다.
- 구조·운영 결함별 상세와 서버 다운로드는 다음 단계에서 검증한다.
본단위구간 표 너비 회귀
- 세로 스크롤 유무와 관계없이 표가 스크롤 컨테이너의 가로 폭을 채우도록 너비 계약을 보정했다.
- 컨테이너가 1422px보다 작을 때는 기존 내부 가로 스크롤 동작을 유지한다.
조사중단사유·비고 셀 분리
- 조사중단사유와 비고에 단위구간
rowSpan이 적용되지 않는 것을 소스로 확인했다. - 각 상세 행에 두 셀이 각각 렌더링되어 행별 구분선이 유지되는 것을 확인했다.
26. 2026-07-29 구조·운영 결함별 실데이터 연결 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 결함 링크 요청 | 통과 | 선택 defectType을 시설 상세 API에 전달 |
| 간소화 팝업 | 통과 | 조회조건·모드 없이 결과와 다운로드 표시 |
| 선택 코드 열 | 통과 | 구조 또는 운영 코드 정의만 사용 |
| 선택 시설 행 | 통과 | 선택 분류 결함이 존재하는 행만 표시 |
| 소계·합계 | 통과 | 현재 표시 행·열 기준 계산 |
| 대상 ESLint | 통과 | API·팝업 변경 파일 오류 없음 |
남은 검증
- 사용자 환경에서 관로·맨홀 각각 구조적·운영적 결함 링크를 열어 화면 건수와 DB JSONB를 대조한다.
- 현재 화면 기준 엑셀 파일의 열·소계·합계를 팝업과 대조한다.
27. 2026-07-30 조사 상세현황 다중 시트 다운로드 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 프론트 API 연결 | 구현 | /sections/download?jobType=PPL|MNHL |
| 다운로드 파일 | 구현 | 서버 Blob 1개 저장 |
| 시트 계약 | 정적 확인 | 종합집계 1 + 처리분구 상세 N |
| 본단위구간 제외 | 정적 확인 | 서버 생성 계약에서 제외 |
| 빈 결과·진행 상태 | 구현 | 버튼 비활성·안내 표시 |
| 샘플 모드 | 제거 | 실제 API만 사용하도록 단일화 |
| ESLint | 미실행 | pnpm TTY 오류와 로컬 eslint 파일 접근 EPERM |
남은 검증
- 로그인된 실제 화면에서 관로·맨홀 탭별 다운로드를 실행한다.
- Excel에서 처리분구 10개 기준 11개 시트인지 확인한다.
- 첫 시트 종합집계와 각 처리분구 상세의 소계·합계를 화면 값과 대조한다.
28. 2026-07-30 샘플 데이터 보기 제거 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 샘플 데이터 파일 | 제거 | exmn-sample-data.ts 삭제 |
| 샘플 URL·상태 분기 | 통과 | 기능 범위에서 sample=, sampleMode 참조 0건 |
| 목록·팝업 실제 API | 통과 | 사업·처리분구·검토·집계·상세 API 호출 유지 |
| 양식 생성 예시행 정리 | 영향 없음 | 백엔드 실제 양식 생성 로직 유지 |
| 전체 빌드 | 미실행 | 사용자 요청에 따라 정적 확인만 수행 |
남은 검증
- 조사관리 최초 진입과 사업 행 선택 시 실제 목록·상세현황이 조회되는지 확인한다.
- 사업등록/수정, 결과등록, 전체 상세와 본단위구간 WindowPopup이 실제 데이터로 열리는지 확인한다.
- 과거
sample=Y주소로 진입해도 샘플 화면이 아닌 실제 데이터가 표시되는지 확인한다.
29. 2026-07-30 샘플 제거 변경분 코드 리뷰 결과
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 목록 최초 조회 | 통과 | 빈 조회조건으로 실제 목록 API 호출 |
| 등록·수정 후 동기화 | 통과 | popup 메시지 수신 후 현재 조건으로 목록 재조회 |
| 결과등록 | 통과 | 실제 상세조회·검토·첨부 연결·commit 흐름 유지 |
| 종합집계 | 통과 | 선택 사업·조사유형으로 실제 집계 API 호출 |
| 전체·본단위·결함별 상세 | 통과 | 사업·처리분구·유형 파라미터와 실제 API 호출 유지 |
| WindowPopup props | 통과 | 제거된 샘플 props 참조 없음 |
| 런타임 샘플 참조 | 통과 | 기능 범위 검색 결과 0건 |
| diff 형식 | 통과 | 프론트·공통 문서 git diff --check 오류 없음 |
| TypeScript/전체 빌드 | 미실행 | 로컬 TypeScript 접근 EPERM, 사용자 요청에 따라 장시간 빌드 생략 |
남은 수동 회귀
- 로그인된 실제 화면에서 최초 목록, 등록·수정, 결과등록과 상세 팝업을 한 번씩 진입한다.
- 관로·맨홀 다운로드 파일의 시트 수와 화면·DB 집계값을 대조한다.
- 과거
sample=Y북마크가 존재하더라도 실제 API 화면으로 동작하는지 확인한다.
30. 2026-07-30 배수방식·관종 명칭 표시 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 상세 응답 타입 | 반영 | 코드 2개와 명칭 2개를 함께 유지 |
| 화면 표시 우선순위 | 정적 확인 | 명칭 우선, 없으면 코드 |
| 고정 열 정렬 | 정적 확인 | 화면 표시 명칭 기준 |
| 클라이언트 상세 Excel | 정적 확인 | 배수방식·관종 명칭 기록 |
| 기존 상세표 구조 | 영향 없음 | 고정 열·결함 열·소계·합계 유지 |
| 변경 공백 검사 | 통과 | git diff --check |
| 대상 ESLint | 환경 제한 | pnpm 비대화형 설치 중단 및 eslint 모듈 접근 EPERM |
남은 수동 확인
- 백엔드 재기동 후 관로·맨홀 상세표에서
우수관,흉관(HP)명칭을 확인한다. - 배수방식·관종 헤더 정렬이 표시 명칭 순으로 동작하는지 확인한다.
- 클라이언트 상세 Excel과 서버 다중 시트 Excel에서 코드 대신 명칭이 출력되는지 확인한다.
31. 2026-07-31 지도보기 이동·조사결과 레이어 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 지도 이동 query | 통과 | 사업·행정구역·조사유형·처리분구 전달 |
| 초기 행정구역 연계 | 통과 | 기존 지도 검색 이벤트 재사용 |
| 조사결과 트리 구성 | 통과 | 루트와 PPL·MNHL 가상 노드 구성 |
| 설정 조건 | 통과 | 사업차수·구조·운영 등급 3개만 제공 |
| 자동 조회 | 통과 | 설정 변경 시 레이어 재조회 |
| 레이어 분리 | 통과 | PPL 선·MNHL 점 소스와 필터 상태 독립 |
| 응답 순서 보호 | 통과 | 조사유형별 요청 순번 적용 |
| 변경 공백 검사 | 통과 | git diff --check |
| 대상 ESLint | 환경 제한 | pnpm 비대화형 설치 중단, 직접 eslint 모듈 접근 EPERM |
| 브라우저 수동 검증 | 대기 | 서버 재기동 후 실제 지도에서 확인 필요 |
남은 수동 확인
- 조사관리에서 진입한 시도·시군구가 지도 검색조건과 중심 위치에 동일하게 반영되는지 확인한다.
- 관로조사·맨홀조사 레이어를 각각 또는 동시에 켜고 3개 조건의 자동 필터 결과를 대조한다.
- 조사시설을 클릭했을 때 기존 선택 모듈이 시설을 인식하는지 확인한다.
- 전용 오른쪽 조사관리 탭은 다음 구현 단계에서 별도로 검증한다.
32. 2026-07-31 지도 우측 조사관리 탭 정적 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 조사관리 탭 분기 | 통과 | surveyOverlayType=EXMN_RESULT를 일반 시설보다 우선 판별 |
| 탭 식별자 | 통과 | 조사시설물 ID와 맨홀 위치로 구성 |
| 조사 결과 주입 | 통과 | 관로·맨홀 입력정보 컴포넌트에 선택적 ReactNode 전달 |
| 관로 부분 PDF 호출 | 통과 | 사업 ID와 관로번호를 URL 인코딩하여 Blob 조회 |
| 맨홀 PDF 보류 | 통과 | 버튼과 별도 보류 안내 모두 미표시 |
| 변경 공백 검사 | 통과 | 프론트·백엔드 git diff --check |
| 브라우저 수동 검증 | 대기 | 개발 서버에서 실제 지도 선택과 팝업 허용 상태 확인 필요 |
- 사용자 요청에 따라 전체 프론트 빌드와 장시간 Gradle 작업은 수행하지 않았다.
33. 2026-07-31 조사관리 탭 유지관리 영역·부분 PDF 보정
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 조사관리 전용 표시 | 정적 통과 | 조사결과 아래 일반 유지관리 3개 영역 숨김 |
| 일반 관로 탭 회귀 | 정적 통과 | 조사관리 탭이 아닐 때 기존 유지관리 영역 유지 |
| 부분 관로 PDF | 정적 통과 | PDF에 포함된 활성 관로 쪽 범위만 저장 |
| PDF의 미등록 관로 | 정적 통과 | 활성 조사시설에 없는 번호가 있으면 저장 거부 |
| 선택 관로 PDF 누락 | 정적 통과 | 선택 관로 보고서 없음 메시지 반환 |
| 브라우저·단위 테스트 | 대기 | 백엔드 재기동 후 실제 첨부 PDF로 확인 필요 |
34. 2026-07-31 최종 정적 회귀점검
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 처리분구·사업·결과등록 | 구현 확인 | 실제 API 호출과 저장 후 재조회 흐름 유지 |
| 종합·전체·본단위·결함별 조회 | 구현 확인 | PPL/MNHL 및 ALL/STRUCTURAL/OPERATIONAL 계약 유지 |
| 다중 시트 다운로드 | 구현 확인 | 종합 1 + 처리분구 상세 N, 본단위구간 제외 |
| 지도 이동·행정구역 | 구현 확인 | 시도·시군구 query와 공통 검색 이벤트 연결 |
| 지도 조사 레이어 | 구현 확인 | PPL 선·MNHL 점, 사업차수·구조·운영 등급 필터 |
| 조사유형 시각 구분 | 구현 확인 | 관로 노란색, 맨홀 보라색, 탭 명칭에 조사유형 표시 |
| 관로 부분 PDF | 구현 확인 | exmnPipeReport WindowPopup과 Blob URL 정리 |
| 일반 시설 회귀 | 정적 확인 | 조사 탭에서만 유지관리 영역을 숨김 |
| 변경 공백 검사 | 통과 | 프론트·백엔드 git diff --check |
| 전체 빌드·대상 테스트 | 미실행 | 장시간 실행 이력과 사용자 검증 방침에 따라 생략 |
정적 보완 결과
ExmnSurveyResultSection.tsx의!p-0r를!p-0으로 수정했다.- 맨홀 공간조회에도 관로와 동일한 시군구코드 앞 5자리 제한을 적용했다.
ExmnMapLayerServiceTest의 맨홀 Repository 모킹 대상을 실제 서비스 호출 메서드와 지역 인자에 맞췄다.
최종 수동 확인
- 로그인된 지도에서 관로·맨홀 동시 표시, 필터 연속 변경, 설정 스크롤 유지와 우측 탭 시각 구분을 확인한다.
- 실제 관로 PDF를 페이지 범위 미저장·저장 상태에서 각각 열어 WindowPopup 표시와 재사용 여부를 확인한다.
- 동일 맨홀번호가 여러 시군구에 있는 자료로 지역 제한 적용 후 반환 지점을 대조한다.
35. 2026-07-31 관로 보고서 미등록 선분기 점검
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 지도 응답 첨부 여부 | 정적 통과 | reportAvailable 속성 전달 |
| 보고서 미등록 | 정적 통과 | WindowPopup 없이 alert 표시 |
| 보고서 등록 | 정적 통과 | 기존 exmnPipeReport WindowPopup 호출 |
| 부분 PDF 분석 실패 | 기존 동작 유지 | 팝업 내부 백엔드 오류 표시 |
| 브라우저 수동 검증 | 대기 | 보고서 등록·미등록 사업을 각각 선택해 확인 |
36. 2026-08-06 지도보기 처리분구 선택 조건 점검
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 처리분구 미선택 | 정적 통과 | 지도보기 비활성화 및 선택 안내 title 표시 |
| 처리분구 행 선택 | 정적 통과 | 선택 행 기준 버튼 활성화 |
| 지도 이동 조건 | 정적 통과 | trtdstId, trtdstNm 필수 전달 및 함수 내부 방어 조건 적용 |
| 합계 행 | 정적 통과 | 클릭 선택 이벤트가 없어 지도 대상이 되지 않음 |
| 브라우저 수동 검증 | 대기 | 관로·맨홀 탭 각각에서 미선택·행 선택 상태 확인 필요 |
37. 2026-08-06 맨홀조사 선택 심볼 유지 점검
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 실제 레이어 스타일 조회 | 정적 통과 | 선택기의 getLayer(feature)와 레이어 getStyleFunction() 연결 |
| 점 시설 렌더링 순서 | 정적 통과 | 선택 원형 강조 후 원래 아이콘을 위에 렌더링 |
| 선형 시설 회귀 | 정적 통과 | 기존 스타일 뒤에 선형 선택 강조를 추가하는 순서 유지 |
| 변경 공백·구문 검사 | 통과 | git diff --check, node --check 수행 |
| 브라우저 수동 검증 | 대기 | 맨홀 클릭 후 보라색 맨홀 심볼과 선택 원이 함께 유지되는지 확인 필요 |
38. 2026-08-28 조사 입력양식 다운로드 검증
| 검증 항목 | 결과 | 근거 |
|---|---|---|
| 저장 전 클릭 안내 | 통과 | 사업정보를 먼저 저장해주세요. 안내 표출 확인 |
| 등록 화면 사업별 양식 버튼 | 통과 | 양식다운로드 버튼 0개 |
| 등록 화면 공통 보고서 양식 | 통과 | 조사보고서 양식다운로드 버튼 1개 유지 |
| 수정 화면 사업별 양식 버튼 | 통과 | 저장 사업 신사업에서 양식다운로드 버튼 1개 |
| 수정 화면 공통 보고서 양식 | 통과 | 조사보고서 양식다운로드 버튼 1개 유지 |
| 실제 파일 생성 | 통과 | 신사업_조사입력양식 (2).xlsx, 188,261바이트 생성 |
| 정적 검사 | 통과 | 전체 TypeScript, 대상 Prettier, git diff --check 통과 |
| Next build | 미수행 | 사용자 실행 중인 3002 개발서버 보호 기준에 따라 생략 |
- API·DB 변경 없음. 판정: PASS.
39. 2026-08-28 사업등록·수정 양식 버튼 검증
| 검증 항목 | 결과 | 비고 |
|---|---|---|
| 사업등록 버튼 순서 | 정적 통과 | 양식다운로드 → 조사보고서 양식다운로드 → 저장 → 취소 |
| 저장 전 입력양식 | 정적 통과 | 사업 ID가 없어 비활성 |
| 저장 전 hover 안내 | 정적 통과 | 사업정보와 처리분구 저장 안내 표시 |
| 신규 저장 후 팝업 | 정적 통과 | 부모 목록 갱신 메시지 전송, 팝업 유지·입력 잠금·양식 활성 |
| 수정 버튼 순서 | 정적 통과 | 양식다운로드 → 저장 → 취소, 조사보고서 양식 미표시 |
| 수정 후 양식 | 정적 통과 | 저장된 최신 처리분구 기준 재생성 |
| 변경 파일 ESLint | 통과 | 오류·경고 0건 |
sn TypeScript 검사 |
통과 | tsc --noEmit, 기존 설정값은 명령줄 ignoreDeprecations=5.0으로 보정 |
| 로그인 브라우저 | 대기 | 사업등록 저장 후 두 다운로드와 수정 팝업 버튼 3개 최종 확인 |
40. 2026-09-01 조사사업 공통코드 프론트 표시 빠른 검증
- 실제 CMS 캐시 API 확인
- 결함등급 5건, 기록유형 2건, 결함분류 3건, 심각도 3건, 상태그룹 4건
- 관로 조사항목 31건, 맨홀 조사항목 23건
- 총 71개 코드가 계획한 그룹별 건수로 조회됐다.
git diff --check는 줄바꿈 변환 경고 외 whitespace 오류 없이 통과했다.- 사용자 요청에 따라 전체 TypeScript 검사와 Next 빌드는 수행하지 않았다.
- 조사 종합집계 필터, 조사 상세표·Excel, 본단위등급표와 시설 상세의 코드명 수동 검증이 남아 있다.
2026-10-01 조사 레이어 검색 독립 표출 검증
- BE compileJava --offline 통과. 임시 ExmnMapLayerScopeTest 10건 통과(실패 0/오류 0): 다지역 동일 번호 분리, 지역 미확정, 중복 도형 배제, 번호/도형 누락 분류, 빈 결과, 선택 사업/분구 전달·연결 검증, 모순 지역 조건, 상류맨홀만 반환, 501건 배치 분할. 처음 2건의 Mockito 중첩 stubbing 오류는 테스트 fixture를 수정한 후 모두 통과했다.
- FE tsc --noEmit --incremental false --pretty false 통과. Git 공백 검사 통과.
- 실제 8883 API: 지역 없는 PPL 40/40/누락0, MNHL 40/18/누락22(도형 없음22), 제보 테스트 사업·덕풍 PPL 3/3/누락0, 동일 MNHL 3/0/도형없음3. 순서는 matched/returned/missing이다.
- 등급6과 사업 없는 처리분구 요청은 HTTP400 확인. 정상 조회는 HTTP200 확인.
- 실제 3002 Chrome: 검색 없는 /map에서 조사결과 체크 후 관로40·맨홀18 안내 확인, 해제 후 설정 카드 제거 확인. 상세현황 URL로 덕풍 관로 강조와 줌18 이동 육안 확인, 관로 체크 해제 시 강조선 제거 및 재체크 후 40개 조회 복구 확인.
- 현재 전체 PPL 단일 측정: UTF-8 약36,262 bytes, 약856ms. 전국 대량 자료 부하검증을 의미하지 않는다. bbox는 계획대로 후속 성능 개선 단계다.
- 맨홀 미연결은 상류번호 누락이 아니라 해당 지역 GIS에서 도형을 찾지 못한 결과다. 덕풍3건 및 전체22건 원천 정합성 보정은 별도 확인이 필요하며 자동으로 다른 위치에 표시하지 않는다.
- 필터 변경/취소의 모든 경쟁조건, 보고서 PDF, 전국 대량 렌더링 전체 회귀는 미실행이다. 기존 테스트 자산은 수정하지 않았고 이번 임시 검증파일은 결과 요약 후 정리한다.
2026-10-01 후속 사용자 확인
- 사용자 확인으로 조사 레이어 ON/OFF 정상 표출을 확인했다.
- 사용자 요청에 따라 별도 파란 선택 강조를 제거하고 기본 조사 색상 및 선택 영역 위치 이동을 유지했다. 앞선 강조선 검증은 제거 전 기록이다.
2026-10-01 조사결과 업로드 양식 미준비 안내
- 사용자 요청은 양식 생성 절차를 생략하는 수정이 아니라 미생성 상태에 ‘양식 받기’ 선행 안내를 제공하는 것이다.
- 실제 다운로드 이력 대신 활성 처리분구의 pplExmnSheetNm/mnhlExmnSheetNm 존재 여부를 기존 사업 상세 API로 확인한다.
- 팝업 진입, 데이터 검토 전, 저장 확인·첨부 업로드 전에 확인한다. 검토 후 사업 수정으로 시트 연결이 초기화됐으면 이전 검토 상태를 폐기하고 안내한다.
- 문구: “조사 입력양식이 준비되지 않았습니다. 사업정보에서 ‘양식 받기’를 먼저 실행한 후 조사결과를 등록해 주세요. 사업정보를 수정한 경우에도 양식을 다시 받아야 합니다.”
- FE ExmnResultRegisterPopupPage.tsx와 exmn-business-validation.ts에 안내/사전 확인을 추가하고 BE ExmnSurveyResultParser의 SHEET_NAME_NOT_ASSIGNED 메시지도 같은 행동 안내로 보완했다. 자동 양식 생성·DB 변경·기존 저장 필수조건 변경은 하지 않았다.
- 검증: 미생성/부분생성/공백/정상/처리분구 없음 5건 통과, FE 타입 검사와 BE compileJava --offline 및 diff --check 통과. 임시 파일 생성 없음. 실제 파일 업로드/저장 및 브라우저 회귀는 미실행이다.
- 롤백은 이번 안내·사전 확인과 parser 오류문구만 복원한다. 실제 다운로드 성공 여부를 추적하는 기능은 아니다.
2026-10-01 후속 지시: 저장 시에만 조사양식 안내
- 앞선 초기 진입/데이터 검토 단계의 양식 준비 안내와 프론트 사전 차단을 제거했다. 저장을 누른 경우에만 공통 alert로 “조사관리에서 해당 사업 행 선택 → 수정 → 조사양식 받기 후 결과등록 재진행”을 안내한다. 검토 결과는 보존한다.
- 검토 API는 양식 생성과 같은 명명 규칙으로 미등록 시트명만 메모리에서 보완한다. 저장된 시트명은 우선 사용하고 검토 중 시트명/DB를 저장하지 않는다. 실제 파일의 시트·필수값·중복·PDF 검증은 유지한다.
- 저장 API는 실제 시트명 등록을 계속 요구하며 미준비면 기존 결과를 변경하기 전에 차단한다. 프론트는 첨부 업로드 전에 최신 상태를 확인하며 서버에서 같은 오류가 반환돼도 alert로 안내한다.
- 검증: ExmnTemplateGateTest 7건 통과(Excel/PPL PDF/MNHL 검토 독립, 미준비 commit 무쓰기 차단, 기존 시트명 보존, 준비 완료 commit, 해시 불일치 차단), FE 타입 검사 통과. 테스트는 mock 기반이며 실제 파일 저장·DB 변경 및 브라우저 끝단 저장은 수행하지 않았다.
- 임시 테스트 소스·산출물은 요약 후 정리한다. 이전 ‘검토 전 양식 확인’ 기록은 이 지시로 대체한다.
2026-10-02 quick_vibe 등록 입력 필수 표시 보완
- 사업대상 처리분구 제목에 기존 폼과 같은 붉은 별표와 접근성용 필수 문구를 추가했다. 기존 1개 이상 선택 검증은 유지한다.
- 정밀조사연장은 숫자·소수점 하나·입력 삭제만 허용한다. 문자/한글/부호/지수/콤마/복수 소수점 입력 및 붙여넣기는 거부한다. km 소수 입력과 기존 저장 검증은 유지한다.
- 원본: 요구사항 기능 시트76행 SFR-010-004, PPT 실제39슬라이드 SN_MN040105 사업정보 등록/처리분구 선택/정밀조사연장(km).
- 검증: SN 전체 타입검사 exit0, 숫자/소수/삭제 및 거부 문자열 Node 검증 통과, git diff --check 통과. 실브라우저 입력 검증은 미수행.
- 수정 소스:
frontend/apps/sn/src/features/exmn/ui/exmn-business-register-popup-page.tsx. API/백엔드 코드·저장 계약 변경 없음. 기존 GIS 작업은 변경하지 않았다. - 롤백: 해당 소스의 이번 필수 표시/입력 제한만 복원한다.
2026-10-19 맨홀 조사보고서 GIS 번호 연결 (maintenance)
- 목적: 별도 맨홀 식별체계 확정 전 맨홀 PDF의
맨홀번호에 조사시설 GIS 번호(테스트 188001)를 넣고 지도에서 해당 보고서를 열람한다. 지도 도형은 기존 상류맨홀 매칭을 유지한다. - 근거: 요구사항정의서
3. (기능)요구사항정의 및 추적표SFR-010-006/007, 화면설계서 실제 42쪽의 식별기준 미확정 메모 및 43쪽SN_MN040101조사결과 등록. 이번 사용자 지시로 임시 GIS 번호 연결 기준을 확정했다. - BE:
ExmnManholeReportService.java신규,ExmnPipePdfValidator.java표제별 불변 판독기,ExmnBusinessController.java의GET /api/v1/exmnBusinesses/{exmnBizId}/manholeReports/{pipeNumber}및/availability,ExmnFacilityRepository.java의 조사유형별 첨부 존재 여부 분기. - 맨홀 첨부
mnhlExmnAtchFileId와 활성 MNHL의gisManagementNo만 사용한다. 선택 번호가 없거나 활성 시설이 중복되면 임의 보고서를 반환하지 않는다. 매 요청 현재 PDF를 판독하므로 이전 관로 쪽 캐시를 사용하지 않는다. DB 스키마 및 업무 데이터 변경 없음. - FE:
exmn-business-api.ts,exmn-survey-result-section.tsx,exmn-pipe-report-popup-content.tsx,exmn-result-register-popup-page.tsx. MNHL에서도 보고서 버튼을 표시하고 jobType에 따라 API·제목·번호 안내를 선택한다. PPL 기본 호출은 유지한다. - 업로드 검토의 PDF 내부 번호 대조는 이번 범위에 추가하지 않았다. 번호 입력 기준과 열람 시 대조한다는 안내를 결과등록 화면에 표시한다.
- 산출물: 작업루트
output/pdf/맨홀_현황조사_보고서_188001.pdf. 사용자 원본 1쪽의 맨홀번호만 188001로 변경했으며 보고서번호·노선명 등 예시값과 사진은 원본을 유지했다. 실제 납품 조사자료가 아닌 기능 테스트용이다. - 검증: BE compileJava --offline 성공, SN 전체 typecheck 성공, 양 저장소 diff --check 성공. 임시 JUnit 5건 성공(실제 PDF 번호/쪽 추출, PPL 표제 분리, 다중/비연속 번호 거부·연속 쪽, MNHL 첨부 선택/DB 캐시 미사용/미첨부, 없는 번호/중복 시설). PDF 재열람·텍스트 및 렌더링 육안 검증 완료.
- 미검증: 로컬 3002/8883 실행 포트가 없으므로 실제 서버 업로드·저장·지도 선택·브라우저 팝업은 수행하지 않았다. 188001 MNHL 조사시설 및 상류맨홀 GIS 도형의 실제 존재를 확인한 것으로 간주하지 않는다.
- 수동 절차: 변경 BE/FE 실행 → 188001을 가진 MNHL 조사자료의 사업에서 결과등록 → CCTV 조사결과(맨홀)에 테스트 PDF 등록·저장 → 맨홀조사 레이어의 해당 상류맨홀 선택 → 조사보고서 보기 → 제목 맨홀 조사보고서/GIS 번호188001/1쪽 확인. 관로 보고서와 미첨부·없는 번호도 회귀 확인한다.
- 롤백: 위 소스의 이번 변경과 신규 ExmnManholeReportService를 함께 복원한다. DB 롤백은 없다. 실제 첨부 등록을 수행한 경우에는 별도로 이전 첨부를 복원한다.
- 남은 리스크: 번호는 확정 맨홀번호가 아닌 조사시설 GIS 번호의 임시 계약이며, 스캔 PDF는 판독 불가하다. 맨홀 PDF는 availability/열람 때 각각 판독하므로 대형 파일 성능은 후속 검증 대상이다. 테스트 소스·원시 결과·렌더링 임시 이미지는 요약 후 정리하고 최종 PDF는 보존한다.
2026-10-19 후속: 기존 사업 맨홀 PDF 단독 교체
-
원인: 보고서 열람을 추가했지만 결과등록 화면은 모든 검토에 Excel을 요구하고 저장에 Excel·PPL 검토 성공을 요구했다.
-
변경: 맨홀 PDF 하나만 선택하면 기존 활성 MNHL 조사시설의 GIS 번호로 PDF 번호를 대조한다. 기존 조사자료 없음·불일치·중복·잘못된 PDF는 차단한다. 선택 PDF의 일부 시설 포함은 허용한다.
-
저장 직전 다시 검토한 뒤 선택한 MNHL 첨부만 기존 attachments API로 연결한다. Excel imports/commit과 양식 생성 확인은 호출하지 않아 기존 시설·집계·관로첨부를 유지한다. Excel을 선택한 신규/전체 결과 저장 흐름은 유지한다.
-
수정: BE ExmnBusinessController(선택 mnhlFile 입력 및 Excel 없는 MNHL 검토 분기), ExmnManholeReportService(validateReplacement), FE exmn-result-register-popup-page(검토·저장 조건과 검토안내).
-
검증: BE compileJava, SN typecheck, 임시 JUnit 4건(기존번호 정상·무쓰기, 기존결과 없음, 번호 불일치/중복, 누락/손상 PDF) 통과. 원본 요구사항·지도 기준은 앞선 절과 동일하다. DB 스키마 변경 없음.
-
롤백: 이번 단독 교체 분기만 복원한다. 앞선 맨홀 보고서 열람 구현은 유지할 수 있다.
-
실제 브라우저 확인: 기존 테스트 사업
6fe818cb-0a7a-4379-969c-150150155f91에서 Excel/PPL 미선택·188001 맨홀 PDF만 선택 → 검토 완료 → 저장 → 부모 사업목록 성공 안내 확인. 등록한 맨홀 PDF를 보고서 팝업에서 GIS 번호188001/1쪽으로 실제 표시했다. 지도 클릭 경로 자체는 이번 후속에서 재실행하지 않았다. -
검토 중 기존8883 서버의 닫힌 Spring 컨텍스트로 일반 API도500 발생. 사용자 명시 승인 후 동일 실행인수·local 프로필·포트8883·context /sewerage-service로 재시작하여 정상화했다. 교체 서버 PID24204는 사용자가 이어서 테스트하도록 유지한다. 종료명령: Stop-Process -Id 24204. 실행중 필요한 classpath 사본과 stdout/stderr는 작업루트 .codex-tmp/manhole-backend-classpath.jar 및 manhole-backend.out.log/err.log에 유지한다(테스트용 임시 서버가 아닌 승인된 사용자 서버 교체).
-
부모 성공문구도 첨부 교체에 맞게
조사결과 저장을 완료했습니다.로 보정했다(exmn-registration-page.tsx). 실제 첨부는 변경했으며 기존 시설·집계는 Excel commit을 호출하지 않아 유지한다. 되돌릴 경우 이전 맨홀 첨부를 재등록한다.
2026-10-19 최종 정정: 실제 GIS 맨홀번호와 선택 사업 기준
- 사용자 확정: PDF 맨홀번호는 조사자료 관로번호가 아닌 실제 GIS 맨홀번호이다. 앞선 gisManagementNo 기준 설명·구현은 이 절로 대체한다.
- 원인: 지도보기 진입은 테스트 사업이었지만 전체 사업 레이어의 겹친 시설이 선택됐다. 실제 화면은 오류 확인 테스트_수정/조사관로188003/시설관리번호188001이었다. 사용자 선택 실수가 아닌 지도 범위와 번호 계약 불일치이다.
- FE use-exmn-result-map.ts: 조사관리에서 사업·처리분구를 지정해 진입하면 해당 범위만 표출·선택한다. 일반 지도 진입은 기존 전체 범위를 유지한다. 기존 2026-10-01 전체표출 정책의 조사관리 진입 부분을 이 결정으로 대체한다.
- FE exmn-survey-result-section.tsx: MNHL 보고서 키는 fclt_mng_no/fcltMngNo, PPL은 기존 gisManagementNo. 조사 결과 표에 GIS 번호를 명시한다. 결과등록 안내도 실제 GIS 맨홀번호로 정정했다.
- BE ExmnManholeReportService: 기존 ExmnMapLayerService의 동일 지역·상류맨홀 매칭 결과 fclt_mng_no 집합으로 업로드 검토·열람 대상을 확인한다. 조사 관로번호를 맨홀번호로 대체하지 않는다. 같은 실제 맨홀에 여러 조사관로가 연결되면 번호 집합으로 처리한다. 스키마·조사시설·원천 GIS 변경 없음.
- 검증: 실제 GIS188001/조사관로188003 분리, PDF 검토·열람 성공, 조사관로 번호 직접 요청 거부 및 GIS 미연결 거부를 묶은 JUnit1건 통과. BE 컴파일·FE 타입검사·diff --check 통과. 임시 테스트 소스와 결과 정리 완료.
- 실브라우저: 테스트 사업→초이처리분구→지도3개 표시→실제188001 클릭→사업명 테스트/GIS 맨홀번호188001 확인→조사보고서 보기→1쪽 PDF와188001 표시 성공. 사용자도 최종 정상동작 확인했다.
- 실행 서버: 기존 재시작 승인 범위에서 코드 반영 후8883 PID27788로 유지한다(이전PID24204 종료). classpath/실행로그는 기존 .codex-tmp/manhole-backend-* 경로 유지. 종료명령 Stop-Process -Id 27788.
- 롤백: 위 FE3개 소스와 ExmnManholeReportService의 이번 변경을 함께 복원한다. DB 롤백 없음. 잔여 리스크는 GIS 미연결 자료 열람 불가 및 대형 사업의 지도 매칭·PDF 판독 비용이며, 임의 위치/다른 사업 fallback을 하지 않는다.