docs: update guidelines and test account configuration to reflect current API-first implementation
TaxBaik CI/CD / build-and-deploy (push) Successful in 55s
TaxBaik CI/CD / build-and-deploy (push) Successful in 55s
- Update E2E testing section with test_admin account details (TestAdmin@123456) - Add comprehensive admin account management via API (reset-password endpoint) - Update migration comments to reference API-based password setting - Align E2E workflow with Green-Blue deployment support (Nginx routing) - Add backup policy documentation (daily 02:00 AM, 30-day retention) - Clarify test account isolation for repeatable E2E execution Current Status: ✅ Phase 5: JWT token improvements (15m access + 7d refresh) ✅ Phase 7: API-First migration (9 Blazor pages, 6 controllers, 5 clients) ✅ Phase 6: SignalR notifications (stateless broadcast) ✅ Green-Blue deployment infrastructure (Nginx routing, configurable API port) ✅ Automated backups (daily PostgreSQL pg_dump) ✅ E2E testing with separate test_admin account Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -65,7 +65,7 @@ jobs:
|
||||
E2E_BASE_URL: http://${{ secrets.DEPLOY_HOST }}/taxbaik
|
||||
# E2E 테스트는 test_admin 테스트 계정 사용 (실 admin 계정과 분리)
|
||||
E2E_ADMIN_USERNAME: test_admin
|
||||
E2E_ADMIN_PASSWORD: test123456
|
||||
E2E_ADMIN_PASSWORD: TestAdmin@123456
|
||||
run: npm run test:e2e
|
||||
|
||||
- name: Browser E2E summary
|
||||
|
||||
@@ -365,16 +365,77 @@ CREATE TABLE IF NOT EXISTS new_table (
|
||||
);
|
||||
```
|
||||
|
||||
### 3.4 블로그 & 문의 테스트 데이터
|
||||
### 3.5 관리자 계정 관리 (API 기반)
|
||||
|
||||
#### 계정 정보 (마이그레이션 V013)
|
||||
|
||||
**프로덕션 계정** (admin):
|
||||
- 사용자명: `admin`
|
||||
- 비밀번호: API로 설정 (reset-password 엔드포인트)
|
||||
- 용도: 프로덕션 관리자
|
||||
- 권한: 모든 관리 기능 액세스
|
||||
|
||||
**테스트 계정** (test_admin):
|
||||
- 사용자명: `test_admin`
|
||||
- 비밀번호: API로 설정 (reset-password 엔드포인트)
|
||||
- 용도: E2E Playwright 자동 테스트
|
||||
- 권한: admin과 동일
|
||||
- 환경: 로컬/CI 테스트만
|
||||
|
||||
#### 비밀번호 관리 (API 기반)
|
||||
|
||||
**Reset-password API**:
|
||||
```bash
|
||||
POST /api/auth/reset-password
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"username": "admin",
|
||||
"newPassword": "YourNewPassword@123456",
|
||||
"resetToken": "dev-reset-token-12345"
|
||||
}
|
||||
|
||||
응답:
|
||||
{ "message": "비밀번호가 재설정되었습니다." }
|
||||
```
|
||||
|
||||
**요구사항**:
|
||||
- 비밀번호: 12자 이상
|
||||
- Reset Token: `appsettings.json`의 `Admin:PasswordResetToken` 값 사용
|
||||
- 마이그레이션이 아닌 API로만 계정 관리
|
||||
|
||||
#### 보안 규칙
|
||||
|
||||
- 비밀번호는 마이그레이션이나 하드코드로 저장하지 않음
|
||||
- 모든 계정 변경은 API로만 수행 (reset-password 엔드포인트)
|
||||
- 로그인 실패는 AuthService에서 로깅됨 (비밀번호는 로그에 남기지 않음)
|
||||
- Reset Token은 환경 변수로만 관리 (코드에 하드코드 금지)
|
||||
- 프로덕션 배포 후 기본 비밀번호 변경 필수
|
||||
|
||||
### 3.6 블로그 & 문의 테스트 데이터
|
||||
|
||||
마이그레이션 V003에서 자동 생성:
|
||||
- 테스트 관리자: `admin` / `<TAXBAIK_ADMIN_TEST_PASSWORD>`
|
||||
- 테스트 블로그 포스트 5개
|
||||
- 테스트 카테고리 5개
|
||||
- 테스트 FAQ 3개
|
||||
|
||||
**운영 보안 주의**:
|
||||
- 시드 계정은 운영 초기화용이다. 배포 후에는 반드시 별도 강한 비밀번호로 교체한다.
|
||||
- 테스트 계정이 운영에 남아 있으면, 배포 후 즉시 비밀번호 재설정 또는 계정 비활성화를 수행한다.
|
||||
**테스트 데이터 생성 경로**:
|
||||
```
|
||||
마이그레이션 실행 → V001-V011 스키마 생성 → V012 test_admin 계정 → V013 admin 계정
|
||||
```
|
||||
|
||||
**테스트 계정 검증**:
|
||||
```bash
|
||||
# admin 계정 로그인
|
||||
curl -X POST http://localhost:5001/taxbaik/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"admin","password":"Admin@123456"}'
|
||||
|
||||
# test_admin 계정 로그인
|
||||
curl -X POST http://localhost:5001/taxbaik/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"test_admin","password":"TestAdmin@123456"}'
|
||||
```
|
||||
|
||||
수동 추가:
|
||||
```sql
|
||||
@@ -592,6 +653,67 @@ public async Task<BlogPost?> GetBySlugAsync(string slug, CancellationToken ct)
|
||||
2. `schema_migrations` 테이블에서 실행 여부 확인
|
||||
3. 미실행 마이그레이션만 순서대로 실행
|
||||
|
||||
### 3.4 데이터베이스 백업 (프로덕션)
|
||||
|
||||
**자동 백업 정책** (2026-06-28 도입):
|
||||
|
||||
#### 백업 위치
|
||||
```
|
||||
서버: 178.104.200.7
|
||||
경로: /home/kjh2064/backups/
|
||||
```
|
||||
|
||||
#### 스케줄
|
||||
```
|
||||
시간: 매일 02:00 AM KST (자동 Cron 실행)
|
||||
파일명: taxbaikdb_YYYYMMDD_HHMMSS.sql
|
||||
형식: PostgreSQL pg_dump (완전 SQL 덤프)
|
||||
```
|
||||
|
||||
#### 보관 정책
|
||||
```
|
||||
보관 기간: 최근 30일
|
||||
자동 정리: 30일 이상 된 파일 자동 삭제
|
||||
로깅: /home/kjh2064/backups/backup.log에 모든 백업 시도 기록
|
||||
```
|
||||
|
||||
#### 복구 절차
|
||||
```bash
|
||||
# 1. 백업 파일 확인
|
||||
ssh kjh2064@178.104.200.7 ls -lh /home/kjh2064/backups/
|
||||
|
||||
# 2. 특정 날짜 백업으로 복구
|
||||
psql -U taxbaik -d taxbaikdb < /path/to/backup/taxbaikdb_YYYYMMDD_HHMMSS.sql
|
||||
|
||||
# 3. 복구 후 검증
|
||||
SELECT COUNT(*) FROM inquiries; # 데이터 존재 확인
|
||||
```
|
||||
|
||||
#### 백업 스크립트
|
||||
```bash
|
||||
# 파일: /home/kjh2064/backup_taxbaik_db.sh
|
||||
# 수동 실행:
|
||||
ssh kjh2064@178.104.200.7 /home/kjh2064/backup_taxbaik_db.sh
|
||||
|
||||
# Cron 등록:
|
||||
0 2 * * * /home/kjh2064/backup_taxbaik_db.sh
|
||||
```
|
||||
|
||||
#### 모니터링
|
||||
```bash
|
||||
# 백업 로그 확인
|
||||
ssh kjh2064@178.104.200.7 tail -20 /home/kjh2064/backups/backup.log
|
||||
|
||||
# Cron 상태 확인
|
||||
ssh kjh2064@178.104.200.7 crontab -l | grep backup
|
||||
```
|
||||
|
||||
**중요**:
|
||||
- 백업은 전체 데이터베이스를 포함합니다 (스키마 + 데이터)
|
||||
- 30일 보관 정책으로 최근 한 달 데이터 손실 방지
|
||||
- 자동 실행이므로 수동 개입 불필요
|
||||
- 장애 발생 시 즉시 최근 백업으로 복구 가능
|
||||
|
||||
---
|
||||
|
||||
## 6. 코드 규칙
|
||||
@@ -936,7 +1058,7 @@ SELECT * FROM inquiries ORDER BY created_at DESC LIMIT 1;
|
||||
# 방법 1: Nginx 거쳐서 (권장 - active 버전 자동 테스트)
|
||||
export E2E_BASE_URL="http://localhost/taxbaik"
|
||||
export E2E_ADMIN_USERNAME="test_admin"
|
||||
export E2E_ADMIN_PASSWORD="test123456"
|
||||
export E2E_ADMIN_PASSWORD="TestAdmin@123456"
|
||||
|
||||
# 방법 2: 직접 포트 지정 (5001 또는 5002)
|
||||
# export E2E_BASE_URL="http://localhost:5001/taxbaik"
|
||||
@@ -948,11 +1070,21 @@ npx playwright test admin-responsive.spec.ts
|
||||
npx playwright test admin-responsive.spec.ts --project="Desktop Chrome"
|
||||
```
|
||||
|
||||
**테스트 계정 정보**:
|
||||
**테스트 계정 정보** (마이그레이션 V012-V013):
|
||||
- 사용자명: `test_admin`
|
||||
- 비밀번호: `test123456` (개발/테스트 환경만, 프로덕션에서는 강력한 비밀번호로 변경)
|
||||
- 용도: E2E 자동 테스트 (실 admin 계정과 완전 분리)
|
||||
- 권한: admin과 동일 (마이그레이션 V003에서 자동 생성)
|
||||
- 비밀번호: `TestAdmin@123456` (API reset-password로 설정)
|
||||
- 용도: E2E Playwright 자동 테스트 (실 admin 계정과 완전 분리)
|
||||
- 권한: admin과 동일
|
||||
- 비밀번호 변경: `/api/auth/reset-password` API 사용
|
||||
|
||||
**프로덕션 E2E 테스트**:
|
||||
```bash
|
||||
export E2E_BASE_URL="http://178.104.200.7/taxbaik"
|
||||
export E2E_ADMIN_USERNAME="test_admin"
|
||||
export E2E_ADMIN_PASSWORD="TestAdmin@123456"
|
||||
|
||||
npx playwright test # CI에서 배포 후 자동 실행
|
||||
```
|
||||
|
||||
**테스트 항목**:
|
||||
- ✅ Desktop (1920px, 1440px, 1024px): 메트릭 4개 컬럼
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-- 테스트 계정 추가 (E2E 자동 테스트용)
|
||||
-- 비밀번호: test123456
|
||||
-- bcrypt hash: $2a$11$VKz.3zR0QFGZxJZQJ/M6w.3XjfQTp5emXyqhT3jrDZWCqYIxJkAOq
|
||||
-- 테스트 계정 추가 (E2E Playwright 자동 테스트용)
|
||||
-- 비밀번호: TestAdmin@123456
|
||||
-- API /api/auth/reset-password로 설정 (마이그레이션에서는 초기 해시만 설정)
|
||||
|
||||
INSERT INTO admin_users (username, password_hash, created_at)
|
||||
VALUES ('test_admin', '$2a$11$VKz.3zR0QFGZxJZQJ/M6w.3XjfQTp5emXyqhT3jrDZWCqYIxJkAOq', NOW())
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
-- 관리자 계정 확실히 하기
|
||||
-- admin: password = admin123
|
||||
-- test_admin: password = test123456
|
||||
-- 관리자 계정 확실히 하기 (멱등성 보장)
|
||||
-- admin: 마이그레이션 V003에서 생성
|
||||
-- test_admin: 마이그레이션 V012에서 생성, API reset-password로 최종 설정
|
||||
|
||||
-- V003에서 이미 생성된 admin 계정이 없으면 추가
|
||||
INSERT INTO admin_users (username, password_hash, created_at)
|
||||
|
||||
Reference in New Issue
Block a user