From 3293893b7f4247d2aa4637c32e288871f8c23d82 Mon Sep 17 00:00:00 2001 From: kiminchan Date: Mon, 27 Apr 2026 16:42:47 +0900 Subject: [PATCH] =?UTF-8?q?merge=EC=A0=84=20md=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../page.tsx | 0 apps/sn/docs/AI코딩하네스/개요.md | 41 --- .../001-노후관로관리-브라우저-네트워크-증적.md | 62 ----- .../AI코딩하네스/기준문서/001-프로젝트.md | 22 -- .../docs/AI코딩하네스/기준문서/002-화면맵.md | 19 -- .../docs/AI코딩하네스/기준문서/003-API사용.md | 24 -- .../AI코딩하네스/기준문서/004-컴포넌트정책.md | 22 -- .../AI코딩하네스/기준문서/005-상태관리정책.md | 19 -- .../AI코딩하네스/기준문서/006-검증정책.md | 34 --- .../기준문서/007-멀티에이전트운영.md | 45 ---- .../AI코딩하네스/기준문서/008-문서구조기준.md | 160 ------------ .../기준문서/009-AI개발작업흐름.md | 244 ------------------ .../AI코딩하네스/보고/2026-04-16/개선사항.md | 5 - .../AI코딩하네스/보고/2026-04-16/결과보고.md | 51 ---- .../docs/AI코딩하네스/보고/2026-04-16/이슈.md | 8 - .../AI코딩하네스/보고/2026-04-16/작업목록.md | 10 - .../docs/AI코딩하네스/보고/2026-04-16/제안.md | 5 - .../AI코딩하네스/보고/2026-04-17/결과보고.md | 45 ---- apps/sn/docs/AI코딩하네스/보고/개요.md | 16 -- .../작업계획/000-작업카드-템플릿.md | 74 ------ .../작업계획/001-SN-P2-노후관로관리-작업카드.md | 55 ---- apps/sn/docs/AI코딩하네스/작업계획/개요.md | 17 -- apps/sn/docs/AI코딩하네스/작업목록.md | 19 -- apps/sn/docs/AI코딩하네스/한글경로-영향.md | 56 ---- apps/sn/docs/README.md | 40 --- apps/sn/docs/노후관로관리/00-범위.md | 32 --- .../01-기존화면기반-컴포넌트분해.md | 158 ------------ .../노후관로관리/02-컴포넌트별-작업목록.md | 240 ----------------- .../docs/노후관로관리/03-API응답필드매핑표.md | 73 ------ apps/sn/docs/노후관로관리/04-화면흐름.md | 40 --- apps/sn/docs/노후관로관리/05-검증계획.md | 39 --- apps/sn/docs/노후관로관리/06-검증결과.md | 114 -------- .../노후관로관리/07-백엔드-착수프롬프트.md | 55 ---- apps/sn/docs/노후관로관리/99-미확인사항.md | 27 -- apps/sn/docs/노후관로관리/README.md | 32 --- 35 files changed, 1903 deletions(-) rename apps/sn/app/(map-layout)/map/{aged-pipe-popup => agedPipePopup}/page.tsx (100%) delete mode 100644 apps/sn/docs/AI코딩하네스/개요.md delete mode 100644 apps/sn/docs/AI코딩하네스/검증/001-노후관로관리-브라우저-네트워크-증적.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/001-프로젝트.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/002-화면맵.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/003-API사용.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/004-컴포넌트정책.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/005-상태관리정책.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/006-검증정책.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/007-멀티에이전트운영.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/008-문서구조기준.md delete mode 100644 apps/sn/docs/AI코딩하네스/기준문서/009-AI개발작업흐름.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-16/개선사항.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-16/결과보고.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-16/이슈.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-16/작업목록.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-16/제안.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md delete mode 100644 apps/sn/docs/AI코딩하네스/보고/개요.md delete mode 100644 apps/sn/docs/AI코딩하네스/작업계획/000-작업카드-템플릿.md delete mode 100644 apps/sn/docs/AI코딩하네스/작업계획/001-SN-P2-노후관로관리-작업카드.md delete mode 100644 apps/sn/docs/AI코딩하네스/작업계획/개요.md delete mode 100644 apps/sn/docs/AI코딩하네스/작업목록.md delete mode 100644 apps/sn/docs/AI코딩하네스/한글경로-영향.md delete mode 100644 apps/sn/docs/README.md delete mode 100644 apps/sn/docs/노후관로관리/00-범위.md delete mode 100644 apps/sn/docs/노후관로관리/01-기존화면기반-컴포넌트분해.md delete mode 100644 apps/sn/docs/노후관로관리/02-컴포넌트별-작업목록.md delete mode 100644 apps/sn/docs/노후관로관리/03-API응답필드매핑표.md delete mode 100644 apps/sn/docs/노후관로관리/04-화면흐름.md delete mode 100644 apps/sn/docs/노후관로관리/05-검증계획.md delete mode 100644 apps/sn/docs/노후관로관리/06-검증결과.md delete mode 100644 apps/sn/docs/노후관로관리/07-백엔드-착수프롬프트.md delete mode 100644 apps/sn/docs/노후관로관리/99-미확인사항.md delete mode 100644 apps/sn/docs/노후관로관리/README.md diff --git a/apps/sn/app/(map-layout)/map/aged-pipe-popup/page.tsx b/apps/sn/app/(map-layout)/map/agedPipePopup/page.tsx similarity index 100% rename from apps/sn/app/(map-layout)/map/aged-pipe-popup/page.tsx rename to apps/sn/app/(map-layout)/map/agedPipePopup/page.tsx diff --git a/apps/sn/docs/AI코딩하네스/개요.md b/apps/sn/docs/AI코딩하네스/개요.md deleted file mode 100644 index 1f26ebdd2..000000000 --- a/apps/sn/docs/AI코딩하네스/개요.md +++ /dev/null @@ -1,41 +0,0 @@ -# sn 2차사업 하네스 운영 문서 - -## 목적 -이 문서는 하수관로 운영관리 시스템 `sn` 프론트엔드 2차사업 작업을 기능 단위로 안전하게 진행하기 위한 경량 하네스 기준이다. - -AI_SAM `refactoring` 브랜치의 하네스 운영 방식 중 우리 프로젝트에 필요한 부분만 수용한다. - -- 작업카드로 범위와 검증 방법을 먼저 고정한다. -- 실행 기록을 남겨 중간에 작업자가 바뀌어도 이어서 진행할 수 있게 한다. -- `sn` 앱과 허용된 공통 비즈니스 컴포넌트 범위를 벗어나는 수정을 방지한다. -- 백엔드 API 계약과 화면 설계 근거를 연결해서 브라우저 검증까지 추적한다. - -## 적용 범위 -- 확인됨: `apps/sn/**`은 이번 작업의 주 프론트엔드 범위이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: `packages/common/business_components/**`만 수정 가능한 공통 비즈니스 컴포넌트 범위이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 그 외 앱과 공통 패키지는 기본적으로 읽기/분석 대상이며 직접 수정하지 않는다. 근거: `apps/sn/AGENTS.md` -- 추정: 기능 구현 시 백엔드 `sewerage-service` API와 함께 브라우저 동작을 확인해야 한다. 근거: `apps/sn/AGENTS.md` - -## 문서 구조 -- `작업목록.md`: 2차사업 프론트엔드 작업 목록과 상태 -- `기준문서/`: 프로젝트, 화면, API, 컴포넌트, 상태관리, 검증 기준 -- `작업계획/`: 작업카드 템플릿과 기능별 실행 계획 -- `보고/`: 일자별 작업 결과, 이슈, 제안, 개선 기록 - -## 멀티에이전트 기준 -- `sn` 작업에서 BE/FE/QA 역할 분리와 합류 기준은 `기준문서/007-멀티에이전트운영.md`를 따른다. -- 백엔드 API, DB, 서비스 흐름과 함께 작업하는 경우 백엔드 기준문서 `D:\workspace\IIPBS\sewerage-service\docs\AI코딩하네스\기준문서\009-멀티에이전트운영.md`도 함께 확인한다. - -## 운영 원칙 -- 기능 단위로 작업카드를 먼저 작성한다. -- 수정 전 영향 범위와 롤백 방법을 문서에 남긴다. -- API 계약 변경이 필요한 경우 프론트에서 임의로 처리하지 않고 백엔드 작업으로 분리한다. -- `packages/common/business_components` 수정은 `sn` 화면에서 실제로 재사용되는 범위로 제한한다. -- 브라우저 테스트가 필요한 작업은 URL, 사용자 조작, 기대 결과를 함께 기록한다. - -## 사용 순서 -1. `기준문서/` 문서에서 현재 기준을 확인한다. -2. `작업목록.md`에서 작업 상태를 확인한다. -3. `작업계획/000-작업카드-템플릿.md`를 복사해 기능별 계획을 작성한다. -4. 구현 또는 수정 후 `보고/YYYY-MM-DD/`에 결과를 기록한다. -5. 외부 범위 이슈는 `이슈.md`, 개선 제안은 `제안.md`, 반복 개선점은 `개선사항.md`에 남긴다. diff --git a/apps/sn/docs/AI코딩하네스/검증/001-노후관로관리-브라우저-네트워크-증적.md b/apps/sn/docs/AI코딩하네스/검증/001-노후관로관리-브라우저-네트워크-증적.md deleted file mode 100644 index 5997c0649..000000000 --- a/apps/sn/docs/AI코딩하네스/검증/001-노후관로관리-브라우저-네트워크-증적.md +++ /dev/null @@ -1,62 +0,0 @@ -# 노후관로관리 브라우저 수동 검증 체크리스트 및 네트워크 증적 양식 - -## 1. 대상 화면 -- 화면명: 노후관로정비사업 / 노후관로관리 -- 우선 검증 라우트: `/oper/oldPp` -- 관련 구현: `apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx` -- 관련 BE API: `GET /sewerage-service/api/v1/dcrpPpl` -- 관련 요구사항 근거: `apps/sn/app/html/06. 노후관로관리_시나리오_v1.0.md` - -## 2. 사전 조건 -| 항목 | 값 | -| --- | --- | -| 검증 일시 | | -| 검증자 | | -| 브라우저 | Chrome / Edge | -| FE URL | | -| BE URL | | -| 로그인 계정/권한 | | -| 테스트 데이터 기준 | | - -## 3. 수동 검증 체크리스트 -| 번호 | 단계 | 조작 | 기대 결과 | 결과 | 증적 | -| --- | --- | --- | --- | --- | --- | -| 1 | 화면 진입 | `/oper/oldPp` 또는 메뉴로 진입 | 검색 영역, 조회/등록 버튼, 목록 영역이 표시된다. | | 스크린샷 | -| 2 | 초기 조회 | 화면 로드 후 기본 조회 완료 대기 | 로딩이 종료되고 목록 또는 빈 목록이 표시된다. | | Network | -| 3 | 기간 조회 | 등록기간을 변경하고 조회 클릭 | `fromRegDt`, `toRegDt`가 Query String에 반영된다. | | Network | -| 4 | 명칭 조회 | 파일명/사업명 입력 후 Enter 또는 조회 클릭 | `dcrpPplMtncBizNm`이 Query String에 반영된다. | | Network | -| 5 | 페이지 이동 | 페이지네이션 클릭 | `page`가 변경되고 목록이 갱신된다. | | Network | -| 6 | 행 선택 | 목록 행 클릭 | 선택 행의 첨부 식별자가 상태에 반영되고 표 모달이 열린다. | | 스크린샷 | -| 7 | 데이터 없음 | 결과가 없는 조건으로 조회 | 오류 없이 빈 목록/0건 상태가 표시된다. | | 스크린샷 | -| 8 | 오류 응답 | BE 중지 또는 권한 오류 환경에서 조회 | 무한 로딩 없이 오류 로그/안내를 확인한다. | | Console/Network | - -## 4. 네트워크 응답 증적 양식 -| 항목 | 기록 | -| --- | --- | -| Request Name | | -| Method | `GET` | -| Request URL | `/sewerage-service/api/v1/dcrpPpl` | -| Query String | `fromRegDt=`, `toRegDt=`, `dcrpPplMtncBizNm=`, `auth=`, `page=`, `size=` | -| Status Code | | -| Response Headers 주요값 | `content-type`, `cache-control` | -| Response Body 주요 필드 | `content`, `totalElements`, `number`, `size`, `sort` | -| content 첫 행 주요 필드 | `dcrpPplMtncBizSn`, `mngYr`, `mngQu`, `atflId`, `dcrpPplMtncBizNm`, `rgtrNm` | -| 기대 결과 | Page 구조가 유지되고 JSON 파싱 오류가 없어야 한다. | -| 실제 결과 | | -| HAR/스크린샷 경로 | | - -## 5. 네트워크 증적 예시 -```text -GET /sewerage-service/api/v1/dcrpPpl?fromRegDt=2026-04-10&toRegDt=2026-04-17&dcrpPplMtncBizNm=&auth=&page=0&size=10 -Status: 200 -Response check: -- content: array -- totalElements: number -- number: 0 -- size: 10 -``` - -## 6. 이슈 기록 양식 -| 번호 | 증상 | 재현 단계 | 기대 | 실제 | 우선순위 | 담당 | 링크 | -| --- | --- | --- | --- | --- | --- | --- | --- | -| 1 | | | | | | | | diff --git a/apps/sn/docs/AI코딩하네스/기준문서/001-프로젝트.md b/apps/sn/docs/AI코딩하네스/기준문서/001-프로젝트.md deleted file mode 100644 index be374d764..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/001-프로젝트.md +++ /dev/null @@ -1,22 +0,0 @@ -# 프로젝트 기준 - -## 프로젝트 식별 -- 확인됨: 프론트엔드 저장소는 pnpm workspace와 Turborepo 기반 모노레포이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 하수관로 운영관리 시스템 프론트엔드 작업 대상 앱은 `apps/sn`이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 직접 수정 가능한 공통 패키지는 `packages/common/business_components`이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 백엔드 기준 프로젝트는 `sewerage-service`이다. 근거: `apps/sn/AGENTS.md` - -## 작업 목적 -- 확인됨: 현재 목적은 리팩토링 전용이 아니라 하수관로 운영관리 시스템 2차사업 고도화 개발이다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 기존 `sn` 화면의 안정성을 유지하면서 2차 요구사항에 맞는 화면 개발, 기능 확장, 백엔드 연동 보완을 수행한다. 근거: `apps/sn/AGENTS.md` - -## 직접 수정 허용 범위 -- 확인됨: `apps/sn/**`은 직접 수정 가능하다. 근거: `apps/sn/AGENTS.md` -- 확인됨: `packages/common/business_components/**`은 직접 수정 가능하다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 위 두 경로 밖은 기본적으로 읽기 전용이며, 수정 필요성이 있으면 먼저 문제 원인과 영향 범위를 문서화한다. 근거: `apps/sn/AGENTS.md` - -## 문서 기준 -- 확인됨: `sn` 관련 2차사업 작업 문서는 `apps/sn/docs/` 바로 아래 주제별 한글 폴더로 관리한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: AI 코딩 하네스 작업카드는 `apps/sn/docs/AI코딩하네스/작업계획/` 하위에 둔다. 근거: `apps/sn/AGENTS.md`, `apps/sn/docs/AI코딩하네스/개요.md` -- 확인됨: `phase2` 같은 별도 단계 폴더는 신규 문서 경로로 사용하지 않는다. 근거: `apps/sn/AGENTS.md`, `apps/sn/docs/AI코딩하네스/한글경로-영향.md` -- 추정: 백엔드와 함께 진행되는 기능은 백엔드 `docs/AI코딩하네스/작업계획/` 작업카드와 프론트 `apps/sn/docs/AI코딩하네스/작업계획/` 작업카드를 서로 참조하는 방식이 안전하다. 근거: `apps/sn/AGENTS.md`, 백엔드 `AGENTS.md` diff --git a/apps/sn/docs/AI코딩하네스/기준문서/002-화면맵.md b/apps/sn/docs/AI코딩하네스/기준문서/002-화면맵.md deleted file mode 100644 index b7b8868e4..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/002-화면맵.md +++ /dev/null @@ -1,19 +0,0 @@ -# 화면 기준 - -## 화면 분석 원칙 -- 확인됨: `apps/sn` 내부 화면과 라우팅, 컴포넌트를 우선 분석한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: `apps/sn/app/html`은 퍼블리싱, 정적 HTML, 로직 검토 목적의 별도 영역으로 본다. 근거: `apps/sn/AGENTS.md`, `apps/sn/app/html/AGENTS.md` -- 확인됨: `html` 하위 요청만으로 실제 `sn` 앱 코드 전체를 함께 수정하지 않는다. 근거: `apps/sn/AGENTS.md`, `apps/sn/app/html/AGENTS.md` - -## 화면 작업카드에 남길 항목 -- 확인 필요: 화면명 -- 확인 필요: 라우트 또는 접근 URL -- 확인 필요: 주요 사용자 조작 -- 확인 필요: 조회, 등록, 수정, 삭제, 엑셀, 지도, 팝업 등 기능 구분 -- 확인 필요: 호출 API -- 확인 필요: 사용 컴포넌트와 공통 비즈니스 컴포넌트 여부 -- 확인 필요: 브라우저 검증 절차 - -## 확인 필요 항목 -- 확인 필요: 2차사업 최종 화면명과 메뉴 트리는 화면설계서 기준으로 확정해야 한다. 근거: 2차사업 화면설계서 -- 확인 필요: 실제 운영 메뉴 권한과 라우팅 정책은 실행 환경에서 확인해야 한다. 근거: `apps/sn` 소스, 브라우저 검증 diff --git a/apps/sn/docs/AI코딩하네스/기준문서/003-API사용.md b/apps/sn/docs/AI코딩하네스/기준문서/003-API사용.md deleted file mode 100644 index 1c3471116..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/003-API사용.md +++ /dev/null @@ -1,24 +0,0 @@ -# API 연동 기준 - -## 기본 원칙 -- 확인됨: 프론트엔드는 백엔드 `sewerage-service` API와 연동한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 백엔드 응답 구조나 API 계약을 프론트엔드에서 임의로 변경했다고 가정하지 않는다. 근거: `apps/sn/AGENTS.md` -- 확인됨: API 계약 변경이 필요하면 백엔드 작업으로 분리하고 영향 범위를 먼저 정리한다. 근거: `apps/sn/AGENTS.md` - -## 응답 처리 기준 -- 확인됨: 백엔드 공통 응답은 `status`, `message`, `data`, `timestamp` 형태로 내려오는 API가 존재한다. 근거: 사용자 확인 응답 예시, 백엔드 `docs/응답표준화/02-백엔드응답규칙.md` -- 추정: `ResponseEntity` 적용 여부는 프론트엔드 수신 JSON 구조보다 HTTP 상태 코드와 헤더 제어에 더 직접적인 영향을 준다. 근거: 백엔드 응답 표준화 문서 -- 확인 필요: 각 화면의 API 클라이언트가 공통 응답 래퍼를 어디서 해제하는지는 `apps/sn` 소스에서 화면별로 확인해야 한다. 근거: `apps/sn` 소스 분석 필요 - -## 작업카드에 남길 항목 -- 확인 필요: HTTP method -- 확인 필요: URL -- 확인 필요: query/body 파라미터 -- 확인 필요: 정상 응답 예시 -- 확인 필요: 오류 응답 처리 방식 -- 확인 필요: 화면에서 사용하는 `data` 경로 -- 확인 필요: 로딩, 빈 결과, 권한 오류, 서버 오류 표시 방식 - -## 금지 기준 -- 확인됨: 프론트엔드에서 백엔드 API 계약 변경을 전제로 구현하지 않는다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 백엔드 응답을 임시로 우회하기 위한 화면 전용 하드코딩을 추가하지 않는다. 근거: `apps/sn/AGENTS.md` diff --git a/apps/sn/docs/AI코딩하네스/기준문서/004-컴포넌트정책.md b/apps/sn/docs/AI코딩하네스/기준문서/004-컴포넌트정책.md deleted file mode 100644 index 51c76c4c1..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/004-컴포넌트정책.md +++ /dev/null @@ -1,22 +0,0 @@ -# 컴포넌트 기준 - -## 수정 범위 -- 확인됨: `apps/sn` 내부 컴포넌트는 직접 수정 가능하다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 공통 비즈니스 컴포넌트는 `packages/common/business_components`만 직접 수정 가능하다. 근거: `apps/sn/AGENTS.md` -- 확인됨: `packages/common/components`, `packages/common/auth`, `packages/common/network` 등은 직접 수정하지 않는다. 근거: `apps/sn/AGENTS.md` - -## 컴포넌트 변경 원칙 -- 확인됨: `sn` 요구사항을 만족하기 위한 최소 범위로 수정한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 공통 컴포넌트 수정은 `sn`에 실제로 필요한 범위로 제한한다. 근거: `apps/sn/AGENTS.md` -- 추정: 여러 화면에서 반복되는 `sn` 전용 로직은 먼저 `apps/sn` 내부 공통화로 해결하고, 여러 업무 화면에서 공유되는 비즈니스 UI일 때만 `business_components`를 검토하는 것이 안전하다. 근거: `apps/sn/AGENTS.md` - -## 작업카드에 남길 항목 -- 확인 필요: 신규 또는 수정 컴포넌트 경로 -- 확인 필요: 호출하는 화면 경로 -- 확인 필요: props 변경 여부 -- 확인 필요: 기존 화면 영향 여부 -- 확인 필요: 공통 컴포넌트 수정 필요 여부 -- 확인 필요: 브라우저 확인 화면 - -## 외부 범위 이슈 -- 확인됨: 권한 밖 공통 패키지 수정이 필요해 보이면 직접 고치지 않고 문제 원인, 수정 필요 경로, `sn` 영향 범위, 타 앱 영향 가능성을 문서화한다. 근거: `apps/sn/AGENTS.md` diff --git a/apps/sn/docs/AI코딩하네스/기준문서/005-상태관리정책.md b/apps/sn/docs/AI코딩하네스/기준문서/005-상태관리정책.md deleted file mode 100644 index a6192d573..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/005-상태관리정책.md +++ /dev/null @@ -1,19 +0,0 @@ -# 상태관리와 화면 흐름 기준 - -## 상태관리 원칙 -- 확인됨: 기존 `sn` 화면 흐름과 사용자 동작을 가능한 유지하면서 2차 요구사항을 반영한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 복잡한 컴포넌트, 탭 분기, 폼 처리, 데이터 변환, 지도 연동, 공통 컴포넌트 조합 로직은 함수 또는 메서드 단위 주석을 상세히 작성한다. 근거: `apps/sn/AGENTS.md` -- 추정: 화면별 상태는 기존 패턴을 우선 따르고, 새 전역 상태 구조는 필요성이 확인된 경우에만 검토해야 한다. 근거: `apps/sn/AGENTS.md` - -## 화면 흐름 기록 항목 -- 확인 필요: 초기 진입 시 호출되는 API -- 확인 필요: 검색 조건 초기값 -- 확인 필요: 페이지네이션 또는 무한스크롤 방식 -- 확인 필요: 선택 행 또는 상세 패널 상태 -- 확인 필요: 등록, 수정, 삭제 후 재조회 방식 -- 확인 필요: 팝업, 모달, 지도, 파일, 엑셀 흐름 -- 확인 필요: 에러 메시지 표시 위치 - -## 주의 사항 -- 확인됨: 요구사항 근거 없는 기능 추가는 금지한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 다른 앱에서 사용하는 공통 상태 로직을 `sn` 문제 해결 목적으로 직접 바꾸지 않는다. 근거: `apps/sn/AGENTS.md` diff --git a/apps/sn/docs/AI코딩하네스/기준문서/006-검증정책.md b/apps/sn/docs/AI코딩하네스/기준문서/006-검증정책.md deleted file mode 100644 index 0796edd18..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/006-검증정책.md +++ /dev/null @@ -1,34 +0,0 @@ -# 검증 기준 - -## 기본 빌드 검증 -- 확인됨: `sn`만 수정한 경우 아래 명령으로 로컬 빌드를 확인한다. 근거: `apps/sn/AGENTS.md` - -```powershell -pnpm --filter sn run build -pnpm turbo run build --filter=sn -``` - -- 확인됨: `business_components`를 수정한 경우 아래 명령을 함께 확인한다. 근거: `apps/sn/AGENTS.md` - -```powershell -pnpm --filter @common/business_components run build -pnpm --filter sn run build -pnpm turbo run build --filter="...[origin/main]" -``` - -## pre-push 기준 검증 -- 확인됨: `main` 브랜치 push 전 `.husky/pre-push`에서 아래 형식의 빌드가 수행된다. 근거: `.husky/pre-push`, `apps/sn/AGENTS.md` - -```powershell -git fetch origin -pnpm turbo run build --filter="...[origin/main]" --dry-run -pnpm turbo run build --filter="...[origin/main]" -``` - -## 브라우저 검증 -- 확인됨: 백엔드 API 응답과 실제 브라우저 화면 동작을 함께 확인하는 것을 기본으로 한다. 근거: `apps/sn/AGENTS.md` -- 확인 필요: 각 기능별 URL, 로그인 계정, 권한, 테스트 데이터는 작업카드에서 확정한다. 근거: 실행 환경 확인 필요 - -## 검증 기록 -- 확인됨: 검증 결과는 `보고/YYYY-MM-DD/결과보고.md`에 기록한다. 근거: 이 하네스 운영 문서 -- 확인됨: 외부 범위 오류는 `보고/YYYY-MM-DD/이슈.md`에 기록한다. 근거: 이 하네스 운영 문서 diff --git a/apps/sn/docs/AI코딩하네스/기준문서/007-멀티에이전트운영.md b/apps/sn/docs/AI코딩하네스/기준문서/007-멀티에이전트운영.md deleted file mode 100644 index cd3d9c231..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/007-멀티에이전트운영.md +++ /dev/null @@ -1,45 +0,0 @@ -# 007. 멀티에이전트 운영 기준 - -## 목적 -- `sn` 2차사업 프론트 작업을 BE, FE, QA 역할과 안전하게 연결하기 위한 기준임 -- AI_SAM `refactoring` 브랜치의 병렬 분업 구조를 참고하되, `sn` 앱과 허용된 `business_components` 범위를 우선함 - -## 프론트 역할 범위 -| 역할 | 주 책임 | 직접 수정 가능 범위 | 직접 수정 금지 범위 | -| --- | --- | --- | --- | -| FE | 화면, 컴포넌트, 훅, 상태관리, API 호출부, 타입 | `apps/sn/**`, `packages/common/business_components/**` | 타 앱, `business_components` 외 공통 패키지, 루트 `docs/**` | -| BE | API 계약, 요청/응답 DTO, 서비스 흐름, DB 영향 | 백엔드 저장소 기준 | 프론트 저장소 직접 수정은 별도 합류 기준 필요 | -| QA | 빌드, 브라우저 조작, 네트워크 응답, 회귀 포인트 확인 | 검증 문서, 결과보고 | 기능 코드 임의 수정 | - -## FE 작업 시작 입력 -- 화면명과 진입 경로 -- 사용자 조작 흐름 -- 호출 API와 응답 필드 -- `apps/sn` 수정 파일 후보 -- `business_components` 수정 필요 여부 -- 허용 범위 밖 수정 필요 여부 -- 브라우저 검증 URL과 테스트 데이터 -- 완료 조건 - -## BE 합류 필요 조건 -- API 경로, method, 요청 파라미터, 응답 필드가 화면 요구사항과 불일치함 -- 오류 응답 구조 또는 HTTP 상태 코드 처리가 화면 요구사항과 충돌함 -- 저장/삭제/분석 실행이 DB 스키마 또는 데이터 보정에 의존함 -- 권한, 인증, 외부 연동 기준 확인이 필요함 - -## QA 합류 필요 조건 -- `sn` 빌드 확인 필요 -- `business_components` 변경으로 타 앱 영향 가능성이 있음 -- 브라우저 화면 조작 또는 네트워크 응답 확인이 완료 조건에 포함됨 -- 로그인, 권한, 테스트 데이터 제약으로 수동 확인 절차가 필요함 - -## 병렬 작업 기준 -- `apps/sn` 화면 구현과 백엔드 API 구현은 API 계약 초안이 고정된 뒤 병렬 진행 가능함 -- `business_components` 변경은 `sn` 화면 요구사항을 만족하는 최소 범위로 제한함 -- `@common/components`, `@common/network`, `@common/auth`, `@common/config` 문제가 원인으로 보여도 직접 수정하지 않고 이슈로 기록함 -- 같은 파일은 한 역할만 수정함 - -## 검증 보고 기준 -- FE는 빌드 명령, 화면 URL, 사용자 조작, 기대 결과, 네트워크 응답 확인 기준을 남김 -- BE는 API 요청/응답 예시와 DB 영향 여부를 남김 -- QA는 실행한 명령, 통과/실패 여부, 재현 절차, 남은 위험을 남김 diff --git a/apps/sn/docs/AI코딩하네스/기준문서/008-문서구조기준.md b/apps/sn/docs/AI코딩하네스/기준문서/008-문서구조기준.md deleted file mode 100644 index 88c7dede9..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/008-문서구조기준.md +++ /dev/null @@ -1,160 +0,0 @@ -# 프론트 AI 문서 구조 기준 - -## 1. 목적 - -이 문서는 `sn` 프론트엔드 작업에서 AI와 개발자가 같은 기준으로 문서를 읽고 작성하기 위한 문서 구조 기준이다. - -프론트 문서는 단순 기록이 아니라, 화면 구현 전에 요구사항, 컴포넌트, API 사용, 상태 흐름, 브라우저 검증 기준을 빠르게 파악하기 위한 작업 입력이다. - -## 2. 적용 범위 - -| 구분 | 기준 경로 | 역할 | -| --- | --- | --- | -| 프론트 앱 기준 | `SN_APP_ROOT/AGENTS.md` | `sn` 작업 규칙과 수정 가능 범위 | -| AI 기준문서 | `SN_APP_ROOT/docs/AI코딩하네스/기준문서/` | 앱 작업 정책 | -| 작업계획 | `SN_APP_ROOT/docs/AI코딩하네스/작업계획/` | 화면/기능별 작업카드 | -| 검증 | `SN_APP_ROOT/docs/AI코딩하네스/검증/` | 브라우저/빌드/네트워크 검증 기준 | -| 보고 | `SN_APP_ROOT/docs/AI코딩하네스/보고/` | 작업 결과와 이슈 기록 | -| 기능 문서 | `SN_APP_ROOT/docs/{기능명}/` | 화면별 구현 산출물 | -| 프론트 공통 문서 | `FE_REPO_ROOT/docs/` | 여러 앱이 공유하는 FE 기준 | - -## 3. 기준문서 구조 - -경로: - -```text -SN_APP_ROOT/docs/AI코딩하네스/기준문서/ -``` - -현재 기준: - -```text -001-프로젝트.md -002-화면맵.md -003-API사용.md -004-컴포넌트정책.md -005-상태관리정책.md -006-검증정책.md -007-멀티에이전트운영.md -008-문서구조기준.md -009-AI개발작업흐름.md -``` - -역할: - -- `sn` 앱의 작업 대상과 금지 경로 확인 -- 화면/라우트 구조 확인 -- API 호출 방식 확인 -- 기존 컴포넌트 재사용 기준 확인 -- 상태관리 기준 확인 -- 검증 기준 확인 -- BE/FE 역할 분리 기준 확인 - -## 4. 기능 문서 구조 - -기능별 문서는 아래 위치에 둔다. - -```text -SN_APP_ROOT/docs/{기능명}/ -``` - -권장 구조: - -```text -README.md -00-범위.md -01-기존화면기반-컴포넌트분해.md -02-컴포넌트별-작업목록.md -03-API응답필드매핑표.md -04-화면흐름.md -05-검증계획.md -06-검증결과.md -99-미확인사항.md -``` - -문서별 역할: - -| 문서 | 역할 | -| --- | --- | -| `README.md` | 기능 문서 진입점 | -| `00-범위.md` | 구현 대상과 제외 범위 | -| `01-기존화면기반-컴포넌트분해.md` | 기존 화면/컴포넌트 재사용 후보 | -| `02-컴포넌트별-작업목록.md` | 컴포넌트 단위 작업 목록 | -| `03-API응답필드매핑표.md` | 화면에서 사용하는 API와 응답 필드 | -| `04-화면흐름.md` | 사용자 동작과 화면 상태 흐름 | -| `05-검증계획.md` | 브라우저/네트워크/빌드 검증 계획 | -| `06-검증결과.md` | 실제 검증 결과 | -| `99-미확인사항.md` | BE/FE/API/DB 미확정 이슈 | - -## 5. 프론트 공통 문서와 `sn` 문서 구분 - -`SN_APP_ROOT/docs/**`는 `sn` 앱 특정 화면과 기능을 다룬다. - -`FE_REPO_ROOT/docs/**`는 여러 앱이 함께 보는 공통 기준만 다룬다. - -| 상황 | 문서 위치 | -| --- | --- | -| `sn` 특정 화면 구현 | `SN_APP_ROOT/docs/{기능명}/` | -| `sn` API 필드 매핑 | `SN_APP_ROOT/docs/{기능명}/03-API응답필드매핑표.md` | -| `sn` 검증 결과 | `SN_APP_ROOT/docs/{기능명}/06-검증결과.md` | -| 여러 앱 공통 상태관리 기준 | `FE_REPO_ROOT/docs/구조/` | -| 여러 앱 공통 응답 처리 기준 | `FE_REPO_ROOT/docs/응답표준화/` | - -## 6. 백엔드 문서와 연결 기준 - -프론트 기능이 백엔드 계약에 의존하면 아래 문서를 함께 본다. - -```text -BE_SERVICE_ROOT/docs/AI코딩하네스/작업계획/{작업카드}.md -BE_SERVICE_ROOT/docs/AI코딩하네스/DB/{DB문서}.md -BE_SERVICE_ROOT/docs/실행명세/** -``` - -연결 방식: - -| 프론트 문서 | 연결되는 백엔드 문서 | -| --- | --- | -| API 응답 필드 매핑표 | BE 작업카드, API 정책 | -| 화면흐름 | BE API 처리 흐름 | -| 미확인사항 | BE 작업계획, DB 문서 | -| 검증계획 | QA 카드, BE 테스트/실행명세 | - -## 7. 작성 원칙 - -1. 화면 구현 전에 기능 문서를 먼저 확인한다. -2. 기존 컴포넌트 재사용 가능성을 먼저 기록한다. -3. API 응답 필드는 화면 표시명과 실제 필드명을 함께 적는다. -4. 미확정 API/DB 이슈는 `99-미확인사항.md`에 남긴다. -5. 검증 결과는 실제 브라우저 동작 기준으로 남긴다. -6. 정적 HTML은 참고 자료이고 실제 구현은 `apps/sn` 코드와 기존 컴포넌트 조합으로 한다. -7. 공통 패키지 수정이 필요하면 영향 범위를 먼저 정리한다. - -## 8. 적용 예시: 노후관로관리 - -노후관로관리 문서는 아래 역할로 사용한다. - -```text -SN_APP_ROOT/app/html/06. 노후관로관리_시나리오_v1.0.md -→ 화면 요구사항과 사용자 동작 확인 - -SN_APP_ROOT/docs/노후관로관리/03-API응답필드매핑표.md -→ 목록/상세/위치 이동에 필요한 API 필드 확인 - -SN_APP_ROOT/docs/노후관로관리/99-미확인사항.md -→ 백엔드 확인 이슈 관리 - -BE_SERVICE_ROOT/docs/AI코딩하네스/DB/001-노후관로-레이어설정.md -→ 레이어 트리 DB 기준 데이터 반영안 확인 -``` - -## 9. 유지보수 기준 - -아래 상황에서는 문서를 갱신한다. - -- 화면 흐름 변경 -- API endpoint 또는 응답 필드 변경 -- 컴포넌트 구조 변경 -- 상태관리 방식 변경 -- 브라우저 검증 결과 확정 -- 미확인사항 해결 -- 백엔드 계약 변경 diff --git a/apps/sn/docs/AI코딩하네스/기준문서/009-AI개발작업흐름.md b/apps/sn/docs/AI코딩하네스/기준문서/009-AI개발작업흐름.md deleted file mode 100644 index 91d079074..000000000 --- a/apps/sn/docs/AI코딩하네스/기준문서/009-AI개발작업흐름.md +++ /dev/null @@ -1,244 +0,0 @@ -# 프론트 AI 개발 작업 흐름 - -## 1. 목적 - -이 문서는 `sn` 프론트엔드 기능 개발을 AI와 함께 진행할 때 따르는 표준 작업 흐름이다. - -기능마다 화면과 API는 달라질 수 있지만, 작업 기준 확인, 기존 화면/컴포넌트 확인, API 계약 확인, 최소 구현, 브라우저 검증, 결과 기록의 큰 흐름은 유지한다. - -## 2. 기본 원칙 - -1. `AGENTS.md`와 `sn` 기준문서를 먼저 확인한다. -2. 기존 화면과 컴포넌트를 먼저 찾는다. -3. `apps/sn` 내부 해결을 우선한다. -4. 공통 패키지는 `business_components`만 허용 범위에서 수정한다. -5. `@common/components`, `@common/network`, `@common/auth` 등 금지 범위는 직접 수정하지 않는다. -6. 백엔드 응답을 임의로 가정하지 않고 API 문서와 실제 응답을 확인한다. -7. 구현 후 브라우저 동작과 네트워크 응답을 확인한다. - -## 3. 표준 작업 흐름 - -```text -1. 작업 기준 확인 -2. 기능 문서 확인 -3. 기존 화면/컴포넌트 탐색 -4. API 사용부와 응답 필드 확인 -5. 상태관리와 화면 흐름 확인 -6. 구현 방향 결정 -7. 최소 범위 구현 -8. 빌드/브라우저/네트워크 검증 -9. 검증 결과와 남은 리스크 기록 -``` - -## 4. 단계별 기준 - -### 4.1 작업 기준 확인 - -먼저 아래 문서를 확인한다. - -```text -WORKSPACE_ROOT/AGENTS.md -SN_APP_ROOT/AGENTS.md -BE_SERVICE_ROOT/AGENTS.md -``` - -확인할 내용: - -- 수정 가능한 경로 -- `apps/sn` 내부 해결 가능 여부 -- `business_components` 수정 가능 여부 -- 공통 패키지 수정 금지 범위 -- 백엔드 연동 영향 여부 - -### 4.2 기능 문서 확인 - -확인 대상: - -```text -SN_APP_ROOT/docs/{기능명}/00-범위.md -SN_APP_ROOT/docs/{기능명}/03-API응답필드매핑표.md -SN_APP_ROOT/docs/{기능명}/04-화면흐름.md -SN_APP_ROOT/docs/{기능명}/99-미확인사항.md -``` - -확인할 내용: - -- 화면 목적 -- 사용자 동작 흐름 -- 호출 API -- 필요한 응답 필드 -- 미확정 백엔드 계약 -- 검증해야 할 브라우저 동작 - -### 4.3 기존 화면/컴포넌트 탐색 - -새 UI를 만들기 전에 기존 구현을 찾는다. - -우선순위: - -```text -1. SN_APP_ROOT/app/** -2. SN_APP_ROOT/src/** -3. BUSINESS_COMPONENTS_ROOT/src/** -``` - -확인할 내용: - -- 유사 화면 -- 기존 테이블/모달/검색/상세 패널 -- 지도 레이어/트리/팝업 패턴 -- 기존 상태관리 store -- 기존 API 유틸 - -### 4.4 API 사용부와 응답 필드 확인 - -확인할 내용: - -- API 호출 함수 -- 요청 파라미터 -- 응답 wrapper 구조 -- 화면 표시 필드 -- 코드값 매핑 -- 오류 처리 - -백엔드와 계약이 불명확하면 `99-미확인사항.md`에 기록하고 BE 작업카드와 연결한다. - -### 4.5 상태관리와 화면 흐름 확인 - -확인할 내용: - -- local state로 충분한가 -- 기존 Zustand store를 써야 하는가 -- URL/query state가 필요한가 -- 모달/패널/지도 선택 상태가 어떻게 연결되는가 -- API 재조회 시점은 언제인가 - -### 4.6 구현 방향 결정 - -가능한 방향: - -```text -1. 기존 화면/컴포넌트 조합만으로 구현 -2. apps/sn 내부 컴포넌트 추가 -3. business_components 최소 보강 -4. 백엔드 API 계약 확인 요청 -5. 백엔드 변경 필요 사항 정리 -``` - -기본 방침: - -```text -기존 컴포넌트로 가능하면 재사용한다. -apps/sn 내부 해결을 우선한다. -공통 패키지 수정은 마지막에 판단한다. -백엔드 응답 구조를 프론트에서 임의로 바꾸지 않는다. -``` - -### 4.7 최소 범위 구현 - -구현 원칙: - -- 기존 디자인과 컴포넌트 패턴을 따른다. -- 신규 스타일은 최소화한다. -- 화면 전체 구조를 불필요하게 바꾸지 않는다. -- 텍스트/버튼/테이블이 모바일과 데스크톱에서 넘치지 않게 한다. -- 지도 화면은 전체 페이지 스크롤보다 내부 패널 스크롤을 우선한다. -- API 변환 로직은 한 곳에 모은다. - -### 4.8 빌드/브라우저/네트워크 검증 - -수정 범위에 따라 검증한다. - -`apps/sn`만 수정한 경우: - -```powershell -pnpm --filter sn run build -pnpm turbo run build --filter=sn -``` - -`business_components` 수정 시: - -```powershell -pnpm --filter @common/business_components run build -pnpm --filter sn run build -``` - -브라우저 검증: - -- 화면 진입 -- 검색/조회 -- 모달/패널 열림 -- 테이블 표시 -- 지도 레이어 표시 -- 네트워크 요청/응답 -- 오류 처리 -- 스크롤/레이아웃 깨짐 여부 - -### 4.9 결과 기록 - -작업 후 아래 항목을 기록한다. - -- 작업 목적 -- 수정 대상 파일 -- 변경 내용 요약 -- 영향 범위 -- 검증 방법 -- 롤백 방법 -- 남은 리스크 - -기능 문서가 있다면 `06-검증결과.md` 또는 `99-미확인사항.md`를 갱신한다. - -## 5. BE/FE 연동 작업 흐름 - -프론트가 백엔드 계약에 의존하는 경우 아래 순서로 진행한다. - -```text -1. FE 화면흐름 확인 -2. FE API 응답 필드 매핑표 확인 -3. FE 미확인사항 확인 -4. BE 작업카드/API/DB 문서 확인 -5. 실제 API 응답 확인 -6. 프론트 구현 -7. 브라우저와 네트워크 응답 검증 -8. 미확인사항 해결 여부 갱신 -``` - -## 6. 적용 예시: 노후관로관리 - -노후관로관리 작업에서는 이 흐름을 아래처럼 적용했다. - -```text -시나리오 문서 확인 -→ API 응답 필드 매핑표 확인 -→ 미확인사항 확인 -→ 기존 GIS/레이어 트리 패턴 확인 -→ 기존 /api/v1/fclts 재사용 결정 -→ 노후관로 가상 노드 fallback 구현 -→ DB 정식 노드 반영 후 중복 방지 -→ 목록/지도 강조선/상세 패널 검증 -``` - -프론트 최종 방향: - -```text -노후관로 목록: 기존 v1/fclts 재사용 -노후관로 트리 노드: DB 노드 우선, 없으면 프론트 fallback -노후관로 강조선: tb_ms_swage_ppl WFS 조건 레이어 추가 -상세 패널: 기존 하수관로 상세 패널 재사용 -``` - -## 7. 고정할 큰 틀 - -기능이 달라져도 아래 흐름은 유지한다. - -```text -문서 확인 -→ 기존 화면/컴포넌트 확인 -→ API 계약 확인 -→ 재사용 가능 여부 판단 -→ 최소 구현 -→ 브라우저 검증 -→ 결과 기록 -``` - -세부 구현은 상황에 맞게 조정하되, 기존 화면 패턴 재사용과 실제 브라우저 검증은 항상 유지한다. diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/개선사항.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-16/개선사항.md deleted file mode 100644 index bbf213bbb..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/개선사항.md +++ /dev/null @@ -1,5 +0,0 @@ -# 2026-04-16 개선 기록 - -## 반복 개선점 -- 추정: 기능별 작업이 누적되면 `작업목록.md`에 화면, API, 검증 상태 컬럼을 추가해 진행률을 더 쉽게 볼 수 있다. -- 추정: 브라우저 테스트 절차가 반복되면 `기준문서/007-브라우저점검목록.md`를 추가해 공통 체크리스트로 분리할 수 있다. diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/결과보고.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-16/결과보고.md deleted file mode 100644 index a325e1585..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/결과보고.md +++ /dev/null @@ -1,51 +0,0 @@ -# 2026-04-16 작업 보고 - -## SN-P2-HARNESS-001 - -### 작업 목적 -- 확인됨: `sn` 2차사업 작업을 기능 단위 작업카드와 일자별 기록으로 관리하기 위한 경량 하네스 문서 구조를 만든다. 근거: `apps/sn/AGENTS.md` - -### 수정 파일 목록 -- 확인됨: `apps/sn/docs/AI코딩하네스/개요.md` -- 확인됨: `apps/sn/docs/AI코딩하네스/작업목록.md` -- 확인됨: `apps/sn/docs/AI코딩하네스/기준문서/*` -- 확인됨: `apps/sn/docs/AI코딩하네스/작업계획/*` -- 확인됨: `apps/sn/docs/AI코딩하네스/보고/*` - -### 변경 요약 -- 확인됨: 프로젝트 기준, 화면 기준, API 연동 기준, 컴포넌트 기준, 상태관리 기준, 검증 기준 문서를 추가했다. -- 확인됨: 기능별 작업카드 템플릿과 일자별 기록 파일을 추가했다. - -### 영향 범위 -- 확인됨: 문서만 추가했으므로 런타임 동작에는 영향이 없다. -- 확인됨: `apps/sn` 하위 문서만 추가했으며 `packages/common/business_components`는 변경하지 않았다. - -### 검증 방법 -- 확인됨: 문서 파일 생성 여부를 확인한다. -- 확인됨: 코드 변경이 없으므로 빌드 검증은 수행하지 않아도 된다. - -### 롤백 방법 -- 확인됨: `apps/sn/docs/AI코딩하네스` 하위에서 이번에 추가한 문서 파일을 제거하면 된다. - -### 남은 리스크 -- 확인 필요: 2차사업 기능별 실제 작업카드는 요구사항과 화면설계서 기준으로 별도 작성해야 한다. -- 확인 필요: 브라우저 검증 URL과 테스트 계정은 실행 환경 기준으로 확정해야 한다. - -## SN-DOC-KO-001 - -### 작업 목적 -- 확인됨: 프론트엔드 문서 폴더와 Markdown 파일명을 한글 기준으로 정리하고 팀 공유를 위해 Git 추적 대상에 포함한다. - -### 변경 요약 -- 확인됨: 루트 `docs`의 기존 문서 파일명을 한글명으로 변경했다. -- 확인됨: `docs/bbs`는 `docs/게시판`, `docs/dockerbuild`는 `docs/도커빌드`로 변경했다. -- 확인됨: `apps/sn/docs/phase2`는 `apps/sn/docs/AI코딩하네스`로 변경했다. -- 확인됨: 문서 전용 파일명은 한글로 변경하되, `docs/도커빌드/Dockerfile`, `front_docker_build.sh`, `next.config.ts`는 실행 의미가 있어 파일명을 유지했다. - -### 영향 범위 -- 확인됨: 문서 경로와 문서 내부 참조만 변경했다. -- 확인됨: 프론트 런타임, 빌드 설정, API 계약에는 영향이 없다. - -### 검증 방법 -- 확인됨: 문서 파일 경로를 조회해 한글 경로로 이동된 것을 확인한다. -- 확인됨: `git status --short`에서 문서 파일이 추적 대상 상태로 표시되는지 확인한다. diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/이슈.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-16/이슈.md deleted file mode 100644 index 25f52e360..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/이슈.md +++ /dev/null @@ -1,8 +0,0 @@ -# 2026-04-16 이슈 - -## 외부 범위 이슈 -- 확인 필요: 현재 등록된 외부 범위 이슈는 없다. - -## 미확정 항목 -- 확인 필요: 2차사업 최종 화면명, 메뉴명, URL은 화면설계서와 실행 환경 기준으로 확정해야 한다. -- 확인 필요: 기능별 테스트 계정, 권한, 데이터는 환경별로 별도 확인해야 한다. diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/작업목록.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-16/작업목록.md deleted file mode 100644 index c8c90bac6..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/작업목록.md +++ /dev/null @@ -1,10 +0,0 @@ -# 2026-04-16 작업 항목 - -| ID | 상태 | 작업명 | 범위 | 결과 | -| --- | --- | --- | --- | --- | -| SN-P2-HARNESS-001 | 완료 | `sn` 2차사업 경량 하네스 문서 구조 생성 | `apps/sn/docs/AI코딩하네스` | 문서 골격 생성 | -| SN-DOC-KO-001 | 완료 | 프론트 문서 폴더/파일명 한글화 | `docs`, `apps/sn/docs` | 문서 경로 한글화 및 Git 추적 확인 | - -## 확인 사항 -- 확인됨: 프론트엔드 하네스 문서는 `apps/sn/docs/AI코딩하네스` 하위에 생성했다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 소스 코드, API 계약, DB 스키마는 변경하지 않았다. 근거: 작업 변경 범위 diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/제안.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-16/제안.md deleted file mode 100644 index be6ea5853..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-16/제안.md +++ /dev/null @@ -1,5 +0,0 @@ -# 2026-04-16 제안 - -## 후속 제안 -- 추정: 기능 개발 착수 전 `작업계획/SN-P2-001-*.md` 형식으로 작업카드를 먼저 작성하면 백엔드와 프론트엔드 변경 범위를 분리해서 추적하기 쉽다. -- 추정: 백엔드 API 변경이 동반되는 작업은 백엔드 작업카드 ID와 프론트 작업카드 ID를 서로 참조하는 방식이 좋다. diff --git a/apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md b/apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md deleted file mode 100644 index 05b870571..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md +++ /dev/null @@ -1,45 +0,0 @@ -# 2026-04-17 결과보고 - -## 작업 목적 -- `sn` 2차사업 고도화 작업을 멀티에이전트로 진행하기 전에 프론트 문서 기준과 공통 비즈니스 컴포넌트 문서의 오해 요소를 정리한다. - -## 수정 대상 파일 -- `apps/sn/docs/AI코딩하네스/기준문서/001-프로젝트.md` -- `apps/sn/docs/AI코딩하네스/기준문서/003-API사용.md` -- `apps/sn/docs/AI코딩하네스/기준문서/007-멀티에이전트운영.md` -- `apps/sn/docs/AI코딩하네스/개요.md` -- `apps/sn/docs/AI코딩하네스/작업목록.md` -- `apps/sn/docs/AI코딩하네스/작업계획/000-작업카드-템플릿.md` -- `apps/sn/docs/AI코딩하네스/한글경로-영향.md` -- `apps/sn/app/html/AGENTS.md` -- `packages/common/business_components/README.md` -- `packages/common/business_components/src/form.md` -- `packages/common/business_components/src/chart.md` -- `packages/common/business_components/src/ui/search_form_left/searchFormLeft.md` -- `apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md` - -## 변경 내용 요약 -- 폐기된 `phase2` 문서 경로를 `apps/sn/docs/AI코딩하네스/작업계획/` 및 `apps/sn/docs/` 하위 주제별 폴더 기준으로 수정했다. -- 백엔드 응답표준화 문서 참조를 실제 한글 경로로 수정했다. -- 프론트 작업카드 템플릿에 쓰기 허용/금지 범위, 충돌 주의 파일, BE/FE/QA 산출물 항목을 추가했다. -- 프론트 기준문서에 `sn` 작업용 멀티에이전트 운영 기준을 추가하고, 하네스 개요와 작업목록에 연결했다. -- 한글 경로 영향 문서가 과거 기록임을 명시하고, 루트 `docs/**`를 승인 없이 수정하지 않는 기준을 덧붙였다. -- `business_components` 문서의 오타, 잘못된 form 설명, 깨진 chart 예시, `fo` 기준 예시의 적용 주의 문구를 보완했다. - -## 영향 범위 -- 코드, API, DB 스키마 영향은 없다. -- `sn` 작업자가 문서 기준을 따라 작업할 때 수정 가능 범위와 작업카드 작성 기준이 더 명확해진다. -- `business_components` 문서 예시를 참고할 때 타 앱 기준을 `sn`에 그대로 적용하는 위험이 줄어든다. -- 백엔드 API/DB 영향이 있는 화면 작업에서 BE/FE/QA 합류 조건을 더 빨리 판단할 수 있다. - -## 테스트 / 검증 방법 -- Markdown 문서의 주요 참조 경로와 문구를 수동 확인했다. -- 빌드 또는 테스트는 코드 변경이 아니므로 수행하지 않았다. - -## 롤백 방법 -- 각 Markdown 파일을 이전 문구로 되돌린다. -- `apps/sn/docs/AI코딩하네스/보고/2026-04-17/결과보고.md`를 삭제한다. - -## 남은 리스크 -- `business_components`의 실제 컴포넌트 API와 문서 예시 전체가 완전히 일치하는지는 별도 코드 기준 검증이 필요하다. -- 로그인, 권한, 테스트 데이터가 확정되지 않은 기능은 브라우저 검증 항목을 작업카드에서 다시 확정해야 한다. diff --git a/apps/sn/docs/AI코딩하네스/보고/개요.md b/apps/sn/docs/AI코딩하네스/보고/개요.md deleted file mode 100644 index 599676d4a..000000000 --- a/apps/sn/docs/AI코딩하네스/보고/개요.md +++ /dev/null @@ -1,16 +0,0 @@ -# 작업 기록 - -## 목적 -이 디렉터리는 `sn` 2차사업 작업의 일자별 진행 기록을 남긴다. - -## 파일 구성 -- `작업목록.md`: 해당 일자의 작업 항목과 상태 -- `결과보고.md`: 수행 결과와 검증 결과 -- `이슈.md`: 외부 범위, 미확정, 차단 이슈 -- `제안.md`: 후속 제안 -- `개선사항.md`: 반복 작업 개선점 - -## 기록 원칙 -- 확인됨: 작업 결과는 변경 파일, 영향 범위, 검증 방법, 롤백 방법을 포함한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 권한 밖 경로 문제는 직접 수정하지 않고 이슈로 기록한다. 근거: `apps/sn/AGENTS.md` -- 추정: 백엔드와 함께 진행하는 기능은 백엔드 작업 기록과 프론트 작업 기록을 서로 참조하면 회귀 추적에 유리하다. 근거: 백엔드 `docs/AI코딩하네스` 구조 diff --git a/apps/sn/docs/AI코딩하네스/작업계획/000-작업카드-템플릿.md b/apps/sn/docs/AI코딩하네스/작업계획/000-작업카드-템플릿.md deleted file mode 100644 index 6e0417aa3..000000000 --- a/apps/sn/docs/AI코딩하네스/작업계획/000-작업카드-템플릿.md +++ /dev/null @@ -1,74 +0,0 @@ -# SN-P2-000 작업카드 템플릿 - -## 1. 작업 개요 -- 작업 ID: -- 작업명: -- 상태: 대기 -- 작성일: -- 담당 역할: FE -- 관련 역할: BE, QA -- 담당 범위: -- 근거 문서: - -## 2. 작업 목적 -- 확인 필요: - -## 3. 수정 대상 파일 -| 구분 | 파일 경로 | 수정 여부 | 근거 | -| --- | --- | --- | --- | -| 화면 | 확인 필요 | 확인 필요 | 확인 필요 | -| 컴포넌트 | 확인 필요 | 확인 필요 | 확인 필요 | -| API 호출 | 확인 필요 | 확인 필요 | 확인 필요 | -| 공통 비즈니스 컴포넌트 | 확인 필요 | 확인 필요 | 확인 필요 | - -## 3-1. 쓰기 범위와 충돌 주의 -| 구분 | 경로 | 담당 역할 | 처리 기준 | -| --- | --- | --- | --- | -| 쓰기 허용 | `apps/sn/**` | FE | `sn` 화면/상태/API 호출 작업 | -| 쓰기 허용 | `packages/common/business_components/**` | FE | `sn` 요구사항에 필요한 최소 공통 컴포넌트 작업 | -| 쓰기 금지 | `packages/common/business_components` 외 공통 패키지 | FE | 문제 원인과 영향 범위만 기록 | -| 쓰기 금지 | 타 앱 `apps/*` | FE | 문제 원인과 영향 범위만 기록 | - -- 충돌 주의 파일: -- 인수인계 메모: - -## 4. 화면 흐름 -- 확인 필요: 진입 경로 -- 확인 필요: 사용자 조작 -- 확인 필요: 정상 흐름 -- 확인 필요: 빈 결과 흐름 -- 확인 필요: 오류 흐름 - -## 5. API 연동 -| 기능 | Method | URL | 요청 | 응답 | 확인 상태 | -| --- | --- | --- | --- | --- | --- | -| 확인 필요 | 확인 필요 | 확인 필요 | 확인 필요 | 확인 필요 | 확인 필요 | - -## 6. 영향 범위 -- 확인 필요: `apps/sn` 화면 영향 -- 확인 필요: `business_components` 영향 -- 확인 필요: 백엔드 API 영향 -- 확인 필요: 다른 앱 영향 가능성 - -## 6-1. 멀티에이전트 작업 분리 -- FE 담당 산출물: -- BE 담당 산출물: -- QA 담당 산출물: -- 병렬 진행 가능 항목: -- 순차 진행 필요 항목: - -## 7. 검증 방법 -- 확인 필요: 빌드 명령 -- 확인 필요: 브라우저 URL -- 확인 필요: 사용자 조작 -- 확인 필요: 기대 결과 -- 확인 필요: 네트워크 응답 확인 기준 - -## 8. 롤백 방법 -- 확인 필요: - -## 9. 예상 위험 -- 확인 필요: - -## 10. 완료 기준 -- 확인 필요: diff --git a/apps/sn/docs/AI코딩하네스/작업계획/001-SN-P2-노후관로관리-작업카드.md b/apps/sn/docs/AI코딩하네스/작업계획/001-SN-P2-노후관로관리-작업카드.md deleted file mode 100644 index 5b6bb4ce1..000000000 --- a/apps/sn/docs/AI코딩하네스/작업계획/001-SN-P2-노후관로관리-작업카드.md +++ /dev/null @@ -1,55 +0,0 @@ -# SN-P2-001 노후관로관리 작업카드 샘플 - -## 1. 작업 개요 -- 작업 ID: `SN-P2-001` -- 작업명: 노후관로관리 화면 조회/증적 기준 정리 -- 상태: 샘플 작성 -- 담당 역할: FE -- 관련 역할: BE, QA -- 대상 범위: `apps/sn/**` -- 근거 문서: - - `apps/sn/app/html/06. 노후관로관리_시나리오_v1.0.md` - - `D:/workspace/IIPBS/sewerage-service/docs/실행명세/기능/21-dcrp-ppl-관리.md` - - `D:/workspace/IIPBS/sewerage-service/docs/실행명세/기능/60-관로통계.md` - -## 2. 작업 목적 -- 노후관로정비사업 화면의 조회 조건과 백엔드 `GET /api/v1/dcrpPpl` 계약을 카드에 고정한다. -- GIS 노후관로관리 시나리오가 본 화면으로 확장될 때 필요한 API/브라우저 증적 항목을 미리 둔다. - -## 3. 수정 대상 파일 -| 구분 | 파일 경로 | 수정 여부 | 근거 | -| --- | --- | --- | --- | -| 화면 | `apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx` | 필요 시 최소 수정 | 노후관로정비사업 조회 화면 | -| 테이블 | `apps/sn/app/(with-base-layout)/oper/oldPp/tableModal.tsx` | 필요 시 최소 수정 | 행 선택 후 표 모달 | -| API 호출 | `apps/sn/app/components/lib/common/apiHelpers.ts` | 원칙상 변경 없음 | 기존 `searchData` 사용 | -| 공통 컴포넌트 | `packages/common/business_components/**` | 변경 없음 | 이번 카드에서는 직접 수정 금지 | - -## 4. 화면 흐름 -- 진입: `노후관로정비사업` 화면 또는 라우트 `/oper/oldPp` -- 기본 조회: 등록기간 기본값으로 `GET /api/v1/dcrpPpl` 호출 -- 검색 조건: 등록기간, 등록자 입력값, 파일명/사업명 입력값 -- 결과: 목록 테이블, 총 건수, 페이지 이동 -- 행 선택: 첨부 파일명과 식별자를 상태에 보관하고 표 모달을 연다. -- 파일 작업: 다운로드/삭제/등록은 외부 첨부 서비스와 데이터 변경이 있으므로 QA 승인 데이터가 필요하다. - -## 5. API 연동 -| 기능 | Method | URL | 요청 | 응답 | 확인 상태 | -| --- | --- | --- | --- | --- | --- | -| 목록 조회 | GET | `/sewerage-service/api/v1/dcrpPpl` | `fromRegDt`, `toRegDt`, `dcrpPplMtncBizNm`, `auth`, `page`, `size` | Page 구조 | 확인됨 | -| 등록 | POST | `/sewerage-service/api/v1/dcrpPpl` | `mngYr`, `mngQu`, `atflCd`, `atflId`, `rgtr`, `dcrpPplMtncBizNm` | 단건 DTO | 미검증 | -| 삭제 | DELETE | `/sewerage-service/api/v1/dcrpPpl/{dcrpPplMtncBizSn}` | path id | 200 empty | 미검증 | -| 파일 다운로드 | GET | `/attach-service/api/v1/download/{atflId}` | path id | 파일 | 미검증 | - -## 6. 검증 방법 -- 빌드: `pnpm --filter sn run build` -- 브라우저: `/oper/oldPp` 진입 후 조회 버튼, 페이지 이동, 행 선택, 모달 확인 -- 네트워크: `GET /sewerage-service/api/v1/dcrpPpl` 요청 URL, Query String, Status, Response JSON 기록 -- 상세 양식: `apps/sn/docs/AI코딩하네스/검증/001-노후관로관리-브라우저-네트워크-증적.md` - -## 7. 롤백 방법 -- 이번 카드에서 화면 코드가 변경되지 않았다면 문서만 제거한다. -- 화면 코드 변경이 발생한 경우 `oldPp/page.tsx`와 관련 모달 변경분을 되돌리고 빌드를 재실행한다. - -## 8. 예상 위험 -- `auth` 전달 방식과 사용자명 보강은 인증/권한 상태에 따라 결과가 달라질 수 있다. -- 등록/삭제/다운로드는 데이터 변경과 첨부 서비스 의존이 있어 수동 검증 전 테스트 데이터가 필요하다. diff --git a/apps/sn/docs/AI코딩하네스/작업계획/개요.md b/apps/sn/docs/AI코딩하네스/작업계획/개요.md deleted file mode 100644 index c9900ae47..000000000 --- a/apps/sn/docs/AI코딩하네스/작업계획/개요.md +++ /dev/null @@ -1,17 +0,0 @@ -# 작업카드 관리 - -## 목적 -이 디렉터리는 `sn` 2차사업 기능별 실행 계획을 보관한다. - -작업카드는 구현 전에 작성하며, 수정 범위, API 영향, 화면 영향, 검증 방법, 롤백 방법을 먼저 고정한다. - -## 작성 규칙 -- 확인됨: 기능 단위로 문서를 만든다. 근거: 이 하네스 운영 문서 -- 확인됨: 직접 수정 대상은 `apps/sn/**`와 `packages/common/business_components/**`로 제한한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 권한 밖 수정 필요성은 작업카드에 직접 구현 항목으로 넣지 않고 외부 이슈로 기록한다. 근거: `apps/sn/AGENTS.md` -- 추정: 백엔드 동시 변경이 필요한 기능은 백엔드 `docs/AI코딩하네스/작업계획` 작업카드 번호를 함께 적는 것이 추적에 유리하다. 근거: 백엔드 `docs/AI코딩하네스` 구조 - -## 파일명 규칙 -- 권장 형식: `SN-P2-001-기능명.md` -- 기능명은 화면명 또는 업무명을 기준으로 작성한다. -- 한 작업카드에 여러 화면을 무리하게 묶지 않는다. diff --git a/apps/sn/docs/AI코딩하네스/작업목록.md b/apps/sn/docs/AI코딩하네스/작업목록.md deleted file mode 100644 index 133371799..000000000 --- a/apps/sn/docs/AI코딩하네스/작업목록.md +++ /dev/null @@ -1,19 +0,0 @@ -# sn 2차사업 작업 목록 - -## 상태 값 -- `대기`: 아직 착수하지 않은 작업 -- `진행`: 현재 분석 또는 구현 중인 작업 -- `검증`: 구현 후 빌드, 브라우저, API 응답을 확인하는 작업 -- `완료`: 검증과 기록이 끝난 작업 -- `보류`: 외부 범위 또는 추가 확인이 필요한 작업 - -## 작업 목록 -| ID | 상태 | 작업명 | 범위 | 근거 | 비고 | -| --- | --- | --- | --- | --- | --- | -| SN-P2-000 | 대기 | 2차사업 기능 작업카드 등록 | `apps/sn/docs/AI코딩하네스/작업계획` | 확인됨: `apps/sn/AGENTS.md` | 기능별 작업 착수 전 작성 | -| SN-P2-HARNESS-002 | 완료 | AI_SAM 최신 하네스 구조 재확인 및 멀티에이전트 운영 기준 반영 | `apps/sn/docs/AI코딩하네스/기준문서` | 확인됨: AI_SAM `refactoring` 최신 HEAD | BE/FE/QA 합류 기준 추가 | - -## 운영 규칙 -- 확인됨: 작업은 `apps/sn/**`와 `packages/common/business_components/**` 범위 안에서만 직접 수정한다. 근거: `apps/sn/AGENTS.md` -- 확인됨: 다른 앱 또는 공통 패키지 문제가 발견되면 이 파일에 직접 작업으로 넣지 않고 `보고/YYYY-MM-DD/이슈.md`에 기록한다. 근거: `apps/sn/AGENTS.md` -- 추정: 실제 기능 작업은 2차사업 요구사항, 화면설계서, 백엔드 API 응답 근거를 함께 연결해야 한다. 근거: `apps/sn/AGENTS.md` diff --git a/apps/sn/docs/AI코딩하네스/한글경로-영향.md b/apps/sn/docs/AI코딩하네스/한글경로-영향.md deleted file mode 100644 index f2da3ec0b..000000000 --- a/apps/sn/docs/AI코딩하네스/한글경로-영향.md +++ /dev/null @@ -1,56 +0,0 @@ -# 한글 폴더 및 Markdown 파일명 영향 검토 - -> 이 문서는 2026-04-16 문서 경로 정리 당시의 영향 검토 기록이다. 이후 `sn` 작업에서 새 문서를 만들 때는 `apps/sn/AGENTS.md` 기준에 따라 `apps/sn/docs/` 하위만 사용하고, 프론트엔드 루트 `docs/**`는 사용자 승인 없이 수정하지 않는다. - -> 이 문서는 2026-04-16 문서 경로 정리 당시의 영향 검토 기록이다. 이후 `sn` 작업에서 새 문서를 만들 때는 `apps/sn/AGENTS.md` 기준에 따라 `apps/sn/docs/` 하위만 사용하고, 프론트엔드 루트 `docs/**`는 사용자 승인 없이 수정하지 않는다. - -## 1. 결론 - -- 프론트엔드 문서 전용 경로는 한글 폴더명과 한글 `.md` 파일명을 사용해도 Codex 작업 이해에는 문제가 없음 -- 현재 변경 범위는 루트 `docs/`와 `apps/sn/docs/` 하위 문서 경로에 한정되므로 프론트 런타임 영향은 없음 -- 빌드, 배포, 앱 라우팅, API 호출 경로는 변경하지 않음 - -## 2. 적용한 한글 경로 - -- `docs/게시판/` -- `docs/도커빌드/` -- `docs/앱라우트.md` -- `docs/인증서비스-리팩토링가이드.md` -- `docs/CS프로젝트구조.md` -- `docs/프론트디버깅.md` -- `docs/개선계획.md` -- `docs/요구사항.md` -- `apps/sn/docs/AI코딩하네스/` -- `apps/sn/docs/AI코딩하네스/기준문서/` -- `apps/sn/docs/AI코딩하네스/작업계획/` -- `apps/sn/docs/AI코딩하네스/보고/` - -## 3. 파일명을 유지한 항목 - -- `docs/도커빌드/Dockerfile` -- `docs/도커빌드/front_docker_build.sh` -- `docs/도커빌드/next.config.ts` -- `docs/IIPBS_단어목록.md` - -## 4. 영향 없음 - -- Next.js 앱 실행 -- Turborepo 빌드 -- pnpm workspace 설정 -- Dockerfile, PM2, Gitea workflow -- API 계약과 백엔드 연동 경로 -- `apps/sn` 화면 라우팅 - -## 5. 주의 필요 - -- 외부 문서 링크가 기존 영문 경로를 직접 참조하는 경우 새 한글 경로로 수정 필요 -- CI 또는 배포 스크립트가 `docs/dockerbuild`를 직접 참조하는 경우 새 `docs/도커빌드` 경로로 수정 필요 -- 일부 콘솔에서는 한글 경로가 이스케이프 문자열로 보일 수 있음 -- URL로 공유되는 Markdown 링크는 한글 경로가 퍼센트 인코딩되어 길게 표시될 수 있음 - -## 6. 운영 기준 - -- 코드, 라우팅, 빌드, 배포 스크립트가 직접 참조하는 파일명은 영문 유지 권장 -- 문서 전용 폴더와 `.md` 파일명은 한글 사용 가능 -- 신규 `sn` 문서는 `apps/sn/docs/` 바로 아래 주제별 한글 폴더로 관리 -- `phase2` 같은 단계 분리 폴더는 사용하지 않음 diff --git a/apps/sn/docs/README.md b/apps/sn/docs/README.md deleted file mode 100644 index f88e3e658..000000000 --- a/apps/sn/docs/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# `sn` 앱 문서 - -## 목적 - -이 디렉터리는 하수관로 운영관리 시스템 `sn` 앱의 화면/기능별 산출물을 관리한다. -프론트엔드 공통 기준은 `FE_REPO_ROOT/docs/**`에 두고, `sn` 특정 화면과 기능 상세는 이 디렉터리에 둔다. - -## 작성 범위 - -- `sn` 화면별 요구사항 해석 -- 기존 화면 기반 컴포넌트 분해 -- 컴포넌트별 작업 목록 -- API 응답 필드 매핑 -- 화면 흐름 -- 검증 계획과 결과 -- 기능별 미확인사항 - -## 작성 금지 범위 - -- 다른 앱 전용 기능 상세 -- 백엔드 내부 구현 상세 -- 공통 프론트엔드 규칙 전체 - -## 기능별 문서 구조 - -기능별 문서는 아래 형식을 권장한다. - -```text -apps/sn/docs/{기능명}/ - README.md - 00-범위.md - 01-기존화면기반-컴포넌트분해.md - 02-컴포넌트별-작업목록.md - 03-API응답필드매핑표.md - 04-화면흐름.md - 05-검증계획.md - 06-검증결과.md - 99-미확인사항.md -``` - diff --git a/apps/sn/docs/노후관로관리/00-범위.md b/apps/sn/docs/노후관로관리/00-범위.md deleted file mode 100644 index 6456beda2..000000000 --- a/apps/sn/docs/노후관로관리/00-범위.md +++ /dev/null @@ -1,32 +0,0 @@ -# 노후관로관리 범위 - -## 목적 - -노후관로관리 및 노후관로분석 화면의 프론트엔드 구현 범위를 정의한다. - -## 포함 범위 - -- 노후관로 레이어 체크/표출 -- 좌측 하단 경과년도 설정 영역 -- 노후관로 목록 모달 -- 목록 행 더블클릭과 지도/상세 연동 -- 관로 상세정보 표시 -- 하수처리구역 기준 매설년도 분석정보 표시 -- 보수이력 진입 버튼 또는 링크 -- 엑셀 다운로드 버튼 연결 - -## 제외 범위 - -- 백엔드 API 신규 구현 -- DB 스키마 변경 -- 백엔드 공통 응답 구조 변경 -- `sn` 외 다른 앱 화면 변경 -- `business_components` 외 공통 패키지 직접 수정 - -## 기준 문서 - -- 기능 요구사항 명세서 v2.0 -- 시나리오 v2.0 -- `01-기존화면기반-컴포넌트분해.md` -- `02-컴포넌트별-작업목록.md` - diff --git a/apps/sn/docs/노후관로관리/01-기존화면기반-컴포넌트분해.md b/apps/sn/docs/노후관로관리/01-기존화면기반-컴포넌트분해.md deleted file mode 100644 index 624534fa9..000000000 --- a/apps/sn/docs/노후관로관리/01-기존화면기반-컴포넌트분해.md +++ /dev/null @@ -1,158 +0,0 @@ -# 노후관로관리 기존 화면 기반 컴포넌트 분해 - -## 목적 - -노후관로관리 2차 고도화 화면은 신규 디자인을 만들지 않고, 1차 개발 화면의 레이아웃과 컴포넌트 톤을 유지한다. -이 문서는 실제 `sn` 화면 코드 기준으로 화면을 어떤 단위로 나누어 개발해야 하는지 정리한다. - -## 기준 화면 구조 - -실제 화면은 아래 계층으로 구성된다. - -```text -NoFooterLayout - Header - LNB - MapLayout children - Gis - GisTree - GisMapToggle - GisToolBar - GisZoomLevel - ProcSearchBar - FeatureClickEventPopup -``` - -## 실제 참조 파일 - -| 구분 | 기준 파일 | 개발 기준 | -|---|---|---| -| 전체 레이아웃 | `packages/common/components/src/ui/layout/nofooter.tsx` | `Header` + `LNB` + 본문 3단 구조 유지 | -| 상단 헤더 | `packages/common/components/src/ui/header/index.tsx` | 흰색 헤더, 로고, 상단 시스템 메뉴, 검색, 사용자 영역 유지 | -| 좌측 메뉴 | `packages/common/components/src/ui/lnb/index.tsx` | `하수관망도`, `I/I 분석`, `운영정보` 계층 유지 | -| 지도 컴포넌트 | `packages/common/business_components/src/ui/map/Gis.js` | OpenLayers 기반 `Gis` 사용 | -| 시설물 트리 | `packages/common/business_components/src/ui/map/GisTree.js` | 폭 250px, 제목 `시설물`, 체크박스 트리 유지 | -| 지도 도구 | `packages/common/business_components/src/ui/map/GisToolBar.js` | 기존 우측 도구 버튼 위치/크기 유지 | -| 검색 바 | `packages/common/business_components/src/ui/map/searchBar` | 기존 지도 상단 검색 조건 영역 유지 | -| 상세 팝업 | `apps/sn/app/html/(map-layout)/map/components/popupComponent/featureClickEventPopup.tsx` | 우측 350px 팝업, 파란 헤더, `VerticalTable` 유지 | -| 세로 테이블 | `apps/sn/app/components/ui/verticalTable.tsx` | `bg-blue-100` 라벨셀, 2열 세로 테이블 유지 | -| 목록 그리드 | `packages/common/business_components/src/ui/table/index.tsx` | `UiTable` 기반 목록/페이징 유지 | - -## 레이아웃 기준값 - -| 영역 | 기준 | -|---|---| -| Header | 높이 `6rem`, 흰색 배경, 하단 border | -| LNB | 폭 `22rem`, 흰색 배경, `하수관망도` active | -| GisTree | 폭 `250px`, 지도 내부 좌측 absolute. 상단 레이어 트리와 하단 설정 영역을 같은 패널 안에서 자연스럽게 분리 | -| Map body | `calc(100vh - 50px)` 계열, `Gis` 영역 full | -| Detail popup | 우측 absolute, 폭 `350px`, 높이 `calc(100vh - 5rem)` | -| Detail header | `bg-primary`, 흰색 글자, 닫기 `✕` | -| Detail table | `VerticalTable`, 왼쪽 라벨셀 `bg-blue-100`, 오른쪽 값셀 흰색 | - -## 색상 및 폰트 기준 - -노후관로관리 추가 UI는 기존 우측 상세정보의 `FeatureClickEventPopup` + `VerticalTable` 색상과 폰트 톤을 따른다. -좌측 하단 설정 영역도 별도 신규 색을 쓰지 않고 같은 토큰을 사용한다. - -| 항목 | 기준값 | 사용 위치 | -|---|---|---| -| 기본 폰트 | `Noto Sans KR`, `Malgun Gothic` fallback | 전체 화면 | -| 기본 글자색 | `#111`, `#333`, `#555` | 본문, 트리, 입력 라벨 | -| Primary blue | `#258eea` | 우측 상세 헤더, 조회 버튼 등 기존 primary 영역 | -| Dark navy | `#152346` | 기존 강조 버튼 또는 별도 강조 영역이 필요한 경우만 사용 | -| Download green | `#1fd078` | 목록/엑셀 다운로드 버튼 | -| Label cell blue | `#dbeafe` | `VerticalTable` 왼쪽 라벨셀 | -| Table border | `#dbe2e6`, `#e5e7eb` | 세로 테이블/목록 테이블 구분선 | -| Panel border | `#d1d5db`, `#d7dde3` | 좌측 패널, 설정 영역 외곽 | -| Panel background | `#fff` | LNB, GisTree, 설정 영역, 상세 팝업 | -| Apply green | `#31a83b` | 좌측 하단 설정 영역의 적용 아이콘 | - -### 좌측 하단 설정 영역 색상 기준 - -- 외곽은 `Panel border`를 사용한다. -- 헤더는 진한 남색 바를 쓰지 않고, 위 `시설물` 패널처럼 흰 배경의 제목 행을 사용한다. -- 입력 라벨, 값, 적용 아이콘 폰트는 기존 `Noto Sans KR` 계열과 동일하게 둔다. -- 적용은 텍스트 버튼이 아니라 녹색 원형 체크 아이콘 형태로 표현한다. -- 트리 영역과 설정 영역 사이에는 굵은 검정선 대신 `#d1d5db` 계열의 얇은 경계와 여백을 사용한다. -- 목적은 강한 분리선이 아니라, 같은 좌측 패널 안에서 서로 다른 기능 영역임을 자연스럽게 구분하는 것이다. - -### 목록 모달 버튼 색상 기준 - -- `조회`는 공통 `Button`의 `primary` 톤을 따른다. -- `다운로드`는 공통 `Button`의 `green` 톤을 따른다. -- 모달 안에서 임의의 남색 버튼이나 흰색 outline 다운로드 버튼을 새로 만들지 않는다. -- 정적 HTML 샘플에서도 `조회=#258eea`, `다운로드=#1fd078` 조합으로 표현한다. - -## 화면설계서 번호 기준 영역 - -노후관로관리 화면은 화면설계서의 번호 기준대로 영역을 분리해서 봐야 한다. -특히 `경과년도(년)` 입력 영역은 지도 위에 뜨는 독립 팝업이 아니라, 좌측 `시설물` 트리 하단에 붙는 별도 설정 영역으로 본다. - -| 번호 | 화면 영역 | 위치 | 기존 컴포넌트 기준 | 동작 | -|---|---|---|---|---| -| ① | 노후관로 레이어 체크박스 | 좌측 `시설물` 트리 내부, `노후관로` 행 | `GisTree` 노드 | 체크 ON/OFF로 노후관로 레이어 표출 제어 | -| ② | 경과년도 설정 영역 | 좌측 `시설물` 트리 하단, 트리 목록 아래 별도 접힘/펼침 박스로 자연스럽게 분리 | `GisTree` 하단 확장 영역 또는 지도 오버레이가 아닌 좌측 설정 블록 | `경과년도(년)` 단일 입력 후 초록 체크 적용 | -| ③ | 지도 관로 선택 영역 | 지도 본문 | `Gis`, `GisSelect`, `onFeatureSelect` | 관로 클릭 시 우측 상세 팝업 표출 | -| ④ | 노후관로 목록 아이콘 | 좌측 `시설물` 트리 내부, `노후관로` 행 우측 | `GisTree`의 `onLayerIconClick`/`onOpenPopup` | 노후관로 현황 목록 모달 호출 | - -### 좌측 영역 분리 원칙 - -```text -GisTree (좌측 250px) - 시설물 제목 - 레이어 트리 영역 - 시설 - 하수관로 - ... - 노후관로 체크박스 ① - 노후관로 목록 아이콘 ④ - (여백) - 레이어별 설정 영역 ② - 제목 행: 지반침하정보 또는 대상 레이어명 - 입력 행: 경과년도(년) [30] [초록 체크] -``` - -이 구조를 따르면 화면설계서의 ①, ②, ④가 모두 좌측 `GisTree` 계열 안에서 구분된다. -따라서 노후관로 기준 패널을 지도 중앙이나 지도 좌하단의 독립 카드처럼 띄우지 않는다. -또한 트리와 설정 영역 사이를 검정 굵은 선으로 끊지 않고, 실제 화면처럼 여백과 연한 경계선으로 자연스럽게 구분한다. - -### 접힘/펼침 기준 - -- 상단 `시설물` 영역과 하단 설정 영역은 각각 접힘/펼침이 가능해야 한다. -- 접힘 상태에서는 제목 행만 남기고 내부 행은 숨긴다. -- 하단 설정 영역은 사용자가 현재 조정할 수 있는 입력만 보여준다. -- 화면설계서 예시처럼 `지반침하정보` 설정이면 `경과년도(년) [30] [초록 체크]`만 표시한다. -- 노후관로 기준을 같은 패턴으로 적용할 때도 입력 필드를 과도하게 늘리지 않고, 대상 레이어명과 경과년도 입력만 노출한다. - -## 노후관로관리 추가 시 분해 - -| 요구사항 | 기존 컴포넌트 기반 구현 위치 | -|---|---| -| 노후관로 레이어 ON/OFF | `GisTree` 레이어 노드 추가 또는 기존 하수관로 레이어 스타일 보강 | -| 경과년도 조건 | `GisTree` 하단의 접힘/펼침 가능한 레이어별 설정 영역으로 구성. `경과년도(년)` 단일 입력만 노출 | -| 목록 아이콘 | `GisTree`의 `노후관로` 행 우측 아이콘으로 배치하고 `onLayerIconClick`/`onOpenPopup` 흐름 활용 | -| 목록 팝업 | `UiTable` 기반 모달로 구성 | -| 지도-그리드 연동 | 기존 `onFeatureSelect`, `GisApp.Module.layer.showSearchResultsFromGeoJSON` 흐름 활용 | -| 상세정보 | `FeatureClickEventPopup` 또는 동일한 `VerticalTable` 구조로 확장 | -| 노후관로분석 | 하수처리구역 피처 클릭 시 기존 상세 팝업에 분석정보 섹션 추가 | - -## 금지 방향 - -- 별도 전체 화면 레이아웃을 새로 만들지 않는다. -- 어두운 헤더/새 사이드바/카드형 상세 패널 등 기존과 다른 디자인을 넣지 않는다. -- `경과년도(년)` 설정을 지도 위 플로팅 카드로 분리하지 않는다. -- 트리와 설정 영역 사이에 굵은 검정 구분선을 사용하지 않는다. -- 좌측 하단 설정 영역에 남색 헤더 바와 남색 텍스트 적용 버튼을 사용하지 않는다. -- 하단 설정 영역에 시도/시군구/목록 버튼을 넣지 않는다. -- `apps/sn/app/html/**` 정적 샘플을 실제 서비스 코드로 그대로 옮기지 않는다. -- 기존 `FeatureClickEventPopup`, `VerticalTable`, `UiTable`, `GisTree`로 가능한 UI를 별도 컴포넌트로 새로 만들지 않는다. - -## 개발 전 확인 순서 - -1. 실제 메뉴/라우트가 `NoFooterLayout` 하위에서 열리는지 확인한다. -2. 노후관로 레이어가 기존 `SN_NETWORK` 레이어 설정에 포함되는지 확인한다. -3. 하수관로 속성명(`instl_ymd`, `fclt_mng_no`, `mqlt_cd`, `usg_cd`)을 실제 API 응답과 맞춘다. -4. 상세 패널은 기존 `FeatureClickEventPopup` 확장 가능성을 먼저 검토한다. -5. 목록 팝업은 `UiTable`과 기존 검색 모달 패턴으로 구성한다. -6. `business_components` 수정이 필요한 경우 타 앱 영향 범위를 먼저 정리한다. diff --git a/apps/sn/docs/노후관로관리/02-컴포넌트별-작업목록.md b/apps/sn/docs/노후관로관리/02-컴포넌트별-작업목록.md deleted file mode 100644 index cf00b3c96..000000000 --- a/apps/sn/docs/노후관로관리/02-컴포넌트별-작업목록.md +++ /dev/null @@ -1,240 +0,0 @@ -# 노후관로관리 컴포넌트별 작업 목록 - -## 목적 - -이 문서는 노후관로관리 화면을 실제 React 코드로 옮기기 전에, 어떤 기존 컴포넌트를 재사용하고 어떤 컴포넌트만 최소 확장할지 정리한 작업 목록이다. -기준은 `01-기존화면기반-컴포넌트분해.md`와 `old-pipe-component-sample/index.html`의 최종 확인 화면이다. - -## 구현 원칙 - -- 새 디자인 시스템을 만들지 않는다. -- 실제 화면은 `NoFooterLayout > Header/LNB > Gis > GisTree/FeatureClickEventPopup/UiTable` 흐름을 따른다. -- 좌측 하단 설정 영역은 지도 위 플로팅 카드가 아니라, `GisTree` 내부 또는 `GisTree`와 붙은 좌측 패널 영역으로 구현한다. -- 좌측 하단 설정 영역에는 `경과년도(년)` 단일 입력과 초록 적용 아이콘만 둔다. -- 노후관로 현황 목록의 `조회`는 `Button color="primary"`, `다운로드`는 `Button color="green"` 톤을 따른다. -- 우측 상세정보는 기존 `FeatureClickEventPopup` + `VerticalTable` 톤을 우선한다. - -## 작업 단위 요약 - -| 순서 | 작업 단위 | 주요 파일 | 구분 | 목적 | -|---|---|---|---|---| -| 1 | 좌측 하단 설정 영역 확장 지점 확보 | `BUSINESS_COMPONENTS_ROOT/src/ui/map/Gis.js`, `GisTree.js` | 최소 공통 확장 후보 | `GisTree` 아래에 설정 패널을 넣을 수 있는 optional slot 확보 | -| 2 | 노후관로 설정 패널 정리 | `SN_APP_ROOT/app/(map-layout)/map/components/agedPipe/AgedPipeLayerSettingPanel.tsx` | 구조 변경 | 지도 오버레이/시도/시군구 제거, 경과년도 단일 입력 + 초록 체크로 변경 | -| 3 | 노후관로 페이지 상태/이벤트 정리 | `SN_APP_ROOT/app/(map-layout)/map/page.tsx` | 구조 변경 | `Gis`, `GisTree`, 윈도우 팝업, 상세 팝업 연동의 중심 상태 관리 | -| 4 | 목록 윈도우 팝업 정리 | `AgedPipePopupPage.tsx`, `/map/aged-pipe-popup` | 스타일/동작 보완 | 기존 `UiTable`, `Button primary/green`, 목록 아이콘 호출 흐름 정리 | -| 5 | 상세 패널 기존화 | `AgedPipeDetailPanel.tsx`, `FeatureClickEventPopup.tsx`, `VerticalTable` | 대체/확장 검토 | 별도 slate 카드형 상세를 제거하고 기존 세로 테이블 톤으로 통합 | -| 6 | 유틸/필터 정리 | `agedPipeUtils.ts` | 유지/보완 | 경과년도 산정, CQL 필터, 표시값 매핑 유지 | -| 7 | 처리구역 분석 확장 | `FeatureClickEventPopup.tsx` 또는 신규 `AgedPipeAreaAnalysisSection.tsx` | 추가 | 하수처리구역 클릭 시 평균/최장/최신 매설년도 섹션 추가 | -| 8 | 검증 | 브라우저, build, 네트워크 | 검증 | 화면/지도/목록/상세/다운로드 회귀 확인 | - -## 1. `Gis` / `GisTree` 확장 후보 - -### 현재 상태 - -- `Gis.js`는 내부에서 `GisTree`를 직접 렌더링한다. -- `GisTree.js`는 좌측 250px 패널 전체를 `grow overflow-y-auto` 트리 영역으로 사용한다. -- 현재 구조만으로는 트리 하단에 `경과년도(년) [30] [초록 체크]` 설정 박스를 자연스럽게 넣기 어렵다. - -### 적용 결정 - -- `sn` 전용 임시 overlay가 아니라 `Gis`/`GisTree`의 optional slot 방식으로 진행한다. -- prop 이름은 `layerSettingView`를 사용한다. -- prop을 넘기지 않는 기존 사용처는 기존과 동일하게 동작한다. - -### 작업 내용 - -- `Gis.js`에 optional prop을 추가한다. - - 이름: `layerSettingView` - - 기본값은 `undefined`로 두어 기존 앱 영향이 없게 한다. -- `GisTree.js`에 optional footer 영역을 렌더링한다. - - 상단 `시설물` 트리 영역과 하단 설정 영역을 같은 250px 패널 안에서 분리한다. - - 상단/하단 영역 모두 접힘/펼침 가능해야 한다. -- 기존 사용처는 prop을 넘기지 않으면 기존과 동일하게 동작해야 한다. - -### 주의사항 - -- `business_components` 수정이므로 타 앱 영향 가능성을 반드시 점검한다. -- className 변경은 최소화하고, optional footer가 없을 때 기존 DOM 구조/스타일을 최대한 유지한다. -- 이 공통 확장이 부담되면 `sn` 전용으로 `Gis` 주변에 좌측 하단 패널을 겹쳐 배치하는 대안을 검토할 수 있으나, 화면설계서처럼 같은 좌측 패널 안에서 보이려면 optional slot 방식이 더 자연스럽다. - -## 2. `AgedPipeFilterPanel.tsx` - -### 현재 상태 - -- 지도 위 플로팅 카드 형태다. -- `경과년수`, `시도`, `시군구`, `GIS 반영` 버튼을 갖고 있다. -- 최종 확인 기준과 다르다. - -### 변경 방향 - -- 이름은 유지하거나 `AgedPipeLayerSettingPanel.tsx`로 변경한다. -- 화면 구성은 아래처럼 단순화한다. - -```text -지반침하정보 또는 노후관로 - 경과년도(년) [30] [초록 체크] -``` - -### 작업 내용 - -- `ctpvCd`, `sggCd` 선택 UI 제거. -- `GIS 반영` 텍스트 버튼 제거. -- 초록 원형 체크 아이콘 버튼으로 적용 액션 처리. -- `title` prop을 받아 `지반침하정보`, `노후관로` 등 대상 레이어명을 표시할 수 있게 한다. -- `elapsedYears` 값만 직접 입력받는다. -- Enter 입력과 체크 버튼 클릭 모두 `onApply`를 호출한다. - -### props 후보 - -```ts -type AgedPipeLayerSettingPanelProps = { - title: string; - elapsedYears: number; - onElapsedYearsChange: (value: number) => void; - onApply: () => void; - defaultCollapsed?: boolean; -}; -``` - -## 3. `page.tsx` - -### 현재 상태 - -- `AgedPipeFilterPanel`을 `waterDepth` prop으로 넘겨 지도 오버레이처럼 표시한다. -- `AgedPipeDetailPanel`을 `detailView`로 사용한다. -- `getData`를 사용하지만 import가 보이지 않으므로 실제 빌드 전 확인이 필요하다. -- 샘플용 `DESIGN_PREVIEW_FEATURE`, 기본 목록 오픈 상태 등이 남아 있다. - -### 변경 방향 - -- `Gis`에 `treeFooterView` 또는 `layerSettingView`를 넘겨 좌측 하단 설정 영역으로 렌더링한다. -- `waterDepth` prop은 침수심 애니메이션 목적이므로 노후관로 설정 패널 용도로 쓰지 않는다. -- 상세는 `AgedPipeDetailPanel` 단독 사용보다 기존 `FeatureClickEventPopup` 확장 또는 동일 `VerticalTable` 구조를 우선한다. - -### 작업 내용 - -- `draftFilters`와 `appliedFilters`는 유지하되, 좌측 하단 패널에서는 `elapsedYears`만 수정한다. -- 시도/시군구는 목록 모달 조회조건에만 남긴다. -- 노후관로 목록 아이콘 클릭은 `GisTree`의 `onLayerIconClick`/`onOpenPopup` 흐름으로 연결한다. -- `handleTreePopup`은 `layerNm` 문자열 대신 실제 노드 정보 또는 `lyrTyNm` 기준으로 판정하는 방향을 검토한다. -- `DESIGN_PREVIEW_FEATURE`, 기본 `isListOpen=true`, 기본 `isDetailOpen=true`는 개발 완료 전 제거한다. -- `getData` import 누락 여부를 확인하고 실제 API 유틸 경로를 맞춘다. - -## 4. 노후관로 현황 윈도우 팝업 - -### 현재 상태 - -- 노후관로 현황은 `/map/aged-pipe-popup` Next 라우트를 별도 윈도우 팝업으로 연다. -- 기존 `about:blank`에 React/CSS를 주입하던 방식은 dev CSS/chunk 404 위험 때문에 사용하지 않는다. -- 팝업 페이지는 자체적으로 목록 API를 조회하고 `UiTable`로 렌더링한다. -- 행 선택은 `window.opener.postMessage`로 부모 `/map`에 전달하여 지도 이동/상세 패널 표시를 수행한다. - -### 변경 방향 - -- 지도 내부 Dialog/modal이 아니라 브라우저 밖 윈도우 팝업을 기본 동작으로 고정한다. -- 테이블은 현재처럼 `UiTable`을 계속 사용한다. -- 버튼 색상은 아래 기준으로 고정한다. - - 조회: `Button color="primary"` - - 다운로드: `Button color="green"` -- 팝업 내부 앱 버튼은 `최소화`만 유지한다. 닫기는 브라우저 창 X를 사용한다. - -### 작업 내용 - -- 헤더 색상을 기존 primary blue 톤과 맞춘다. -- `/map/aged-pipe-popup`는 공통 `NoFooterLayout` 없이 목록 화면만 렌더링한다. -- 조회조건은 명세서대로 `경과년도`, `시도`, `시군구` 유지. -- 그리드 기본 정렬은 `경과년도 DESC`. -- 행 클릭은 부모 `/map`에 row를 전달하고 기존 `showSearchResultsFromGeoJSON` 위치 이동 흐름을 사용한다. -- 좌측 `노후관로 설정` 적용 시 열린 팝업에는 `SN_AGED_PIPE_FILTER_SYNC` 메시지를 보내 필터와 목록을 동기화한다. -- 팝업 `최소화` 클릭 시 부모 `/map`에 최소화 메시지를 보내고, 부모는 지도 위 최소화 카드를 표시한다. -- 최소화 카드의 `열기`는 다시 `/map/aged-pipe-popup` 윈도우 팝업을 실행한다. -- 다운로드는 `downloadExcelWithKoreanHeaders` 호출 유지하되, 5만 건 이상 비동기 처리 여부는 백엔드 API 매핑 단계에서 확정한다. - -## 5. 상세 패널 - -### 현재 상태 - -- `AgedPipeDetailPanel.tsx`는 별도 slate 카드형 UI다. -- 실제 화면은 `FeatureClickEventPopup`의 파란 헤더 + `VerticalTable` 구조다. - -### 변경 방향 - -- 우선순위 1: `FeatureClickEventPopup`에 노후관로 경과년도 필드만 추가해서 재사용한다. -- 우선순위 2: `FeatureClickEventPopup` 재사용이 어렵다면 `AgedPipeDetailPanel`을 `VerticalTable`과 동일한 구조로 다시 만든다. - -### 작업 내용 - -- `AGED_PIPE_DETAIL_FIELDS`는 기존 `MsSwagePplCol` 기반을 유지한다. -- `경과년도` 계산 필드를 상세 테이블 마지막에 추가한다. -- 상세 헤더는 `하수관로 정보 / 관리번호 : {시설관리번호}` 흐름을 따른다. -- `침입수분석`, `RDII분석` 버튼은 기존 `FeatureClickEventPopup`의 하수관로 조건부 버튼을 그대로 사용한다. - -## 6. `agedPipeUtils.ts` - -### 유지할 항목 - -- `getElapsedYears` -- `getCutoffYmd` -- `buildAgedPipeCqlFilters` -- `matchesAgedPipeFilters` -- `toDisplayPipeRow` -- 코드 매핑: `MS_SWAGE_PPL_USE_CODES`, `MS_SWAGE_PPL_CODES` - -### 보완할 항목 - -- `AgedPipeFilters`는 전체 상태로는 `elapsedYears`, `ctpvCd`, `sggCd`를 유지하되 좌측 하단 설정 패널에서는 `elapsedYears`만 다룬다. -- 설치일자 NULL이면 `확인불가` 그룹으로 분류할 수 있는 유틸을 추가한다. -- 미래 설치일자 방어 로직을 추가한다. -- 엑셀 다운로드용 전체 필드 매핑은 API 매핑 단계에서 확정한다. - -## 7. 노후관로분석 화면 - -### 구현 위치 후보 - -- 기존 하수처리구역 클릭 상세: `FeatureClickEventPopup` -- 처리구역 전용 부가 섹션: 신규 `AgedPipeAreaAnalysisSection.tsx` - -### 작업 내용 - -- 하수처리구역 피처 클릭 시 기존 기본정보는 유지한다. -- 기본정보 아래에 `하수관로 분석정보` 섹션을 추가한다. -- 평균/최장/최신 매설년도는 `VerticalTable` 또는 기존 테이블 톤으로 표시한다. -- `보수이력` 링크/버튼은 기존 `Button` 톤을 사용한다. -- 처리구역 내 관로 0건이면 명세서 문구를 표시한다. - -## 8. 검증 목록 - -| 구분 | 확인 내용 | -|---|---| -| 화면 | Header/LNB/GisTree/상세 팝업이 기존 화면과 같은 위치와 톤인지 확인 | -| 좌측 설정 | `시설물` 영역과 하단 설정 영역이 각각 접힘/펼침 되는지 확인 | -| 입력 | 하단 설정 영역은 `경과년도(년)` 단일 입력만 노출되는지 확인 | -| 레이어 | 노후관로 체크 ON/OFF 시 지도 스타일만 바뀌고 기존 하수관로 레이어가 사라지지 않는지 확인 | -| 목록 | 노후관로 목록 아이콘 클릭 시 `/map/aged-pipe-popup` 윈도우 팝업이 열리는지 확인 | -| 버튼 | 목록 윈도우 팝업 `조회=primary`, `다운로드=green`인지 확인 | -| 상세 | 지도 관로 클릭 및 팝업 목록 행 클릭 시 기존 상세 팝업 톤으로 표시되는지 확인 | -| 다운로드 | 조회 결과 엑셀 다운로드가 동작하는지 확인 | -| 빌드 | `pnpm --filter @common/business_components run build`, `pnpm --filter sn run build` | - -## 권장 구현 순서 - -1. `AgedPipeFilterPanel`을 단일 입력 설정 패널로 먼저 정리한다. -2. `Gis`/`GisTree`에 optional footer slot을 추가할지, `sn` 전용 좌측 패널 조합으로 갈지 결정한다. -3. `page.tsx`에서 지도 오버레이 방식(`waterDepth`)을 제거하고 좌측 설정 영역으로 연결한다. -4. `/map/aged-pipe-popup` 윈도우 팝업을 기존 버튼/테이블 톤에 맞춘다. -5. 상세는 `FeatureClickEventPopup` 재사용 가능성을 먼저 구현 검토한다. -6. 노후관로분석의 처리구역 분석 섹션을 추가한다. -7. 브라우저에서 화면설계서 기준 ①~④ 동작을 확인한다. - -## 2026-04-23 추가 보완 작업 - -| 순서 | 보완 항목 | 주요 파일 | 처리 방향 | -|---|---|---|---| -| 1 | 상세 기본정보 헤더 경과년도 표시 | `FeatureClickEventPopup.tsx`, `agedPipeUtils.ts` | 하수관로 상세의 `기본정보` 옆에 `경과년도 n년` 배지를 표시한다. | -| 2 | 경과년도 인라인 입력 안정화 | `page.tsx`, `AgedPipeLayerSettingPanel.tsx`, `GisTree.js` | 입력 중 컴포넌트 재마운트로 포커스가 끊기지 않도록 inline setting 렌더링을 React node 방식으로 안정화한다. | -| 3 | 목록을 윈도우 팝업으로 변경 | `AgedPipePopupPage.tsx`, `/map/aged-pipe-popup` | Dialog modal 또는 지도 내부 fixed popup 대신 별도 Next 라우트를 브라우저 윈도우 팝업으로 표시한다. | -| 4 | 오수관/노후관로 색상 분리 | `tb_sn_lyr_stng`, `DB/001-노후관로-레이어설정.md` | 오수관은 주황색, 노후관로 강조선은 빨간색으로 구분한다. | -| 5 | sentinel 설치일자 제외 | `agedPipeUtils.ts` | `1900-01-01`, `1999-01-01`로 등록된 설치일자는 조회 CQL과 경과년도 계산에서 제외한다. | -| 6 | 노후관로 줌 레벨 기준 명시 | `page.tsx`, `agedPipeUtils.ts` | 노후관로 강조 레이어 표출 기준은 `minViewSize = 14`로 관리한다. | -| 7 | 윈도우 팝업 상태 연동 | `page.tsx`, `AgedPipePopupPage.tsx` | 좌측 설정 적용, 목록 행 선택, 최소화 상태를 `postMessage`로 부모 지도와 팝업 사이에 동기화한다. | -| 8 | 선택 관로 시각 강조 | `BUSINESS_COMPONENTS_ROOT/src/ui/map/lib/gis.select.js` | 선택된 선 피처에 다중 stroke(soft glow, white halo, violet core, highlight)를 적용한다. | diff --git a/apps/sn/docs/노후관로관리/03-API응답필드매핑표.md b/apps/sn/docs/노후관로관리/03-API응답필드매핑표.md deleted file mode 100644 index 3819b2da2..000000000 --- a/apps/sn/docs/노후관로관리/03-API응답필드매핑표.md +++ /dev/null @@ -1,73 +0,0 @@ -# 노후관로관리 API 응답 필드 매핑표 - -## 목적 - -노후관로관리 화면에서 사용할 API와 응답 필드를 화면 컴포넌트 기준으로 매핑한다. -이 문서는 다음 단계에서 상세 작성한다. - -## API 목록 - -| 구분 | Method | Endpoint | 사용 컴포넌트 | 상태 | -|---|---|---|---|---| -| 레이어 설정 | GET | `/sewerage-service/api/v1/map/lyrStngs/SN_NETWORK` | `Gis`, `GisTree` | 기존 | -| 관로 목록 | GET | `v1/fclts?lyrTypeNm=tb_ms_swage_ppl&cqlFiter=...` | `AgedPipePopupPage`, `UiTable` | 기존 재사용, 백엔드 검증 필요 | -| 관로 상세 | GET | `v1/fcltppl/{fcltMngNo}/{mngInstCd}` | `FeatureClickEventPopup`, `VerticalTable` | 기존 재사용 | -| 엑셀 다운로드 | GET + 프론트 생성 | `v1/fclts?lyrTypeNm=tb_ms_swage_ppl&cqlFiter=...` | `AgedPipePopupPage` | 임시 재사용 | -| 위치 이동 | WFS/GeoServer | `tb_ms_swage_ppl.{fid}` | `GisApp.Module.layer.showSearchResultsFromGeoJSON` | `fid` 계약 검증 필요 | -| 처리구역 분석 | - | 미확정 | 분석정보 섹션 | 확인 필요 | -| 보수이력 | - | 미확정 | 보수이력 버튼/팝업 | 확인 필요 | - -## 조회 조건 매핑 - -| 조건 | 화면 기본값 | API 전달 방식 | 비고 | -|---|---:|---|---| -| 경과년도 | 30 | `instl_ymd <= '{오늘 기준 경과년도 차감일자}'` CQL | 사용자 지시 기준. 요구사항 원문/기존 문서의 20년과 차이가 있어 30년으로 보정 | -| 시도 | 전체 | `pbadms_emd_cd LIKE '{ctpvCd}%'` | 시군구가 전체일 때만 적용 | -| 시군구 | 전체 | `pbadms_emd_cd LIKE '{sggCd}%'` | 시군구 선택 시 시도 조건보다 우선 | - -### 제외 조건 - -설치일자가 실제 null 대신 sentinel 값으로 적재된 데이터는 노후관로 목록/강조선 조회에서 제외한다. - -| 제외 대상 | API 전달 방식 | 비고 | -|---|---|---| -| 설치일자 없음 | `instl_ymd IS NOT NULL` | CQL 기본 조건 | -| `1900-01-01` | `instl_ymd NOT LIKE '19000101%'` | 원본 `19000101 ` 형태 대응 | -| `1999-01-01` | `instl_ymd NOT LIKE '19990101%'` | null 대체값으로 등록된 데이터 제외 요청 반영 | - -## 필드 매핑 - -| 화면 영역 | 표시명 | 응답 필드 | 변환/코드매핑 | 빈 값 처리 | 비고 | -|---|---|---|---|---|---| -| 목록 | 시설관리번호 | `fclt_mng_no`, `fcltMngNo` | 문자열 | `-` | | -| 목록 | 관리기관코드 | `mng_inst_cd`, `mngInstCd` | 문자열 | `-` | 상세 API path 변수 | -| 목록 | GeoServer Feature ID | `fid` | 문자열 | 필수 | 목록 행 클릭 위치 이동 기준 | -| 목록 | 설치일자 | `instl_ymd`, `instlYmd` | 날짜 표시 | `확인불가` | 경과년도 산정 기준 | -| 목록 | 관경(mm) | `pdmt_vl`, `pdmtVl` | 숫자 | `-` | | -| 목록 | 연장(m) | `prlg_vl`, `prlgVl` | 숫자 | `-` | | -| 목록 | 용도 | `usg_cd`, `usgCd` | `MS_SWAGE_PPL_USE_CODES` | `-` | | -| 목록 | 재질 | `mqlt_cd`, `mqltCd` | `MS_SWAGE_PPL_CODES` | `-` | | -| 목록/상세 | 경과년도 | 설치일자 기반 계산 | `현재연도 - 설치연도` | `확인불가` | 백엔드 필드 여부 확인 필요 | - -## 현재 확정 - -- 노후관로 목록은 기존 `GET v1/fclts?lyrTypeNm=tb_ms_swage_ppl&cqlFiter=...`를 재사용한다. -- `cqlFiter` 오탈자 파라미터를 유지하되, 백엔드는 `cqlFilter`도 호환한다. -- 노후관로 전용 신규 API는 만들지 않는다. -- 상세 기본정보 헤더에는 설치일자 기반 경과년도를 배지 형태로 함께 표시한다. -- 노후관로 현황은 `/map/aged-pipe-popup` 윈도우 팝업에서 자체 조회한다. -- 부모 지도와 팝업 간 상태 동기화는 API가 아니라 `postMessage`로 처리한다. - - `SN_AGED_PIPE_ROW_SELECT`: 팝업 목록 행 선택 row를 부모 지도에 전달 - - `SN_AGED_PIPE_FILTER_SYNC`: 부모 좌측 설정의 적용 필터를 열린 팝업에 전달 - - `SN_AGED_PIPE_POPUP_MINIMIZE`: 팝업 최소화 상태를 부모 지도에 전달 - -## 미확인사항 - -- 기존 `v1/fclts`로 1차 구현은 가능하나 운영 기준 전용 API가 필요한지 백엔드에서 판단 필요 -- `cqlFiter` 파라미터명 오탈자 호환 여부 확인 필요 -- `cqlFiter`를 문자열로 받는 경우 허용 필드와 연산자 제한 필요 -- 경과년도 계산을 프론트에서 계속 할지, 백엔드 응답 필드로 받을지 확인 필요 -- `fid`가 GeoServer `FEATUREID`와 항상 일치하는지 확인 필요 -- `mngInstCd`가 없는 노후관로 행에서 상세 API를 어떻게 처리할지 확인 필요 -- 엑셀 다운로드는 현재 프론트 유틸로 1만 건까지 생성하며, 5만 건 이상 서버 비동기 파일 API 필요 여부 확인 필요 -- 처리구역 분석 통계를 프론트 계산으로 할지, 백엔드 API로 받을지 diff --git a/apps/sn/docs/노후관로관리/04-화면흐름.md b/apps/sn/docs/노후관로관리/04-화면흐름.md deleted file mode 100644 index 2a81730c7..000000000 --- a/apps/sn/docs/노후관로관리/04-화면흐름.md +++ /dev/null @@ -1,40 +0,0 @@ -# 노후관로관리 화면흐름 - -## 목적 - -사용자 이벤트와 화면 상태 변화를 정리한다. - -## SN_MN010102 노후관로관리 - -| 트리거 | 동작 | 결과 | -|---|---|---| -| 화면 진입 | `Gis` 초기화, `SN_NETWORK` 레이어 설정 조회 | 지도와 시설물 트리 표시 | -| 노후관로 체크 ON | 경과년도 기준에 맞는 관로 스타일 강조 | 지도에 노후관로 표출 | -| 좌측 하단 경과년도 적용 | 기준값 갱신, 레이어 스타일 재적용, 열린 윈도우 팝업에 필터 동기화 메시지 전송 | 지도/목록 조건 갱신 | -| 노후관로 목록 아이콘 클릭 | `/map/aged-pipe-popup` 윈도우 팝업 오픈 | `UiTable` 목록 표시 | -| 목록 조회 | 경과년도/시도/시군구 조건 조회 | 목록 갱신 | -| 목록 다운로드 | 조회 결과 다운로드 | 엑셀 또는 파일 응답 | -| 목록 행 클릭 | `postMessage`로 부모 지도에 row 전달 | 지도 위치 이동, `FeatureClickEventPopup` 표시 | -| 팝업 최소화 | 팝업에서 최소화 메시지 전송 후 창 닫기 | 지도 위 최소화 카드 표시 | -| 최소화 카드 열기 | `/map/aged-pipe-popup` 윈도우 팝업 재오픈 | 동일 조건의 목록 표시 | -| 지도 관로 클릭 | 피처 선택 | 상세정보 표시 | - -## 2026-04-23 보완 흐름 - -| 트리거 | 동작 | 결과 | -|---|---|---| -| 경과년도 입력 | 로컬 입력 상태만 변경 | 입력 중 포커스 유지 | -| 경과년도 적용 버튼 또는 Enter | 적용 조건 확정, CQL 재생성, 열린 팝업 목록 재조회 | 노후관로 강조 레이어와 윈도우 팝업 목록 갱신 | -| 목록 팝업 열기 | 실제 Next 라우트 `/map/aged-pipe-popup` 실행 | 브라우저 밖 윈도우 팝업으로 동작 | -| 상세 패널 표시 | 설치일자 기반 경과년도 계산 | `기본정보` 옆에 경과년도 배지 표시 | -| 노후관로 조회 | sentinel 설치일자 제외 조건 추가 | `1900-01-01`, `1999-01-01` 데이터 제외 | -| 노후관로 체크 ON | `minViewSize = 14` 기준 강조 레이어 추가 | 줌 레벨 14 이상에서 일반 노후관로 강조선 확인 | -| 선택 관로 표시 | 선 피처 선택 스타일 적용 | 다중 stroke로 보라색 선택선 강조 | - -## SN_MN010103 노후관로분석 - -| 트리거 | 동작 | 결과 | -|---|---|---| -| 화면 진입 | 하수처리구역 레이어 표시 | 분석 대상 구역 확인 | -| 처리구역 클릭 | 구역 기본정보 및 관로 분석정보 조회/계산 | 우측 상세 패널 표시 | -| 보수이력 클릭 | 보수이력 팝업 또는 화면 호출 | 이력 목록 표시 | diff --git a/apps/sn/docs/노후관로관리/05-검증계획.md b/apps/sn/docs/노후관로관리/05-검증계획.md deleted file mode 100644 index da4060510..000000000 --- a/apps/sn/docs/노후관로관리/05-검증계획.md +++ /dev/null @@ -1,39 +0,0 @@ -# 노후관로관리 검증계획 - -## 브라우저 검증 - -| 항목 | 확인 내용 | 상태 | -|---|---|---| -| 기존 레이아웃 | Header/LNB/GisTree/상세 패널 위치가 기존 화면과 같은지 확인 | 대기 | -| 좌측 설정 | 하단 경과년도 설정 영역이 좌측 패널 내부에 표시되는지 확인 | 대기 | -| 접힘/펼침 | 시설물 영역과 설정 영역이 각각 접히고 펼쳐지는지 확인 | 대기 | -| 노후관로 체크 | 체크 ON/OFF 시 레이어 강조가 바뀌는지 확인 | 대기 | -| 목록 윈도우 팝업 | 목록 아이콘 클릭 시 `/map/aged-pipe-popup`이 브라우저 밖 윈도우 팝업으로 열리는지 확인 | 대기 | -| 버튼 색상 | 조회 primary, 다운로드 green 톤인지 확인 | 대기 | -| 상세 연동 | 지도 클릭/팝업 목록 행 클릭 시 상세 패널 표시 | 대기 | -| 상세 경과년도 | 하수관로 상세 `기본정보` 옆에 경과년도 배지가 표시되는지 확인 | 대기 | -| 경과년도 입력 안정성 | 숫자 연속 입력 중 포커스가 유지되고 적용/Enter 후 조건이 반영되는지 확인 | 대기 | -| 설정-팝업 동기화 | 좌측 `노후관로 설정` 적용 시 열린 윈도우 팝업의 경과년도/목록이 같이 갱신되는지 확인 | 대기 | -| 팝업 최소화 | 윈도우 팝업의 `최소화` 클릭 시 지도 위 최소화 카드가 표시되고 `열기`로 다시 윈도우 팝업이 열리는지 확인 | 대기 | -| 설치일자 제외 | `1900-01-01`, `1999-01-01` 데이터가 목록/강조선 조회에서 제외되는지 확인 | 대기 | -| 색상 구분 | 오수관은 주황색, 노후관로 강조선은 빨간색으로 구분되는지 확인 | 대기 | -| 줌 레벨 | 줌 레벨 14 이상에서 노후관로 강조선이 표시되는지 확인 | 대기 | -| 선택 관로 강조 | 선택된 관로가 soft glow/white halo/violet core 다중 stroke로 지도 위에서 명확히 보이는지 확인 | 대기 | -| dev CSS/chunk 404 | 팝업 실행 후 `/_next/static/css/app/layout.css?...` 404 반복 호출이 발생하지 않는지 확인 | 대기 | - -## 빌드 검증 - -```powershell -pnpm --filter @common/business_components run build -pnpm --filter sn run build -``` - -`business_components`를 수정하지 않는 경우 `sn` 빌드만 우선 수행한다. - -## 네트워크 검증 - -- 레이어 설정 조회 -- 관로 목록 조회 -- 관로 상세 조회 -- 다운로드 요청 -- 처리구역 분석 요청 또는 계산용 데이터 조회 diff --git a/apps/sn/docs/노후관로관리/06-검증결과.md b/apps/sn/docs/노후관로관리/06-검증결과.md deleted file mode 100644 index d83e549e7..000000000 --- a/apps/sn/docs/노후관로관리/06-검증결과.md +++ /dev/null @@ -1,114 +0,0 @@ -# 노후관로관리 검증결과 - -## 2026-04-22 구현 후 빌드 검증 - -| 구분 | 명령 | 결과 | 비고 | -|---|---|---|---| -| 공통 비즈니스 컴포넌트 | `pnpm --filter @common/business_components run build` | 성공 | `Gis`, `GisTree` optional 확장 포함 | -| sn 앱 | `pnpm --filter sn run build` | 성공 | Next 컴파일/페이지 생성 성공 | - -## 남은 검증 - -- 브라우저에서 `/map` 진입 후 실제 `SN_NETWORK` 응답에 `노후관로` 노드가 내려오는지 확인 -- 노후관로 체크 ON/OFF 시 좌측 하단 설정 컴포넌트 표시/숨김 확인 -- 노후관로 목록 아이콘 클릭 시 현황 모달 표시 확인 -- `v1/fclts`의 `cqlFiter` 조건이 경과년도/시도/시군구 조합대로 동작하는지 네트워크 확인 -- 지도 halo 강조가 기존 하수관로 선 색상을 덮지 않는지 브라우저 확인 -- 목록 행 더블클릭 시 지도 이동과 `FeatureClickEventPopup` 상세 표시 확인 - -## 특이사항 - -- `sn` 빌드 마지막 단계에서 Windows symlink 권한으로 standalone trace 복사 경고가 발생했지만, Next 빌드 자체는 성공했다. - -## 2026-04-23 보완 검증 - -| 구분 | 확인 내용 | 결과 | 비고 | -|---|---|---|---| -| 상세 경과년도 | 하수관로 상세 `기본정보` 헤더 옆 경과년도 배지 추가 | 반영 | `FeatureClickEventPopup`에서 `elapsedYears` 계산값 표시 | -| 경과년도 입력 안정화 | 좌측 인라인 설정 입력 중 재마운트 방지 | 반영 | `GisTree`가 React node inline view를 렌더링하도록 보완 | -| 목록 윈도우 팝업 | 노후관로 현황을 Dialog modal 대신 드래그 가능한 fixed popup으로 표시 | 반영 | `AgedPipeListModal`에서 헤더 pointer drag 처리 | -| sentinel 설치일자 제외 | `1900-01-01`, `1999-01-01` 데이터 제외 | 성공 | CQL 조건 API 200, 결과 첫 5건 sentinel 미포함 | -| 오수관 색상 | 일반 오수관 색상을 주황색으로 변경 | 성공 | `lyr_sn=6`, `line_colr=rgba(255, 128, 0, 1)` 확인 | -| 노후관로 줌 레벨 | 노후관로 강조 레이어 최소 줌 기준 | 확인 | `AGED_PIPE_MIN_ZOOM=14`, `minViewSize=14` | -| 공통 컴포넌트 빌드 | `business_components` 빌드 | 성공 | `pnpm --filter @common/business_components run build` | -| `sn` 앱 빌드 | `sn` 빌드 | 성공 | Next 컴파일/페이지 생성 성공. standalone symlink 권한 경고 발생 | - -## 2026-04-23 추가 UX 보완 검증 - -| 구분 | 확인 내용 | 결과 | 비고 | -|---|---|---|---| -| 브라우저 밖 팝업 | 노후관로 현황을 열 때 처음부터 별도 창으로 표시 | 반영 | 사용자 클릭 시점에 `/map/aged-pipe-popup` Next 페이지를 `window.open`으로 실행 | -| 새 창 렌더링 | 별도 창을 실제 Next 라우트로 분리 | 반영 | `about:blank`에 React/CSS를 주입하던 방식 제거. `/map/aged-pipe-popup`에서 목록 자체 조회/렌더링 | -| 팝업 동작 기준 | 노후관로 현황 기본 동작을 별도 윈도우 팝업으로 고정 | 반영 | `새 창`/`지도 안으로` 전환 버튼 제거. 팝업 내부 앱 버튼은 `최소화`만 유지 | -| 새 창 CSS 404 방지 | 새 창 CSS 복제 방식 제거 | 반영 | `/_next/static/css/app/layout.css?...` dev 404 반복 호출 방지를 위해 stylesheet 복사/주입 구조 제거 | -| 목록 행 선택 연동 | 새 창 목록 행 클릭 시 부모 지도 화면으로 선택 row 전달 | 반영 | `window.opener.postMessage`로 row를 전달하고 부모 `/map`에서 위치 이동/상세 패널 표시 | -| 최소화 카드 기준 | 팝업에서 `최소화` 클릭 시 지도 위 최소화 카드 표시 | 반영 | 최소화 카드의 `열기`는 다시 `/map/aged-pipe-popup` 윈도우 팝업을 실행 | -| 지도 설정-팝업 필터 동기화 | 좌측 `노후관로 설정` 적용 시 열린 윈도우 팝업 목록도 재조회 | 반영 | 부모 `/map`에서 `SN_AGED_PIPE_FILTER_SYNC` 메시지 전송, 팝업에서 필터/목록 1페이지 갱신 | -| 선택 관로 시각 강조 | 선택된 선 피처 스타일 개선 | 반영 | soft violet glow, white halo, violet core, lavender highlight 다중 stroke 적용 | -| dev CSS/chunk 404 복구 | dev 서버 중 `next build` 실행으로 `.next` 산출물 혼재 발생 | 조치 | `apps/sn/.next` 삭제 후 dev 서버 재시작 필요. dev 실행 중에는 `next build` 병행 금지 | -| 줌 레벨 기준 | 노후관로 강조 레이어 표시 시작 줌 레벨 | 확인 | `AGED_PIPE_MIN_ZOOM=14`, `minViewSize=14` | -| 지도 표시 원복 | 추가 안내 배지/범례/강조선 스타일 변경 제거 | 반영 | `lnWdth=4`, `lnColor=rgba(235, 40, 40, 0.82)` 유지 | -| 서버 상태 | 백엔드/프론트 포트 확인 | 성공 | `localhost:8883`, `localhost:3002` TCP 연결 성공 | -| `/map` 응답 | 프론트 `/map` HTTP 응답 확인 | 성공 | `GET http://localhost:3002/map` 200 OK | -| `sn` 앱 빌드 | 변경 후 `sn` 빌드 | 성공 | Next 컴파일/페이지 생성 성공. standalone symlink 권한 경고 발생 | -| TypeScript 검사 | `pnpm --filter sn exec tsc --noEmit --pretty false` | 기존 오류 잔존 | 이번 변경 신규 오류는 해소. 기존 `common/index.ts`, `html/(with-base-layout)`, chart implicit any 오류 잔존 | - -### 브라우저 검증 제약 - -- 현재 workspace에 Playwright CLI가 설치되어 있지 않아 자동 브라우저 조작 검증은 수행하지 못했다. -- 실행 중인 Chrome은 remote debugging port가 열려 있지 않았다. -- Headless Chrome 스크린샷은 임시 브라우저 세션 특성상 사용자 로그인/지도 리소스 상태를 재현하지 못해 최종 UI 증적으로 사용하지 않았다. - -### API 검증 - -```text -GET /sewerage-service/api/v1/fclts - ?lyrTypeNm=tb_ms_swage_ppl - &cqlFiter=instl_ymd IS NOT NULL - and instl_ymd NOT LIKE '19000101%' - and instl_ymd NOT LIKE '19990101%' - and instl_ymd <= '19960423' - &page=0 - &size=5 -``` - -결과: - -```text -status=200 -count=735119 -첫 5건 설치일자: 19730731, 19830331, 19690630, 19870509, 19841020 -``` - -### DB 검증 - -```text -lyr_sn=6 -lyr_nm=오수관 -line_colr=rgba(255, 128, 0, 1) -``` - -## 검증 개요 - -| 항목 | 내용 | -|---|---| -| 검증 일자 | 2026-04-22 | -| 검증자 | Codex | -| 대상 화면 | SN_MN010102, SN_MN010103 | -| 실행 URL | 빌드 검증 기준 | -| 브라우저 | 미수행 | - -## 검증 결과 - -| 항목 | 결과 | 증적 | 비고 | -|---|---|---|---| -| 공통 비즈니스 컴포넌트 빌드 | 성공 | `pnpm --filter @common/business_components run build` | `startOfMonth` unused 경고는 기존 빌드 경고로 보임 | -| `sn` 앱 빌드 | 성공 | `pnpm --filter sn run build` | 종료 코드 0. Windows symlink 권한 경고 발생 | -| 타입 검사 | 부분 실패 | `pnpm --filter sn exec tsc --noEmit` | 신규 `layerSettingView` 관련 오류는 해소. 기존 `SwtrmtFclt`, `with-base-layout`, chart implicit any 오류 잔존 | -| HTML/코드 공백 검사 | 성공 | `git diff --check` | 관련 수정 파일 기준 | - -## 남은 리스크 - -- 브라우저에서 `/map` 실제 화면 조작 검증은 사용자가 최종 확인해야 한다. -- `tsc --noEmit`의 기존 타입 오류는 별도 정리가 필요하다. -- Next standalone trace 중 symlink 권한 경고가 있어 Windows 개발 환경 권한 확인이 필요하다. diff --git a/apps/sn/docs/노후관로관리/07-백엔드-착수프롬프트.md b/apps/sn/docs/노후관로관리/07-백엔드-착수프롬프트.md deleted file mode 100644 index d3179e6c6..000000000 --- a/apps/sn/docs/노후관로관리/07-백엔드-착수프롬프트.md +++ /dev/null @@ -1,55 +0,0 @@ -# 노후관로관리 백엔드 착수 프롬프트 - -아래 프롬프트는 새 스레드에서 백엔드 작업을 시작할 때 그대로 사용한다. - -```text -WORKSPACE_ROOT=C:\mindone_project\iipbs-workspace 기준으로 작업해줘. - -프론트 노후관로관리 1차 구현은 마무리했고, 이제 sewerage-service 백엔드 계약 정리와 보강을 시작하려고 한다. - -반드시 먼저 아래 AGENTS.md를 확인해줘. -- WORKSPACE_ROOT/AGENTS.md -- WORKSPACE_ROOT/IIPBS/sewerage-service/AGENTS.md -- WORKSPACE_ROOT/frontend/apps/sn/AGENTS.md - -이번 백엔드 작업의 기준 문서는 아래야. -- IIPBS/sewerage-service/docs/AI코딩하네스/작업계획/001-BE-P2-노후관로관리-작업카드.md -- frontend/apps/sn/app/html/06. 노후관로관리_시나리오_v1.0.md -- frontend/apps/sn/docs/노후관로관리/03-API응답필드매핑표.md -- frontend/apps/sn/docs/노후관로관리/99-미확인사항.md - -현재 프론트에서 확정된 동작은 다음과 같아. -1. /map 좌측 레이어 트리 최상위 순서는 시설, 침수위험지도(중점관리지역), 도시침수지도(정보제공포털), 노후관로 순서다. -2. 노후관로는 기존 하수관로 시설물 레이어와 별도 제어 항목이다. -3. 노후관로 체크 시 경과년도/지역 조건에 맞는 하수관로를 지도에 빨간 강조선으로 표출한다. -4. 노후관로 항목 바로 아래 인라인 설정으로 경과년도(기본 30년)를 입력한다. -5. 노후관로 목록은 GET v1/fclts?lyrTypeNm=tb_ms_swage_ppl&cqlFiter=... 를 현재 재사용한다. -6. 목록 행 클릭 시 GeoServer FEATUREID(fid)로 위치 이동하고, GET v1/fcltppl/{fcltMngNo}/{mngInstCd} 상세를 우측 패널에 표시한다. -7. 목록 필수 필드는 fid, fcltMngNo/fclt_mng_no, mngInstCd/mng_inst_cd, instlYmd/instl_ymd, pdmtVl/pdmt_vl, prlgVl/prlg_vl, usgCd/usg_cd, mqltCd/mqlt_cd 이다. - -백엔드에서 우선 확인/정리할 것은 다음이야. -1. GET /api/v1/fclts 구현 위치와 파라미터 처리 방식 확인 -2. cqlFiter 파라미터명 오탈자 호환 여부 확인 또는 cqlFilter와의 호환 처리 방안 제안 -3. CQL 문자열 직접 전달 시 허용 필드/연산자 제한 또는 안전한 검색 DTO로 전환 가능성 검토 -4. instl_ymd <= cutoff, pbadms_emd_cd LIKE 조건이 tb_ms_swage_ppl 기준으로 정상 동작하는지 확인 -5. 목록 응답 fid가 GeoServer FEATUREID로 사용 가능한지 확인 -6. mngInstCd 누락 행이 있을 때 상세 API 처리 방식 확인 -7. tb_sn_lyr_stng에 정식 노후관로 레이어 설정을 넣는 것이 맞는지 분석 -8. 필요하면 노후관로 전용 read-only API를 설계하되 기존 프론트/기존 API 계약은 깨지 않게 해줘. - -작업 방식: -- 먼저 코드와 문서를 읽고 영향 범위를 정리해줘. -- DB 스키마 변경은 기본적으로 하지 말고, 필요한 경우 이유/영향/롤백을 먼저 정리해줘. -- 백엔드 변경이 필요하면 최소 범위로 구현해줘. -- 가능한 테스트나 API 검증 방법을 함께 제시해줘. - -결과 보고는 아래 형식으로 해줘. -- 작업 목적 -- 수정 대상 파일 -- 변경 내용 요약 -- 영향 범위 -- 테스트 / 검증 방법 -- 롤백 방법 -- 남은 리스크 -``` - diff --git a/apps/sn/docs/노후관로관리/99-미확인사항.md b/apps/sn/docs/노후관로관리/99-미확인사항.md deleted file mode 100644 index 20f025ff8..000000000 --- a/apps/sn/docs/노후관로관리/99-미확인사항.md +++ /dev/null @@ -1,27 +0,0 @@ -# 노후관로관리 미확인사항 - -| 일자 | 구분 | 내용 | 확인 필요 대상 | 상태 | -|---|---|---|---|---| -| 2026-04-22 | BE | `v1/fclts`의 `cqlFiter` 파라미터명 오탈자 호환 여부 | BE | 확인 필요 | -| 2026-04-22 | BE | CQL 문자열 직접 전달 방식의 허용 필드/연산자 제한 여부 | BE | 확인 필요 | -| 2026-04-22 | BE | 목록 응답 `fid`가 GeoServer `FEATUREID` 위치 이동에 항상 사용 가능한지 | BE/GeoServer | 확인 필요 | -| 2026-04-22 | BE | `mngInstCd` 누락 행의 상세 API 처리 방식 | BE | 확인 필요 | -| 2026-04-22 | BE | `tb_sn_lyr_stng`에 정식 노후관로 레이어 설정을 추가할지 여부 | BE/DB | 확인 필요 | -| 2026-04-22 | BE | 대량 엑셀 다운로드를 프론트 생성으로 유지할지 서버 파일 API로 전환할지 | BE/FE | 확인 필요 | -| 2026-04-23 | FE | 상세 패널 기본정보 헤더에 노후관로 경과년도 표시 | FE | 반영 | -| 2026-04-23 | FE | 경과년도 입력 중 포커스 끊김/적용 누락 문제 | FE | 반영, 브라우저 검증 필요 | -| 2026-04-23 | FE | 노후관로 현황 목록을 모달이 아닌 윈도우형 팝업으로 표시 | FE | 반영, 브라우저 검증 필요 | -| 2026-04-23 | DB/FE | 오수관 색상을 주황색으로 변경하고 노후관로 빨간 강조선과 구분 | DB/FE | DB 반영 | -| 2026-04-23 | FE | `1900-01-01`, `1999-01-01` sentinel 설치일자 제외 | FE | 반영, API 검증 필요 | -| 2026-04-23 | FE | 노후관로 강조 레이어 표출 줌 레벨 기준 | FE | `minViewSize=14` 확인 | -| 2026-04-23 | FE | 윈도우 팝업과 지도 좌측 설정의 경과년도 조건 동기화 | FE | 반영, 브라우저 검증 필요 | -| 2026-04-23 | FE | 팝업 최소화/복원 기준 | FE | 팝업 `최소화` 클릭 시만 최소화 카드 표시로 반영 | -| 2026-04-23 | FE | 선택 관로 보라색 강조선 시각 개선 | FE/공통컴포넌트 | 반영, 브라우저 검증 필요 | - -## 우선 확인 대상 - -- 기존 `v1/fclts`의 필터 조건으로 경과년도/지역 조회를 모두 처리할 수 있는지 -- 경과년도 기준값 저장/로그 API가 필요한지 -- 처리구역 분석 통계를 프론트 계산으로 할지 백엔드 API로 받을지 -- 엑셀 다운로드 5만 건 이상 처리 방식 -- 지반침하정보도 노후관로와 같은 인라인 설정 확장 포인트를 사용하되, 백엔드 API/레이어 설정은 별도 확정 필요 diff --git a/apps/sn/docs/노후관로관리/README.md b/apps/sn/docs/노후관로관리/README.md deleted file mode 100644 index d7c1a18e7..000000000 --- a/apps/sn/docs/노후관로관리/README.md +++ /dev/null @@ -1,32 +0,0 @@ -# 노후관로관리 문서 - -## 목적 - -노후관로관리 및 노후관로분석 화면을 `sn` 기존 화면/컴포넌트 기준으로 구현하기 위한 기능별 산출물 묶음이다. - -## 대상 화면 - -| 화면 ID | 화면명 | 메뉴 경로 | -|---|---|---| -| `SN_MN010102` | 노후관로관리 | 하수관망도 > 노후관로관리 | -| `SN_MN010103` | 노후관로분석 | 하수관망도 > 노후관로분석 | - -## 문서 순서 - -| 문서 | 역할 | -|---|---| -| `00-범위.md` | 기능 범위와 제외 범위 | -| `01-기존화면기반-컴포넌트분해.md` | 기존 화면 기준 영역/컴포넌트/색상 분해 | -| `02-컴포넌트별-작업목록.md` | 실제 구현 전 작업 단위 목록 | -| `03-API응답필드매핑표.md` | API와 화면 표시 필드 매핑 | -| `04-화면흐름.md` | 사용자 이벤트와 화면 상태 흐름 | -| `05-검증계획.md` | 구현 후 검증 계획 | -| `06-검증결과.md` | 검증 수행 결과 | -| `99-미확인사항.md` | 남은 질문과 의사결정 대기 항목 | - -## 작성 기준 - -- 실제 React 구현은 기존 `NoFooterLayout`, `Gis`, `GisTree`, `FeatureClickEventPopup`, `VerticalTable`, `UiTable` 흐름을 우선한다. -- 백엔드 상세 구현은 작성하지 않고, 필요한 API/필드/응답 사용 방식만 매핑한다. -- 화면설계서와 다른 독립 디자인을 만들지 않는다. -