Files
frontend/apps/sn/docs/작업검증/SFR-010-004~SFR-010-007-조사사업/002-qa-SFR-010-004~007-조사사업-통합검증결과.md
T

80 KiB
Raw Blame History

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의 외부 스크롤과 sticky thead 조합에서 스크롤 중 행 일부가 잘려 보이는 브라우저 문제가 사용자 캡처로 확인됐다.
  • 집계표를 공통 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-wrapper DOM 연결, 개발 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 후 권한 요청이 허용되지 않아 실행 결과를 확보하지 못했다. 대상 소스의 필수 UiTable props와 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-full button, <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 구조를 유지한다. 페이지 높이 계산, Footer ResizeObserver, 문서 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
전체 빌드·대상 테스트 미실행 장시간 실행 이력과 사용자 검증 방침에 따라 생략

정적 보완 결과

  1. ExmnSurveyResultSection.tsx의 !p-0r를 !p-0으로 수정했다.
  2. 맨홀 공간조회에도 관로와 동일한 시군구코드 앞 5자리 제한을 적용했다.
  3. 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을 하지 않는다.