57 KiB
57 KiB
SFR-012-003 하수관로편집 통합 검증 결과
2026-09-11 API 계약 대체 이력: 본문의 과거 호출 URL은 당시 검증·구현 증거이며 현재 호출 계약이 아니다. 현재는 lowerCamelCase 단일 경로만 지원하고 기존 alias는 제거된다. 경로 단일화 변경기록의 현재 경로로 검증한다.
1. 문서 목적
SFR-012-003 하수관로편집의 검증 결과를 기능당 1개 문서로 누적 관리한다.- 기존
002,004,006,008,010,012결과 문서를 이 문서로 흡수한다. - 이후 라운드부터는 새 검증 결과 파일을 추가하지 않고 이 문서 내부 헤더로만 구분한다.
2. 수행한 검증 요약
2.1 초기/후속 검증
GIS 편집모드 진입/종료- 메뉴 강조 잔류 재확인
2.2 세션도구 확장 검증
- 7개 편집 레이어 노출
- 도구 활성 규칙
undo,reset
2.3 실제지도조작 확장 검증
MOVE,VERTEX_EDIT,DELETE구조 점검- 자동 브라우저 drag 한계 확인
2.4 MOVE
- preview drag 구조와 세션 반영 흐름은 상대적으로 안정적
2.5 VERTEX_EDIT
- 여러 차례 보강했지만 현재는 재검증 필요 상태
2.6 2026-05-15 세션 유지 / 상호작용 회귀 대응 점검
- 코드 기준 점검
GIS편집모드 종료 후에도 변경분이 있으면 세션 패널과 지도 preview를 유지하도록 수정했다.- 신규 추가 preview는 레이어별 색상을 우선 사용하도록 보강했다.
- 편집 세션 기본 패널은 최근 5건 정도 높이만 보이도록 고정하고, 아래 이력은 패널 내부 스크롤로 바로 확인하도록 바꿨다.
- 추가 조정으로 세션 패널 높이를 더 줄이고, 하단 안내 문구는 제거했다.
- preview layer는 상호작용 중 redraw되도록
updateWhileInteracting보강이 들어갔다. MOVE,VERTEX_EDITinteraction effect는gisEdit전체 객체 의존 대신 실제 pending interaction 중심으로 좁혔다.- 원본 피처 선택 시 layerId 정규화를 추가해 namespace 또는 feature id 형식 차이로 편집 진입이 막히지 않게 했다.
하수처리시설(tb_il_swage_prcs_fclt)은 point 기준으로 정정해VERTEX_EDIT대상에서 빠지도록 맞췄다.
- 정적 검증
node node_modules/typescript/bin/tsc --noEmit --incremental false --pretty false- 결과: 기존 저장소 오류로 실패
- 확인된 기존 오류 예시
components/common/index.ts타입 불일치PipeAnalysisPopupPage.tsx타입 변환 경고- 공통 chart 컴포넌트 implicit any
- 로컬 라우트 응답 확인
http://127.0.0.1:3002/map응답 200http://127.0.0.1:3002/auth/login응답 200
- 자동 브라우저 검증
- Playwright headless 실행 시
spawn EPERM으로 실패해 실제 canvas drag 자동검증은 수행하지 못했다. - 따라서
MOVE,VERTEX_EDIT의 실조작 확인은 수동 브라우저 재검증이 남아 있다.
- Playwright headless 실행 시
2.7 2026-05-15 QGIS 유사 VERTEX_EDIT 재구현 점검
- 코드 기준 점검
VERTEX_EDIT는 custom vertex handle layer를 유지하되, 실꼭지점 상시 표시와 hover segment midpoint 1건 표시 구조로 단순화했다.- midpoint 후보는
LineString,MultiLineString,Polygon,MultiPolygon모두 계산 가능하도록 분리했다. - vertex 근처에서는 midpoint를 숨기고, segment 근처에서만 midpoint를 띄우도록 pixel tolerance를 적용했다.
- endpoint와 일반 vertex는 같은 drag 규칙을 사용하고, midpoint drag는 새 좌표 삽입으로 처리한다.
MOVEpreview layer의clickPsblYn="Y"기준은 유지했고, vertex layer는 별도 레이어로 계속 분리했다.
- 정적 검증
pnpm exec tsc --noEmit --incremental false --pretty false- 결과: 이번 변경분 관련 신규 타입 오류는 정리했고, 저장소 기존 오류만 남았다.
- 남은 기존 오류 예시
components/common/index.ts타입 불일치PipeAnalysisPopupPage.tsx의JSON[]캐스팅 경고- 공통 chart 컴포넌트 implicit any
- 로컬 환경 확인
http://127.0.0.1:3002/map응답 200http://127.0.0.1:3002/auth/login응답 200http://127.0.0.1:3002/popup/gisEditSessionPopup응답 200- 현재 세션에서는 브라우저 전용 자동화 도구를 확보하지 못해 canvas 기반 midpoint hover/drag 실조작은 수동 재검증 필요로 남긴다.
2.8 2026-05-15 편집 세션 팝업 전환 및 도구 아이콘 점검
- 코드 기준 점검
- 지도 좌하단 고정 세션 패널 렌더링은 제거했다.
GIS 편집 세션popup definition, registry, popup content를 추가해 기존 window popup 체계에 맞췄다.- 메인
/map은 GIS 편집 진입 시 세션 팝업을 열고, postMessage로 세션 snapshot을 동기화하도록 바꿨다. - 팝업에서
마지막 변경 취소,세션 초기화,항목 focus를 메인 지도에 다시 전달하도록 연결했다. - 세션 패널의 안내 문구 영역은 제거했다.
추가,이동,꼭지점편집,삭제버튼은lucide-react아이콘을 사용하도록 바꿨다.
- 정적 검증
pnpm exec tsc --noEmit --incremental false --pretty false- 결과: 여전히 저장소 기존 오류로 실패
- 기존 오류 범주
- 기존 공통 타입 불일치
- 기존 chart implicit any
- 수동 재검증 필요 항목
- 브라우저 팝업 차단 여부
- 세션 팝업과 메인 지도 간 메시지 동기화
- 도구 아이콘 실제 렌더링
2.9 2026-05-21 관로 기본정보 세션 편집 점검
- 코드 기준 점검
GisEditChange에featureRef,basicInfo,basicInfoSavedAt가 추가돼 geometry change와 관로 기본정보 draft를 함께 담을 수 있게 했다.- 하수관로 change를 선택하면 편집 전용 상세정보창을 열고, 기존
GET /api/v1/fcltppl/{fcltMngNo}/{mngInstCd}로 기본정보를 읽어 와 세션 저장할 수 있게 했다. - 상세정보창 저장은 기존 즉시
POST /api/v1/fcltppl이 아니라updateChangeBasicInfo로 change draft만 갱신한다. - 최종 저장 payload는
changeId,featureRef,basicInfo,beforeGeometry,afterGeometry를 함께 조립하도록 바뀌었다.
- 정적 검증
node node_modules/typescript/bin/tsc --noEmit --incremental false --pretty false- 결과: 기존 저장소 오류로 실패
- 확인된 기존 오류
app/(map-layout)/map/components/common/index.ts타입 불일치PipeAnalysisPopupPage.tsx의JSON[]캐스팅 경고- html 라우트 경로 import 누락
- 공통 chart 컴포넌트 implicit any
- 이번 변경 파일 관련 신규 오류는 별도 출력되지 않았다.
- 수동 재검증 필요 항목
- 편집 모드에서 실제 하수관로 선택 시 상세정보창이 예상대로 열리는지
- 기본정보 저장 후 세션 목록 뱃지가 정상 반영되는지
- 최종 payload 미리보기에 관로 기본정보와 geometry가 함께 담기는지
- 백엔드 geometry 저장 API 부재 상태에서 사용자가 최종 저장 한계를 어떻게 인지할지
2.10 2026-05-21 자동저장 루프/선택 제한 보강 점검
- 코드 기준 점검
- 입력값 변경을
useEffect자동 저장으로 처리하던 구조를 제거하고, 실제input/select변경 이벤트에서만 세션 draft를 갱신하도록 바꿨다. - 편집 팝업 wrapper를 안정화해 입력 중 remount로 인한 스크롤 상단 점프 가능성을 줄였다.
- 공통
GisSelect에canSelectFeature가드를 연결해MOVE,VERTEX_EDIT+ 하수관로 레이어 조합일 때 비하수관로 선택을 선택 단계에서 차단하도록 확장했다. - 비하수관로 차단 시 지도 줌 이동이나 상세정보 전환 없이 상태문구
하수관로를 선택해주세요.만 남기도록 정리했다. MOVE,VERTEX_EDIT의 하수관로 선택 시 상세정보창 오픈은 preview 준비 완료 대기 대신setTimeout(0)기준 즉시 오픈으로 단순화했다.
- 입력값 변경을
- 정적 검증
node node_modules/typescript/bin/tsc --noEmit --incremental false --pretty false- 결과: 기존 저장소 오류로 실패
- 확인된 기존 오류
app/(map-layout)/map/components/common/index.ts타입 불일치PipeAnalysisPopupPage.tsx의JSON[]캐스팅 경고- html 라우트 경로 import 누락
- 공통 chart 컴포넌트 implicit any
- 수동 재검증 필요 항목
- 하수관로 편집 팝업의 입력 중 스크롤 위치 유지
MOVE,VERTEX_EDIT에서 하수관로 선택 즉시 팝업 오픈- 비하수관로 클릭 시 줌 이동 완전 차단
ADD미리보기와MOVE,VERTEX_EDITinteraction 회귀 여부
2.11 2026-05-22 최종본/이력 DB 저장 통합 검증
- 검증 환경
- 화면:
http://localhost:3002/map - 프론트 프록시 대상:
http://localhost:8883/sewerage-service - 백엔드:
sewerage-servicelocal profile, port8883 - DB:
sm_bs_ms.tb_ms_swage_ppl,sm_bs_ms.tb_ms_edit_swage_ppl
- 화면:
- 발견 문제
- 브라우저에서
ADD저장 요청은 정상 전송됐지만 최초 검증 시500 / E999가 반환됐다. - DB 직접 확인 결과, 최종본
tb_ms_swage_ppl의 다음 fid는4132694였지만 이력 테이블에는 이미fid=4132694, edit_sn=0이력이 존재했다. - 기존 BE 채번이 최종본
MAX(fid)+1만 사용해 삭제 이력이 남은 fid를 재사용했고, 이력 테이블 복합키tb_ms_edit_swage_ppl_pk(fid, edit_sn)와 충돌했다.
- 브라우저에서
- 조치 내용
- 신규 fid 채번 기준을 최종본과 이력 테이블을 합친
MAX(fid::bigint)+1로 변경했다. - 브라우저 저장 성공 후 원본 레이어 refresh가 호출되도록 기존 저장 성공 처리 흐름을 유지했다.
- 신규 관로의 시설관리번호와 관로관리번호가 비어 있거나
NEW-*임시값이면 저장 API를 호출하지 않고 상세 입력창을 열도록 FE 검증을 추가했다.
- 신규 fid 채번 기준을 최종본과 이력 테이블을 합친
- 브라우저/API 검증 결과
ADD: 지도에서 신규 관로를 그리고저장버튼 클릭, 응답200,editCd=C,editSn=0, 신규fid=4132695MOVE: 같은 브라우저 세션에서 신규 fid 기준 수정 저장, 응답200,editCd=U,editSn=1DELETE: 같은 브라우저 세션에서 신규 fid 기준 삭제 저장, 응답200,editCd=D,editSn=2- 번호 미입력 신규 저장: 저장 요청
0건, 상태문구신규 하수관로 저장 전 시설관리번호와 관로관리번호를 입력해주세요.노출 확인
- DB 검증 결과
- 삭제 후
tb_ms_swage_ppl의 테스트 fid 최종본 건수:0 - 삭제 전 검증 시
tb_ms_edit_swage_ppl의 테스트 fid 이력:0:C,1:U,2:D - 검증 완료 후 테스트 fid
4132695의 최종본/이력 흔적은 정리했다. - 중간 자동화 중 잘못 선택된 기존 관로
fid=2280012는 직전 이력 기준으로 geometry를 원복했고, 테스트로 생성된edit_sn=1이력은 삭제했다.
- 삭제 후
- 정적 검증
- BE:
.\gradlew.bat compileJava test --tests iipbs.sewerage.service.map.SwagePplEditServiceTest성공 - FE:
pnpm --filter sn exec tsc --noEmit --pretty false는 저장소 기존 오류로 실패했으며, 이번 GIS 편집 변경 파일 관련 신규 오류는 확인되지 않았다.
- BE:
- 남은 확인 사항
- 자동화 좌표 클릭으로
MOVE대상을 고를 때, 새 관로와 기존 관로가 겹치면 기존 관로가 선택될 수 있다. 실제 QA에서는 신규 관로를 기존 관로와 겹치지 않는 위치에 생성하거나 fid 기반 재선택 보조가 필요하다. - 저장 전 신규 관로의 시설관리번호/관로관리번호 입력 편의성은 별도 화면 검증에서 추가 확인이 필요하다.
- 자동화 좌표 클릭으로
2.12 2026-05-26 하수관망도 GIS 편집 UI/기능 상세 재검증
2.12.1 검증 목적
- 하수관망도 화면의
GIS 편집기능을 실제 사용자 조작 흐름 기준으로 재검증한다. 추가,이동,꼭지점편집,삭제,저장 검증,편집 세션흐름을 함께 확인한다.- 사용자가 제기한 "기능이 이상한 것 같다"는 관찰을 UI/기능/계약/검증 가능성 관점으로 분해한다.
- OpenLayers, ArcGIS, QGIS의 일반적인 GIS 편집 UX와 비교해 개선 방향을 정리한다.
2.12.2 검증 환경
- 작업 루트:
D:\workspace - 프론트엔드 앱:
D:\workspace\IIPBS-FRONTEND\frontend\apps\sn - 화면 URL:
http://localhost:3002/map - 백엔드 URL:
http://localhost:8883/sewerage-service - 기준 화면: 하수관망도
- 기준 편집 대상 레이어:
tb_ms_swage_ppl - 기준 브라우저 검증 방식: 로컬 개발 서버에 로그인 후 실제 지도 화면에서 버튼 클릭, 좌표 클릭, 드래그, 더블클릭 수행
- 병행 QA:
qa서브에이전트로 백엔드 테스트, API 검증, 인증 차단 여부 확인
2.12.3 검증 전제와 환경 제약
snNext 개발 서버가3002포트에서 이미 실행 중이었다.AGENTS.md기준에 따라 개발 서버가 실행 중인 상태에서는next build,pnpm --filter sn run build,pnpm turbo run build --filter=sn을 실행하지 않았다.- 로컬 브라우저 직접 검증은 개발 로그인 계정으로 진행했다.
- QA 서브에이전트는 별도 세션에서
/auth/login인증 차단에 걸려 화면 직접 검증을 수행하지 못했다. - 따라서 본 섹션의 UI 직접 조작 결과는 메인 브라우저 검증 결과를 기준으로 하고, 서브에이전트 결과는 API/BE/정적 검증 보조 증적으로 사용한다.
2.12.4 브라우저 진입 및 초기 로딩 상태
/map직접 접근 시 로그인 페이지로 이동하는 것을 확인했다.- 개발 로그인 후 하수관망도 화면에 진입했다.
- 지도, 좌측 시설 트리, 우측 분석 메뉴, 하수관망도 레이어 표시는 확인됐다.
GIS 편집버튼 클릭 시 지도 상단 중앙에 편집 툴바가 표시됐다.- 툴바 구성은
추가,이동,꼭지점편집,삭제,저장으로 확인됐다. - 편집 진입 직후
저장버튼은 비활성 상태였다. - 상태 문구는
하수관로 편집 도구를 선택한 뒤 지도에서 편집 작업을 진행하세요.로 표시됐다. - 지도 초기 로딩 중 다음 오류가 관찰됐다.
BIZ_TY_CD 데이터 로드 실패BIZ_SE_CD 데이터 로드 실패- 레이어 설정 조회 실패,
500 Internal Server Error - 메뉴 wrapper 계열
AxiosError
- 위 오류는 GIS 편집 단독 결함으로 단정하지 않았지만, 편집 QA 중 화면 신뢰도와 재현성을 낮추는 환경/연동 리스크로 기록한다.
2.12.5 추가 검증 결과
| 항목 | 내용 |
|---|---|
| 재현 절차 | GIS 편집 진입 후 추가 선택, 지도 위 여러 지점 클릭, 마지막 지점 더블클릭 |
| 기대 결과 | 신규 하수관로 선형 sketch가 생성되고, 지도 위에서 선택 가능한 preview가 명확히 표시되며, 상세정보 입력 패널과 저장 가능 상태가 연결된다. |
| 실제 결과 | 신규 변경분 NEW-1이 생성되고 저장 버튼이 활성화됐다. 우측 상세정보 패널이 열렸고 기본정보 입력 영역이 표시됐다. |
| 통과 항목 | 도구 활성화, 선형 입력 완료, 신규 변경분 생성, 상세 패널 오픈, 저장 버튼 활성화 |
| 문제 항목 | 신규 선형이 지도 위에서 충분히 강조되지 않았고, 우측 상세정보 패널이 지도 영역을 크게 가려 생성 위치 확인이 어렵다. |
| 판정 | 부분 통과 |
추가도구의 기본 기능은 동작한다.- 다만 사용자는 "내가 방금 추가한 관로가 어디에 생겼는지"를 지도에서 즉시 확인하기 어렵다.
- 신규 객체는 고대비 선형, 라벨, 선택 테두리, 꼭지점 표시 중 최소 하나 이상의 강한 피드백이 필요하다.
- 상세정보 패널이 우측 지도 영역을 크게 차지하므로 추가 직후 선형 위치와 패널 입력을 동시에 확인하기 어렵다.
2.12.6 이동 검증 결과
| 항목 | 내용 |
|---|---|
| 재현 절차 | 신규 관로 추가 후 이동 선택, 신규 관로가 생성된 것으로 예상되는 위치에서 클릭 및 드래그 |
| 기대 결과 | 이동 대상이 선택되고, 이동용 preview 또는 선택 테두리가 표시되며, 드래그 시 객체 geometry만 이동한다. |
| 실제 결과 | 이동 도구 안내 문구는 표시됐지만, 대상 선택 상태와 드래그 핸들이 명확하지 않았다. 드래그 시 객체 이동보다 지도 pan처럼 보이는 동작이 관찰됐다. |
| 통과 항목 | 도구 활성화, 상태 문구 표시 |
| 문제 항목 | 선택 대상 식별 불명확, 이동 preview 식별 불명확, 드래그 중 지도 이동과 객체 이동이 구분되지 않음 |
| 판정 | 불안정 |
이동은 GIS 편집에서 사용자가 가장 직관적으로 기대하는 기능 중 하나지만, 현재 화면에서는 "어떤 객체가 선택됐고 무엇을 잡고 움직여야 하는지"가 명확하지 않다.- 편집 대상이 선택되면 지도 pan보다 객체 이동 interaction이 우선되어야 한다.
- 선택 후 이동 가능한 상태에서는 cursor, 선택 테두리, preview 색상, 상태 문구가 함께 바뀌어야 한다.
2.12.7 꼭지점편집 검증 결과
| 항목 | 내용 |
|---|---|
| 재현 절차 | 꼭지점편집 선택 후 신규 관로 또는 기존 관로로 보이는 위치를 클릭하고 vertex handle 표시 및 드래그 가능 여부 확인 |
| 기대 결과 | 실꼭지점은 주황색 handle로, 새 점 삽입 후보 midpoint는 흰색 handle로 안정적으로 표시된다. 꼭지점을 드래그하면 선형 geometry가 즉시 갱신된다. |
| 실제 결과 | 안내 문구는 표시됐지만 실제 주황색 꼭지점과 흰색 midpoint handle을 안정적으로 확인하지 못했다. 꼭지점 선택/드래그 가능 상태도 사용자 관점에서 확정하기 어려웠다. |
| 통과 항목 | 도구 활성화, 상태 문구 표시 |
| 문제 항목 | vertex handle 표시 불명확, midpoint 삽입 후보 확인 불가, 드래그 가능 대상 식별 불가 |
| 판정 | 불량 |
꼭지점편집은 현재 가장 큰 기능 리스크다.- 기존 문서에서도
VERTEX_EDIT는 QGIS 기준 사용자 경험 재정렬과 실조작 수동 재검증이 필요한 항목으로 남아 있었다. - 이번 재검증에서도 사용자가 기대하는 "꼭지점이 보이고 잡아서 움직인다"는 핵심 피드백이 충분하지 않았다.
- 선형 편집 도구는 실꼭지점, 선택 꼭지점, hover segment, midpoint 삽입 후보를 시각적으로 구분해야 한다.
2.12.8 삭제 검증 결과
| 항목 | 내용 |
|---|---|
| 재현 절차 | 삭제 선택 후 신규 관로 또는 기존 관로로 보이는 위치 클릭 |
| 기대 결과 | 삭제 대상이 선택되고, 즉시 최종 삭제하지 않더라도 pending-delete 스타일이 표시되며, 세션 변경목록에 삭제 변경분이 추가된다. |
| 실제 결과 | 삭제 도구 안내 문구는 표시됐지만, 어떤 객체가 삭제 대상으로 선택됐는지 명확한 지도 피드백을 확인하지 못했다. |
| 통과 항목 | 도구 활성화, 상태 문구 표시 |
| 문제 항목 | 삭제 대상 선택 피드백 부족, pending-delete 스타일 확인 어려움, 되돌리기 흐름 노출 부족 |
| 판정 | 불안정 |
- 삭제는 저장 전 pending 상태가 반드시 명확해야 한다.
- 현재처럼 선택 피드백이 약하면 사용자는 기존 관로를 잘못 삭제 대상으로 올렸는지 확인하기 어렵다.
- 삭제 대상은 빨간 점선, 반투명 처리,
삭제 예정라벨, 세션 목록 강조가 함께 필요하다.
2.12.9 저장 검증 결과
| 항목 | 내용 |
|---|---|
| 재현 절차 | 신규 관로 NEW-1 생성 후 필수값을 충분히 입력하지 않은 상태에서 저장 클릭 |
| 기대 결과 | 저장 API 호출 전 필수값 누락을 차단하고, 누락 필드와 입력 위치를 정확히 안내한다. |
| 실제 결과 | 저장 API 호출 전 차단됐고, 상세정보 패널이 열리며 상태 문구가 표시됐다. |
| 통과 항목 | 신규 관로 필수값 누락 시 저장 API 호출 차단 |
| 문제 항목 | 상태 문구와 화면 필드명이 일치하지 않음 |
| 판정 | 부분 통과 |
- 표시 문구:
신규 하수관로 저장 전 시설관리번호와 관로관리번호를 입력해주세요. - 화면 필드명:
시설관리번호,기관관리번호 관로관리번호와기관관리번호가 서로 다른 의미라면 화면에 두 필드를 모두 분명히 노출해야 한다.- 같은 의미라면 필드명과 검증 문구를 통일해야 한다.
- 이 불일치는 저장 실패 원인을 사용자가 잘못 이해하게 만들 수 있으므로 UI 문구 결함으로 분류한다.
2.12.10 편집 세션 및 팝업 검증 결과
| 항목 | 내용 |
|---|---|
| 기대 결과 | GIS 편집 진입 시 편집 세션 목록, 마지막 변경 취소, 세션 초기화, 항목 focus가 사용자가 확인 가능한 위치에 표시된다. |
| 실제 결과 | 메인 지도 툴바는 표시됐지만, 세션 팝업 또는 변경목록이 사용자에게 명확히 노출되는지 확인이 어려웠다. |
| 판정 | 불안정 |
- 기존 구현 기록상 GIS 편집 세션은 popup 기반으로 전환되어 있다.
- 실제 사용자는 브라우저 팝업 차단, 포커스 이동, 별도 창 위치 문제로 세션 상태를 놓칠 수 있다.
- 편집 기능은 저장 전 변경목록 확인이 중요하므로, 팝업이 열리지 않거나 가려져도 메인 화면 안에서 최소 변경 건수와 마지막 변경 요약은 확인 가능해야 한다.
2.12.11 서브에이전트 QA 결과 요약
- 코드 변경 없이 읽기, 브라우저, API, 테스트 중심으로 검증했다.
- BE
.\gradlew.bat compileJava: 통과 - BE
.\gradlew.bat test: 통과,BUILD SUCCESSFUL - FE 빌드: 미실행
sn개발 서버가3002에서 실행 중이므로 사용자 확인 없이 빌드하지 않았다.
- FE
pnpm --filter sn exec tsc --noEmit --pretty false: 실패- 기존 공통/앱 TypeScript 오류 다수 확인
- 이번 GIS 편집 단독 신규 오류로 단정하지 않음
- 서브에이전트 브라우저 검증:
/auth/login인증 차단으로 GIS 화면 직접 검증 불가 - API 검증:
GET /sewerage-service/api/v1/map/gisEdit/swagePpl/meta?lyrGrp=SN_NETWORK: 통과- 편집 대상:
tb_ms_swage_ppl - 지원 편집:
ADD,MOVE,VERTEX_EDIT,DELETE - 저장 테이블:
sm_bs_ms.tb_ms_swage_ppl - 이력 테이블:
sm_bs_ms.tb_ms_edit_swage_ppl - 빈 변경분 저장 요청:
400 GIS_EDIT_EMPTY_CHANGES정상 - 비관로 레이어 저장 요청:
400 GIS_EDIT_PIPE_ONLY정상 GET /gisEdit/swagePpl/histories?fid=1:200 OK
- 서브에이전트 증적:
D:\workspace\qa-evidence\sfr-012-003-auth-blocker.pngD:\workspace\qa-evidence\sfr-012-003-session-popup-direct.png
2.12.12 외부 GIS 편집 UX 비교
| 비교 대상 | 참고 기준 | 현재 화면과의 차이 |
|---|---|---|
| OpenLayers Draw | Draw interaction은 sketch 시작, 진행, 완료 이벤트를 별도 interaction으로 관리한다. |
현재 추가는 완료 후 신규 sketch의 시각 강조가 약하다. |
| OpenLayers Modify | Modify interaction은 vertex 조작을 명확한 handle 기반으로 제공한다. |
현재 꼭지점편집은 실꼭지점과 midpoint handle이 안정적으로 보이지 않는다. |
| OpenLayers Translate | Translate interaction은 선택 feature 이동을 지도 pan과 분리해 처리한다. |
현재 이동은 드래그 시 객체 이동과 지도 pan이 사용자에게 구분되지 않는다. |
| ArcGIS Map Viewer / Web Editor | 편집 대상 선택, vertex 편집, 저장 전 확인 흐름을 사용자에게 명확히 제공한다. | 현재 세션 변경목록과 pending 상태 노출이 약하다. |
| QGIS Vertex Tool | 실꼭지점, segment, midpoint 삽입 후보를 시각적으로 구분한다. | 현재 VERTEX_EDIT는 QGIS 수준의 조작 피드백에 도달하지 못했다. |
참고 링크:
- OpenLayers Draw: https://openlayers.org/en/latest/apidoc/module-ol_interaction_Draw-Draw.html
- OpenLayers Modify: https://openlayers.org/en/latest/apidoc/module-ol_interaction_Modify-Modify.html
- OpenLayers Translate: https://openlayers.org/en/latest/apidoc/module-ol_interaction_Translate-Translate.html
- ArcGIS Online Map Viewer editing: https://doc.arcgis.com/en/arcgis-online/manage-data/edit-features-mv.htm
- ArcGIS Web Editor vertex editing: https://doc.arcgis.com/en/web-editor/latest/create-and-edit/edit-vertices.htm
- QGIS geometry editing: https://docs.qgis.org/latest/en/docs/user_manual/working_with_vector/editing_geometry_attributes.html
2.12.13 결함 및 개선 백로그
| 우선순위 | 구분 | 내용 | 개선 방향 |
|---|---|---|---|
| P1 | 기능/UX | 이동, 꼭지점편집, 삭제에서 편집 대상 선택 피드백이 불충분하다. |
선택 feature를 고대비 overlay로 표시하고, 선택/drag 가능 상태를 cursor와 상태 문구로 함께 제공한다. |
| P1 | 기능 | 꼭지점편집의 vertex handle과 midpoint handle이 안정적으로 확인되지 않는다. |
실꼭지점, 선택 꼭지점, hover segment, midpoint 삽입 후보를 별도 style로 분리한다. |
| P1 | 기능 | 이동 드래그가 지도 pan과 구분되지 않는다. |
선택 feature drag 중 지도 pan을 일시 제한하고, 이동 preview source를 명확히 분리한다. |
| P1 | 기능/세션 | 세션 변경목록과 pending 상태가 사용자에게 명확하지 않다. | 팝업 실패 fallback 또는 메인 지도 내 축약 세션 패널을 제공한다. |
| P2 | UI | 추가 후 신규 선형이 지도에서 충분히 강조되지 않는다. |
신규 객체 label, 선택 테두리, vertex 표시, 자동 focus를 보강한다. |
| P2 | UI | 상세정보 패널이 지도 확인을 방해한다. | 패널 폭/위치/접힘 상태를 조정하고, 선택 객체 focus와 겹치지 않게 한다. |
| P2 | 문구 | 저장 검증 문구의 관로관리번호와 화면 필드 기관관리번호가 불일치한다. |
백엔드 계약 기준으로 필드명을 통일하고 누락 필드를 행 단위로 강조한다. |
| P2 | 연동 | 지도 초기 로딩 중 코드/레이어 설정 조회 오류가 발생한다. | GIS 편집 결함과 분리해 공통 코드/레이어 설정 API 오류를 먼저 정리한다. |
| P3 | QA | QA 서브에이전트 세션에서 인증 차단으로 화면 검증이 막힌다. | QA용 로컬 로그인 절차, 테스트 계정, 토큰 주입 절차를 문서화한다. |
2.12.14 종합 판정
- 백엔드 컴파일, 테스트, 기본 GIS 편집 API 계약은 정상 범위로 확인됐다.
- 프론트엔드 정적 검증은 기존 TypeScript 오류로 실패 상태이며, 이번 검증만으로 GIS 편집 단독 신규 오류라고 단정하지 않는다.
- 실제 사용자 기준의 GIS 편집 UI는
추가만 부분 통과이고,이동,꼭지점편집,삭제는 선택 피드백과 조작 피드백이 부족해 개선 필요로 판정한다. - 특히
VERTEX_EDIT는 기존 검증 문서에서 이미 진행 중/리스크로 분류된 항목이며, 이번 재검증에서도 동일하게 핵심 개선 대상으로 확인됐다. - 다음 개선 순서는
선택 피드백,vertex handle,이동 drag와 지도 pan 분리,세션 변경목록 노출,저장 검증 문구 정리순서가 적절하다.
2.13 2026-05-26 Playwright 기반 GIS 편집 실조작 재검증
2.13.1 검증 범위와 경로
- 검증 방식: Playwright MCP 브라우저 자동화 기반 실제 화면 조작
- 로그인 경로:
http://localhost:3002/auth/login - 로그인 계정:
CLEANWATER - 지도 경로:
http://localhost:3002/map - 백엔드 경로:
http://localhost:8883/sewerage-service - 세션 팝업 경로:
http://localhost:3002/popup/gisEditSessionPopup - 테스트 관리번호:
- 1차:
QA-PW-20260526-001,clientTempId=NEW-1 - 2차:
QA-PW-20260526-002,clientTempId=NEW-2
- 1차:
- 최종 정리 상태: 저장 API가 두 차례 모두
500 E999로 실패해fid/editSn은 발급되지 않았고, DB 삭제 저장은 수행할 대상이 없었다. 미저장 로컬 세션은마지막 변경 취소로총 0건까지 정리했다.
2.13.2 기능별 실조작 결과
| 기능 | 재현 절차 | 기대 결과 | 실제 결과 | 심각도 | 개선 제안 |
|---|---|---|---|---|---|
| 로그인/진입 | /auth/login에서 CLEANWATER 로그인 후 /map 진입, GIS 편집 클릭 |
지도와 편집 툴바, 세션 팝업이 표시된다. | 로그인 성공, /map 진입 성공, GIS 편집 클릭 시 툴바와 세션 팝업 탭 표시 확인 |
통과 | QA 계정 기반 재현 절차를 검증 문서에 유지한다. |
| 추가 | 빈 위치에 선형 클릭-더블클릭, 상세정보에 QA-PW-20260526-001/002 입력, 저장 클릭 |
신규 관로가 저장되고 응답에서 신규 fid, editSn=0, editCd=C가 확인된다. |
preview, 상세 패널, 세션 목록, 저장 버튼 활성화는 확인됐으나 저장 API가 2회 모두 500 E999로 실패했다. fid/editSn 미발급 |
P1 | BE는 E999/ERROR 대신 원인 코드와 메시지를 반환해야 한다. FE는 저장 실패 시 사용자가 조치 가능한 필드/원인을 표시해야 한다. |
| 추가 payload | 상세정보의 시설관리번호, 기관관리번호에 테스트 번호 입력 후 세션 payload 확인 |
입력한 관리번호가 저장 payload의 필수 식별 필드에 일관되게 반영된다. | fclt_mng_no, inst_mng_no에는 값이 들어가지만 fcltMngNo, mngInstCd는 빈 문자열로 전송됐다. |
P1 | 신규 관로 입력값 병합 시 빈 문자열을 유효값으로 우선하지 말고 snake/camel 필드를 동일 값으로 정규화해야 한다. |
| 이동 | 저장 실패 후 남은 NEW-2 preview 기준 이동 선택, 대상 클릭 후 drag |
대상 관로가 선택되고 지도 pan이 아니라 관로 preview가 이동한다. | 상태문구는 이동 모드로 전환됐지만 대상 선택/drag 후 세션 변경이나 화면상 선택 피드백을 확인하지 못했다. | P2 | 미저장 ADD preview도 선택 가능 여부를 명확히 하거나, 지원하지 않는다면 상태문구로 제한을 안내한다. |
| 꼭지점편집 | 꼭지점편집 선택 후 NEW-2 preview 클릭 및 vertex drag 시도 |
주황색 실꼭지점과 흰색 midpoint가 보이고 vertex/midpoint 조작이 가능하다. | 상태문구는 vertex 안내로 전환됐지만 주황색/흰색 handle과 실제 drag 반영을 확인하지 못했다. | P2 | 선택 성공/실패 피드백, vertex handle 표시 조건, midpoint 삽입 가능 범위를 화면에서 명확히 표시한다. |
| 삭제 | 삭제 선택 후 NEW-2 preview 클릭 |
삭제 예정 스타일, 세션 변경목록, 되돌리기 가능 상태가 표시된다. | 저장된 fid가 없어 최종 삭제 저장은 불가했다. 미저장 preview 클릭 후 삭제 변경 전환은 확인되지 않았고, 세션에는 ADD 1건만 남았다. | P2 | 미저장 ADD 객체 삭제는 세션 목록의 마지막 변경 취소와 같은 명시적 UI로 안내하거나 지도 클릭 삭제를 지원한다. |
| 취소/롤백 | 세션 팝업에서 마지막 변경 취소 클릭 |
마지막 변경분이 제거되고 저장할 변경분이 없어야 한다. | 총 0건, 저장할 편집 변경분이 없습니다. 확인. 지도 상태문구도 가장 최근 편집 변경분을 세션에서 제거했습니다.로 표시 |
통과 | 최종 저장 실패 후 사용자가 쉽게 정리할 수 있도록 이 동작을 메인 툴바에도 노출하는 방안을 검토한다. |
2.13.3 네트워크/API 응답
| 순번 | 요청 | 테스트 관리번호 | 응답 | 기록 |
|---|---|---|---|---|
| 147 | POST http://localhost:3002/sewerage-service/api/v1/map/gisEditSessions/save |
QA-PW-20260526-001 |
500 Internal Server Error, body {"message":"ERROR","status":500,"code":"E999"} |
clientTempId=NEW-1, fid/editSn 미발급 |
| 149 | POST http://localhost:3002/sewerage-service/api/v1/map/gisEditSessions/save |
QA-PW-20260526-002 |
500 Internal Server Error, body {"message":"ERROR","status":500,"code":"E999"} |
clientTempId=NEW-2, fid/editSn 미발급 |
- 2차 저장 요청 주요 payload:
layerId:tb_ms_swage_pplsaveTargetType:FINALview.srs:EPSG:5179editType:ADDgeometry.type:LineStringcoordinates:[[1068626.8294507712,1774978.3276935548],[1068741.356641528,1774930.6080307395],[1068855.8838322847,1774978.3276935548]]attributes.fclt_mng_no:QA-PW-20260526-002attributes.inst_mng_no:QA-PW-20260526-002attributes.fcltMngNo: 빈 문자열attributes.mngInstCd: 빈 문자열
2.13.4 콘솔 오류
GET http://localhost:3002/server/cms-service/api/v1/menu-roles/SN->401 UnauthorizedPOST http://localhost:3002/sewerage-service/api/v1/map/gisEditSessions/save->500 Internal Server ErrorGIS 편집 저장 실패: Error: ERRORAxiosError
2.13.5 화면 캡처
D:\workspace\qa-evidence\sfr-012-003-login-map-loaded.pngD:\workspace\qa-evidence\sfr-012-003-add-before-save.pngD:\workspace\qa-evidence\sfr-012-003-session-add-failed-payload.pngD:\workspace\qa-evidence\sfr-012-003-add-retry-before-save.pngD:\workspace\qa-evidence\sfr-012-003-move-unsaved-no-selection.pngD:\workspace\qa-evidence\sfr-012-003-vertex-unsaved-no-handles.pngD:\workspace\qa-evidence\sfr-012-003-session-undo-clean.png
2.13.6 현재 판정
ADD는 화면 조작, 상세정보 입력, 세션 반영, 저장 버튼 활성화까지는 통과했지만 최종 저장 API가500 E999로 실패해 통합 검증은 실패로 판정한다.MOVE,VERTEX_EDIT,DELETE는 저장된 테스트 fid가 없어 최종본 기준 검증을 수행하지 못했다. 미저장 preview 기준으로는 선택/drag/삭제 피드백이 명확하지 않아 보류 및 UX 결함으로 분류한다.- 테스트 관리번호
QA-PW-20260526-001/002는 저장 실패로fid/editSn이 생성되지 않았다. 최종본 삭제 저장 정리 대상은 없었고, FE 로컬 세션은총 0건으로 정리했다. next build,pnpm --filter sn run build,pnpm turbo run build --filter=sn은 실행하지 않았다.sndev server가3002에서 실행 중이므로 AGENTS.md 기준에 따라 빌드 검증은 제외했다.
2.14 2026-06-08 스냅핑 토글 / Delete 키 꼭지점 삭제 코드 반영 점검
- 코드 기준 점검
GisEditToolbar에스냅핑on/off 버튼이 추가됐고, 편집 세션 팝업 헤더에도스냅핑 ON/OFF상태가 보이도록 반영했다.useGisEdit는isSnapEnabled상태를 관리하고,MOVE,VERTEX_EDIT안내 문구에 스냅핑 상태를 함께 반영한다.- 초기 반영 직후
ADD에는 스냅핑이 연결되지 않아 사용자가 스냅핑 ON 상태로 신규 관로를 그려도 기존 관로에 붙지 않는 문제가 있었다. - 후속 수정으로
page.tsx의ADD,MOVE,VERTEX_EDITinteraction 진입 시 현재 보이는 하수관로 원본/preview feature를 묶은Snapinteraction을 함께 추가한다. VERTEX_EDIT중 vertex handle을 클릭하면 선택 상태가 유지되고, 키보드Delete로 해당 꼭지점을 삭제한 뒤updateChangeGeometry(..., { keepVertexEditActive: true })흐름으로 세션/preview를 다시 갱신한다.- midpoint는 클릭 시 안내 문구만 내리고 Delete 삭제 대상에서는 제외한다.
- 꼭지점 삭제 유틸은 선형 최소 2점, 폴리곤 최소 3점을 보장하도록 방어 로직이 들어갔다.
- 정적 검증
- 실행 명령
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0
- 결과
- 이번 변경분 관련 신규 타입 오류는 정리했다.
- 아래 기존 저장소 오류는 그대로 남아 있다.
app/(map-layout)/map/components/common/index.ts타입 불일치app/(map-layout)/map/page.tsx기존 null 가능성 경고 1건app/html/(with-base-layout)/layout.tsximport 누락- 공통 chart 컴포넌트 implicit any
- 실행 명령
- 수동 재검증 필요 항목
- 스냅핑
ON/OFF에 따라ADD,MOVE,VERTEX_EDIT체감이 실제로 달라지는지 - 주황색 실꼭지점 클릭 후
Delete입력이 정상 동작하는지 - 2점만 남은 선형에서 Delete가 차단되는지
- 겹친 handle 묶음에서 Delete가 기대한 범위만 제거하는지
- 스냅핑
2.15 2026-06-08 QGIS 기준 1차 스냅 재구현 점검
- 코드 기준 점검
- 기존 “현재 지도에 이미 올라온 feature를 임시 수집”하던 방식 대신, 현재 화면 BBOX 기준
tb_ms_swage_pplWFS를 직접 다시 읽어오는 전용 pipe snap source를 추가했다. ADD는Draw + Snap(source)구조로 다시 연결했고,VERTEX_EDIT도 custom vertex handle 위에 같은 pipe snap source를 사용하도록 조정했다.- 후속 보정으로
MOVE도 같은 pipe snap source를 우선 사용하도록 확장했다. VERTEX_EDIT에서 기존 관로를 편집하는 경우에는 자기 자신 fid를 snap source에서 제외해 원본 자기 geometry에 다시 달라붙는 현상을 줄이도록 보강했다.moveend시 pipe snap source를 재조회해 현재 보이는 원본 하수관로를 기준으로 스냅 상태를 갱신한다.
- 기존 “현재 지도에 이미 올라온 feature를 임시 수집”하던 방식 대신, 현재 화면 BBOX 기준
- 정적 검증
- 실행 명령
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0
- 결과
- 이번 1차 재구현으로 인한 신규 타입 오류는 정리했다.
- 남은 오류는 기존 저장소 오류와 기존
page.tsxnull 가능성 1건이다.
- 실행 명령
- 수동 재검증 필요 항목
- 기존 오수관 끝점/선분 근처에서
ADD시작점과 끝점이 실제로 붙는지 - 기존 오수관 꼭지점 근처에서
VERTEX_EDIT주황색 실꼭지점이 실제로 붙는지 - 기존 오수관 끝점/선분 근처에서
MOVE결과 geometry가 실제로 붙는지 - 지도 이동 후 다른 위치에서도 snap source가 새로 갱신되어 계속 붙는지
- 기존 오수관 끝점/선분 근처에서
2.16 2026-06-08 MOVE grip 기준 재보정 및 입력정보 조회 오류 점검
- 코드 기준 점검
MOVE는 이제 관로 선택 순간 클릭 위치에서 가장 가까운 관로 꼭지점 meta를move grip으로 기억한다.- 드래그 시작/중/종료 시 원본 geometry snapshot을 다시 만들고,
move grip이 하수관로 원본 snap source에 붙도록 전체 geometry를 재정렬한다. - 따라서
MOVE도ADD,VERTEX_EDIT처럼 “사용자가 조작하는 한 점이 스냅 기준”이 되도록 맞췄다. - 관로 상세 팝업의 입력정보 조회는
fcltMngNo,mngInstCd를encodeURIComponent(...)처리하고,NEW-*임시값 조회를 차단하도록 보강했다.
- 정적 검증
- 실행 명령
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0
- 결과
- 이번 보정으로 인한 신규 타입 오류는 정리했다.
- 저장소 기존 오류만 남아 있다.
- 실행 명령
- 수동 재검증 필요 항목
- 관로 끝점 근처를 잡고
MOVE할 때 grip 기준으로 자연스럽게 붙는지 - 관로 중간을 잡고
MOVE했을 때도 가장 가까운 관로 꼭지점을 기준으로 결과가 일관적인지 - 이동 중 관로 상세 팝업이 열려도
fetchPipeInputInfo500이 재발하지 않는지
- 관로 끝점 근처를 잡고
2.17 2026-06-26 MOVE 도구 on/off 요구사항 분석 결과
- 문서/코드 대조 결과
- 툴바는 이미 같은
이동버튼을 다시 누르면deactivateTool()로 꺼지는 구조다. - 현재 “한 번 이동하면 이동이 꺼지는” 동작은 사용자가 버튼을 다시 눌러서가 아니라
MOVEtranslateend이후updateChangeGeometry()기본 경로가activeTool을null로 비우기 때문에 발생한다. VERTEX_EDIT는keepVertexEditActive옵션으로 연속 편집을 유지하는 특수 경로가 있으나,MOVE는 같은 유지 옵션이 없다.
- 툴바는 이미 같은
- 이번 라운드 결과
useGisEdit.updateChangeGeometry()에keepMoveToolActive옵션을 추가했다.MOVEtranslateend호출에서{ keepMoveToolActive: true }를 넘겨 이동 완료 후에도activeTool="MOVE"가 유지되도록 했다.pendingInteraction은 이동 완료 후 비워 다음 관로 클릭이 새 이동 대상으로 처리되게 했다.
- 정적 검증
- 실행 명령:
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0 - 결과: 실패. 저장소 기존 오류(
components/common/index.ts,floodHistoryTypes.ts,page.tsx기존 null 가능성, html route, chart props implicit any`)에서 중단됐다. - 이번 변경 파일인
useGisEdit.ts관련 신규 오류는 출력되지 않았다.
- 실행 명령:
- 후속 검증 필요
- 관로 A 이동 후 이동 버튼 active 유지 여부
- 관로 B 연속 이동 가능 여부
- 이동 버튼 재클릭 off 여부
추가/꼭지점편집/삭제/스냅핑/닫기/저장회귀 여부
3. 현재 검증 상태
3.1 통과
GIS 편집모드 진입/종료- 레이어별 도구 활성 규칙
- 세션
undo,reset MOVE의 기본 preview drag스냅핑토글 상태의 툴바/세션 스냅샷 반영VERTEX_EDIT실꼭지점 선택 후Delete키 처리 코드 경로ADD,VERTEX_EDIT의 하수관로 전용 WFS snap source 연결MOVE의 grip vertex 기준 snap 보정 코드 경로- 하수관로
ADD/MOVE/DELETE최종본/이력 DB 저장
3.2 진행 중
ADDgeometry family별 직접 캡처- 2026-05-26 Playwright 재검증 기준
ADD최종 저장 API500 E999원인 분석 및 재검증 VERTEX_EDIT의 QGIS 기준 사용자 경험 재정렬ADD,VERTEX_EDIT의 실제 QGIS 체감 스냅 수동 재검증MOVE,VERTEX_EDIT실조작 수동 재검증MOVEgrip 기준 snap 체감 수동 재검증스냅핑 ON/OFF체감과 실제 snap 대상 범위 수동 재검증Delete꼭지점 삭제 후 남은 선형 연결 상태 수동 재검증- 2026-05-26 재검증에서 확인된
이동,꼭지점편집,삭제선택 피드백/조작 피드백 개선
3.3 보류
- 저장 성공 후 GeoServer/GWC 캐시 무효화 운영 방식 검증
ADD저장 실패로 인한 신규 fid 기반MOVE/VERTEX_EDIT/DELETE/삭제 저장 정리재검증- QA 서브에이전트 또는 독립 검증자가 사용할 수 있는 로컬 로그인/인증 절차 문서화
4. 보류/리스크
- 2026-05-26 Playwright 재검증에서 신규 관로 저장 API가
500 E999로 실패해 최종본 기준 편집 시나리오가 차단됐다. - 신규 관로 상세정보 저장 payload에서
fclt_mng_no/inst_mng_no는 입력값이 들어가지만fcltMngNo/mngInstCd는 빈 문자열로 남아 필수 식별자 정합성 리스크가 있다. - dev 서버가 켜져 있으면
next build를 함께 돌리기 어렵다. next lint는 환경 이슈로 안정적인 회귀 수단이 되지 못하고 있다.- 지도 캔버스 기반 drag/vertex 테스트는 수동 브라우저 검증 의존도가 높다.
VERTEX_EDIT는 하수관로LineString/MultiLineString처리와 vertex marker UX를 다시 고정해야 한다.- 현재 저장소의 기존 TypeScript 오류 때문에 변경분만 분리한 정적 통과 여부를 보장하기 어렵다.
- 기존 관로와 겹친 위치에서 자동 클릭 기반
MOVE/DELETE검증을 수행하면 의도하지 않은 기존 관로가 선택될 수 있다. GIS 편집 세션이 popup에 의존하면 팝업 차단, 포커스 이동, 별도 창 위치 문제로 사용자가 변경목록을 놓칠 수 있다.- 저장 검증 메시지와 화면 필드명이 불일치하면 신규 관로 저장 실패 원인을 사용자가 잘못 이해할 수 있다.
- 지도 초기 로딩 오류가 남아 있으면 GIS 편집 결함과 공통 지도/코드/레이어 설정 오류를 분리하기 어렵다.
- 스냅핑은 현재 source에 로드된 하수관로 원본/preview만 대상으로 하므로, 화면 밖 객체나 미로딩 객체까지는 맞추지 못할 수 있다.
- 겹친 handle을 하나의 묶음으로 보여주는 현재 구조상, 같은 좌표를 공유하는 raw vertex는 Delete 시 함께 제거될 수 있다.
4-1. 관측 증적 요약
- 자동으로 확인된 항목
CLEANWATER계정 로그인 후/map진입GIS편집모드 진입/종료- 신규 관로
ADDpreview 생성, 상세정보 입력, 세션 목록 반영 - 레이어별 도구 활성 규칙
- 세션
undo,reset MOVE의 기본 preview drag 준비 구조
- 수동 또는 후속 확인이 필요한 항목
ADD저장 API500 E999원인 확인- 실제 canvas drag 정확도
VERTEX_EDIT의 vertex marker 노출과 꼭지점 직접 이동- 저장 API 연결 후 응답 처리와 원본 보호
- 간접 관측 표식
- 상태 메시지
- 변경 목록
- preview label
- 임시 삭제 스타일
4-2. 차단 사유 분류
자동화 한계- 지도 캔버스 기반 drag/vertex 조작은 자동 브라우저 재현 안정성이 낮다.
- 이번 세션에서는 Playwright 또는 브라우저 플러그인 기반 canvas 자동화 경로를 확보하지 못했다.
인증 차단- 실제 브라우저 통합 검증은 로그인/세션 준비 여부에 따라 막힐 수 있다.
환경 차단- dev 서버 실행 중 build 병행이 어렵고, lint도 안정적 회귀 수단이 아니다.
기능 결함 또는 미완료ADD최종 저장이500 E999로 실패해 신규 fid 기반 후속 검증이 차단된다.VERTEX_EDIT는 아직 요구사항 기준으로 다시 고정이 필요하다.
5. 흡수한 기존 문서
002-qa-SFR-012-003-하수관로편집-검증결과.md004-qa-SFR-012-003-하수관로편집-후속검증결과.md006-qa-SFR-012-003-하수관로편집-세션도구확장검증결과.md008-qa-SFR-012-003-하수관로편집-실제지도조작검증결과.md010-qa-SFR-012-003-하수관로편집-MOVE실드래그검증결과.md012-qa-SFR-012-003-하수관로편집-VERTEX_EDIT실조작검증결과.md
2.18 2026-06-26 관로 입력정보 조회 오류 방어 결과
- 확인된 오류
GisEditPipeSessionPopup.useEffect.fetchPipeInputInfo에서GET /api/v1/fcltppl/{fcltMngNo}/{mngInstCd}실패 응답이buildRequestError()를 거쳐Error: ERROR로 콘솔 출력됐다.
- 조치 결과
- 프론트는 잘못된 상세 식별값 조회를 차단하고, 선택적 조회 실패를 콘솔 오류로 출력하지 않도록 수정했다.
- 백엔드는 관로 상세 보조속성/관리기관명 조회 실패를 빈 보조정보로 fallback하여 상세 API가 가능한 한 200 응답을 유지하도록 보강했다.
- 정적 검증
- FE TypeScript 명령은 기존 저장소 오류로 실패했다. 이번 수정 파일인
GisEditPipeSessionPopup.tsx관련 신규 오류는 출력되지 않았다. - BE
./gradlew.bat compileJava는 통과했다. - FE/BE
git diff --check는 CRLF 경고만 출력했고 whitespace 오류는 없었다.
- FE TypeScript 명령은 기존 저장소 오류로 실패했다. 이번 수정 파일인
- 남은 수동 검증
- 브라우저에서 MOVE 후 상세 팝업 진입 시 Console Error 오버레이가 뜨지 않는지 확인이 필요하다.
- Network 탭에서
fcltppl조회가 실패해도 팝업 입력 흐름이 유지되는지 확인이 필요하다.
2.19 2026-06-29 임시 관로 스냅 및 세션 버튼 재정렬 점검
- 코드 기준 점검
page.tsx의 pipe snap source는 이제 원본 하수관로 WFS만 담지 않고, 현재 세션의ADD/MOVE/VERTEX_EDITpreview 관로도 함께 합친다.- 기존 수정 관로의 원본 fid는 WFS snap source에서 제외해, 이미 옮겨진 preview 관로가 수정 전 원본 geometry에 다시 붙지 않도록 조정했다.
GIS 편집 세션popup은취소,뒤로가기,초기화3버튼으로 바뀌었고,취소는 현재 focus된 change 제거,뒤로가기는 기존 마지막 변경 취소,초기화는 전체 세션 비우기 역할로 분리됐다.- 현재 상세 패널이 열린 change를
취소로 제거하면 우측 상세 패널도 닫히도록 방어 로직을 추가했다.
- 정적 검증
- 실행 명령:
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0 - 결과: 실패. 저장소 기존 오류(
components/common/index.ts,floodHistoryTypes.ts,page.tsx기존 null 가능성, html route, chart implicit any`)만 남았고, 이번 변경 파일 신규 오류는 출력되지 않았다.
- 실행 명령:
- 남은 수동 검증
- 신규 관로 A를 추가한 직후 신규 관로 B를 추가하거나 이동/꼭지점편집할 때 A preview에 실제로 스냅되는지 확인이 필요하다.
취소버튼이 현재 선택 change만 제거하고,뒤로가기는 가장 최근 change를 제거하는지 popup과 지도 focus 기준으로 확인이 필요하다.취소로 현재 상세 패널 대상 change를 제거했을 때 우측 패널이 자연스럽게 닫히는지 확인이 필요하다.
2.20 2026-07-15 편집 세션 인라인 전환 검증 결과
- 통과
git diff --check: 통과- 레이아웃/팝업 계약 정적 검사: 통과
- 인라인 위치
left-[278px] top-4, 최대 높이max-h-[calc(50dvh-82px)]확인 - 도구바 위치
top-[84px], 최대 너비760px확인 - 변경 목록
overflow-y-auto확인 - 기존 팝업 정의
width: 460,height: 640유지 확인
- 인라인 위치
- 변경 파일 기준 TypeScript 신규 오류는 확인되지 않았다.
- 전체 TypeScript 검사
- 명령:
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0 - 결과: 실패. 이번 변경과 무관한 기존 선행 오류 9건(
components/common/index.ts,floodHistoryTypes.ts,map/page.tsx:4666, html route, 공통 chart implicit any)이 남아 있다.
- 명령:
- 브라우저 확인
- 개발 서버는 기동됐으나
/map접근이/auth/login으로 리다이렉트되어 로그인 정보 없이 실제 지도 조작 검증은 수행하지 않았다. - 인증 우회나 임의 계정 사용은 하지 않았다.
- 개발 서버는 기동됐으나
- 후속 수동 검증
- 로그인 세션에서 GIS 편집 진입 시 새 창이 자동 생성되지 않고 인라인 세션이 표시되는지 확인한다.
- 실제 변경분을 여러 건 추가해 패널 성장과 목록 스크롤, 시설물 접기 토글 비가림을 확인한다.
팝업버튼으로 기존 크기/위치의 팝업이 열리고 인라인과 상태가 동기화되는지 확인한다.
2.21 2026-07-15 사용자 화면 피드백 2차 반영 결과
- 정적 검증 통과
- 인라인 표시 조건과 팝업 표시 조건이
gisEditSessionView로 상호 배타 처리되는 것을 확인했다. - 검색바 이동 클래스
ml-[clamp(160px,16vw,220px)]와 공통Gis.searchBarClassName기본값을 확인했다. - embedded 도구바가 인라인 세션 다음 형제로 렌더링되는 것을 확인했다.
- 팝업
화면에서 보기버튼,GIS_EDIT_SESSION_SHOW_INLINE송수신, 팝업 직접 닫기 시 인라인 복원 처리를 확인했다. - 기존 팝업 정의
width: 460,height: 640유지 및git diff --check통과.
- 인라인 표시 조건과 팝업 표시 조건이
- TypeScript
- 전체 검사 결과는 기존 선행 오류 9건으로 실패했으며 이번 2차 변경 파일의 신규 오류는 출력되지 않았다.
- 기존 오류 위치 중
map/page.tsx행 번호만 코드 추가로4677로 이동했다.
- 자동 브라우저 제한
- 로그인된 지도 탭이 없어 실제 화면 조작 검증은 수행하지 못했다.
- 사용자 제공 화면으로 배치 결함을 확인했고, 9절의 검색바 비가림·도구바 종속 배치·양방향 전환은 로그인 환경에서 후속 확인이 필요하다.
2.22 2026-07-15 표시 영역 기준 최종 보정 결과
- 정적 검증 통과
- 검색바 이동용 prop과 클래스가 제거되고 공통
Gis.jsdiff가 없는 것을 확인했다. - 인라인 세션 위치
left-[258px] top-4, 너비360px를 확인했다. - 변경분 0건 축약 조건과 작업 버튼/빈 목록 숨김 처리를 확인했다.
- 도구바 위치
bottom-12 left-1/2, 최대 너비960px를 확인했다. - 팝업 상호 전환 계약과 기존
460 x 640크기는 유지된다. git diff --check통과.
- 검색바 이동용 prop과 클래스가 제거되고 공통
- TypeScript
- 전체 검사는 기존 선행 오류 9건으로 실패했으며 이번 최종 위치 보정의 신규 오류는 출력되지 않았다.
- 수동 확인 대기
- 로그인된 지도 화면에서 파란 표시 영역과 실제 좌표가 일치하는지 확인이 필요하다.
2.23 2026-07-15 인라인 편집 세션 너비 보정 결과
- 사용자 화면으로
360px세션의 검색바 돌출을 확인했다. - 인라인 세션 계약을
left-[258px] top-4 w-[220px]로 변경했다. - 검색바 이동 코드가 없고 하단 도구바
bottom-12가 유지되는 것을 정적으로 확인했다. git diff --check통과. 로그인 화면에서 검색바 비가림 해소 최종 확인이 필요하다.
2.24 2026-07-15 인라인 세션 260px 보정 결과
- 인라인 세션 계약을
left-[258px] top-4 w-[260px]로 조정했다. - 검색바 이동 코드가 없고 하단 도구바 위치가 유지되는 것을 확인했다.
git diff --check통과.
2.25 2026-07-15 축약 세션 높이·너비 조정 결과
- 인라인 세션 위치/크기 계약
left-[258px] top-4 w-[265px]를 확인했다. - 변경분 0건 축약 조건에만
h-[58px]가 적용되는 것을 확인했다. - 하단 도구바와 검색바 위치가 변경되지 않았고
git diff --check가 통과했다.
2.26 2026-07-15 편집 세션 상단 정렬 보정 결과
- 인라인 세션 위치 계약
left-[258px] top-[26px] w-[265px]를 확인했다. - 축약 높이
58px와 하단 도구바 위치가 유지되는 것을 확인했다. git diff --check통과.
2.27 2026-07-15 변경 카드 표시 보정 결과
- 제목과 선택 배지에 한 줄 표시 계약이 적용된 것을 확인했다.
- 선택 카드에서 정보저장 배지가 동시에 표시되지 않는 것을 확인했다.
- 추가·이동·꼭지점편집·삭제·상세정보수정별 축약 안내 문구를 확인했다.
git diff --check통과.- 전체 TypeScript 검사는 기존 선행 오류 9건만 출력됐고 이번 변경 파일의 신규 오류는 없었다.
2.28 2026-07-15 한 줄 안내 문구 보정 결과
- 다섯 편집 유형의 안내가 다음 행동을 설명하는 짧은 문구로 변경된 것을 확인했다.
- 카드 하단
truncate text-[11px]계약과 제목/선택 배지 한 줄 표시가 유지된다. git diff --check통과.
2.29 2026-07-15 사용자 수동 검증 완료
- 사용자가 로그인된 실제 지도 화면에서 이번 유지보수 범위의 수동 검증 완료를 확인했다.
- 확인 범위
- 검색바 위치 유지 및 인라인 편집 세션 비가림 해소
- 축약 세션 위치·높이·너비와 변경분 증가 시 확장/스크롤
- 하단 중앙 GIS 편집 도구바 배치
- 인라인·윈도우 팝업 상호 전환
- 변경 카드 제목/선택 표시 한 줄 노출 및 안내 문구 가독성
- 결론: SFR-012-003 프론트 유지보수 수동 검증 완료.
2.30 2026-07-15 GIS 편집 토글 종료 보정 결과
- 인라인 세션 표시와 팝업 sync가
gisEdit.isEditMode를 기준으로 동작하는 것을 정적으로 확인했다. - 편집 종료 시 팝업 닫기, 재진입 시 inline 복원 처리를 확인했다.
- 변경분 배열을 비우지 않아 재진입 복원 계약이 유지된다.
git diff --check통과. 실제 지도에서 11절 시나리오 수동 검증이 필요하다.
2.31 2026-07-15 GIS 편집 토글 종료 사용자 수동 검증 완료
- 사용자가 실제 지도에서 GIS 편집 두 번째 클릭 시 하단 도구바와 인라인 세션이 함께 사라지는 것을 확인했다.
- 다시 GIS 편집 진입 시 기존 변경분과 인라인 세션이 복원되는 것을 확인했다.
- 결론: 추가 회귀 보정까지 사용자 수동 검증 완료.
2.32 2026-09-01 GIS 편집작업 공통코드 1차 적용 검증
- 실제 CMS 캐시 API 확인
GISEDITOPRT:ADD=추가,MOVE=이동,VERTEX_EDIT=꼭지점편집,DELETE=삭제4건 확인GISEDITTYPE:C=등록,U=수정,D=삭제3건 확인
- 전체 TypeScript 검사
- 명령:
node apps/sn/node_modules/typescript/bin/tsc -p apps/sn/tsconfig.json --noEmit --pretty false --ignoreDeprecations 5.0 - 결과: 통과
- 명령:
- SN 프로덕션 빌드
- Next.js 최적화 컴파일과 정적 페이지 28개 생성까지 통과했다.
- standalone traced file 복사 단계에서 Windows symlink
EPERM으로 최종 종료코드 1이 발생했다. - TypeScript 또는 이번 변경 코드의 컴파일 오류는 아니다.
git diff --check는 줄바꿈 변환 경고 외 whitespace 오류 없이 통과했다.- 실제 지도 화면에서 툴바와 인라인·팝업 세션 라벨이 CMS 응답으로 표시되는지는 로컬 배포 또는 개발 서버 기동 후 수동 확인이 남아 있다.