Refactor admin login to cookie auth
TaxBaik CI/CD / build-and-deploy (push) Failing after 2m23s

This commit is contained in:
2026-07-09 11:07:09 +09:00
parent 88c1d835b5
commit 0545964468
7 changed files with 177 additions and 54 deletions
+104
View File
@@ -0,0 +1,104 @@
# 고객관리 어드민 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 기준으로 화면이 표시된다.
- 인증과 권한이 일치한다.
- 로컬 빌드와 테스트가 통과한다.
+4 -3
View File
@@ -7,6 +7,7 @@
| 문서 | 용도 | 변경 조건 |
| --- | --- | --- |
| [ENGINEERING_HARNESS.md](./ENGINEERING_HARNESS.md) | 아키텍처, 코드 품질, 배포, 데이터 정합성 하네스 | 방향성 변경 또는 반복 위반 발견 |
| [ADMIN_RAZORPAGES_ROADMAP.md](./ADMIN_RAZORPAGES_ROADMAP.md) | 고객관리 어드민 Razor Pages 전환 로드맵과 WBS | 어드민 인증/레이아웃/CRUD 전환 작업 변경 |
| [STACK_TEMPLATE_WBS.md](./STACK_TEMPLATE_WBS.md) | MudBlazor + ASP.NET Core 10 + Dapper + PostgreSQL 18.4 + API-first + SSR/Interactive render mode 기준 템플릿, 로드맵, WBS | 새 스택 채택 또는 렌더/인증 기준 변경 |
| [DOUZONE_UX_GUIDE.md](./DOUZONE_UX_GUIDE.md) | 더존식 어드민 UX 원칙, 템플릿, 컴포넌트, 서빙 규칙 | 화면 패턴 변경 또는 신규 템플릿 추가 |
| [OPS_LOG_DIAGNOSTICS_ROADMAP.md](./OPS_LOG_DIAGNOSTICS_ROADMAP.md) | 관리자 대시보드/클라이언트 로그 진단 로드맵 | 로그 진단 흐름 또는 관측성 작업 변경 |
@@ -20,9 +21,9 @@
| 영역 | 라우트/파일 | 기준 |
| --- | --- | --- |
| Public Home/Blog/Contact | `/`, `/blog`, `/contact` | 서버 사이드 렌더링, SEO 우선, WASM 의존 금지 |
| Admin Blog | `/admin/blog`, `/admin/blog/create`, `/admin/blog/{id}/edit` | 클라이언트 사이드 Blazor WebAssembly, API-first 클라이언트, JS 최소화 |
| Admin Inquiry | `/admin/inquiries`, `/admin/inquiries/create`, `/admin/inquiries/{id}/edit` | 클라이언트 사이드 Blazor WebAssembly, 공개 접수/관리자 등록/상태 변경 분리 |
| Public API | `/api/*` | JWT 인증, ProblemDetails 오류, DTO 입출력 |
| Admin Blog | `/admin/blog`, `/admin/blog/create`, `/admin/blog/{id}/edit` | 현행 Blazor/Web API, 전환 대상 |
| Admin Inquiry | `/admin/inquiries`, `/admin/inquiries/create`, `/admin/inquiries/{id}/edit` | 현행 Blazor/Web API 경로, 전환 대상 |
| Public API | `/api/*` | 현행 JWT 경로, 브라우저 어드민과 분리 |
| CI/CD | `.gitea/workflows/deploy.yml`, `.gitea/workflows/browser-e2e.yml` | 수동 배포 금지, 배포본 E2E 통과 후 완료 |
| Smoke | `scripts/taxbaik-smoke.sh` | 루트는 공용 홈, `/admin/login` 은 관리자 화면이어야 함 |