# 고객관리 어드민 Razor Pages 전환 로드맵 이 문서는 고객관리 어드민을 `ASP.NET Core 10 + Razor Pages + Dapper + PostgreSQL 18.4 + Flyway + Cookie Authentication + FluentValidation + Tabler UI + Minimal TypeScript` 기준으로 하네스하기 위한 실행 문서다. ## 목표 - 서버 렌더링 중심의 단순한 어드민 구조로 정리한다. - 관리자 로그인은 Cookie Authentication 으로 통일한다. - DB 변경은 Flyway migration 으로 관리한다. - PageModel 은 흐름만 담당하고, SQL 은 Repository 또는 Query Class 로 보낸다. - 화면은 Tabler UI 기반 공통 Partial 과 최소한의 ViewComponent 로 정리한다. ## 범위 - 포함 - 관리자 로그인 - 관리자 공통 레이아웃 - 고객 CRUD - 관리자 유저 관리 - 대시보드 - 검증/테스트 하네스 - 제외 - SPA 라우팅 - React/Vue/Angular - JWT 기반 브라우저 로그인 - API-first 어드민 화면 - 과도한 Clean Architecture ## 실행 원칙 - 먼저 문서와 폴더 기준을 고정한다. - 다음으로 인증과 진입점부터 서버 렌더링으로 맞춘다. - 이후 CRUD 화면을 페이지 단위로 옮긴다. - 마지막에 로컬 테스트, 커밋, 푸시를 수행한다. ## 로드맵 ### Phase 0. 기준 고정 - 아키텍처 원칙 문서화 - WBS 상세화 - 어드민 라우트와 공통 컴포넌트 규칙 확정 - 기존 Blazor / API / JWT 경로는 레거시로 분리 ### Phase 1. 인증 전환 - `/admin/login` 을 Razor Pages form 기반으로 유지 - 로그인 성공 시 Cookie Authentication 발급 - `/admin` 하위 페이지에 인증 정책 적용 - Logout 은 쿠키 삭제 기반으로 정리 ### Phase 2. 기본 CRUD 전환 - 고객 목록/상세/등록/수정/삭제 페이지 작성 - Request / Dto 분리 - FluentValidation 적용 - Dapper SQL 을 Repository 로 이동 ### Phase 3. 공통 UI 정리 - `_Layout`, `_Sidebar`, `_Topbar` 정리 - `_ValidationSummary`, `_Pagination`, `_SearchBox`, `_ConfirmModal`, `_StatusBadge`, `_EmptyState` 정리 - 반복 헤더는 ViewComponent 로 정리 ### Phase 4. DB 정합성 - Flyway migration 누락 점검 - 인덱스, 제약, soft delete 정책 정리 - seed data 와 운영 데이터 경계 정리 ### Phase 5. 테스트 및 검증 - 로컬 빌드 통과 - 로컬 테스트 통과 - Playwright 시나리오 통과 - 변경분 커밋 및 푸시 ## WBS | ID | 작업 | 완료 기준 | | --- | --- | --- | | RP-01 | 어드민 아키텍처 문서화 | 본 문서와 하네스 문서가 `docs/INDEX.md`에 연결됨 | | RP-02 | 로그인 쿠키 전환 | `/admin/login` 성공 시 Cookie Auth 가 발급되고 localStorage 토큰 저장이 제거됨 | | RP-03 | 관리자 인증 정책 적용 | `/admin` 하위 페이지가 인증 없이 열리지 않음 | | RP-04 | 공통 레이아웃 정리 | Tabler 기반 공통 레이아웃/partial 기준이 문서화됨 | | RP-05 | 고객 CRUD 설계 | Request/Dto/Validator/Service/Repository 분리가 완료됨 | | RP-06 | Flyway 보강 | 필요한 테이블/인덱스/제약이 migration 으로 관리됨 | | RP-07 | 로컬 테스트 | `dotnet build`, 단위 테스트, Playwright 이 통과함 | | RP-08 | 커밋/푸시 | 변경이 의도된 커밋으로 정리되고 원격에 반영됨 | ## 완료 정의 기능 하나가 완료되려면 아래가 충족되어야 한다. - Razor Page 와 PageModel 이 존재한다. - Request / Dto / Validator 가 분리되어 있다. - Service 가 흐름을 담당한다. - Repository 또는 Query Class 가 Dapper SQL 을 담당한다. - 필요한 경우 Flyway migration 이 추가되어 있다. - Tabler UI 기준으로 화면이 표시된다. - 인증과 권한이 일치한다. - 로컬 빌드와 테스트가 통과한다.