Playwright MCP 브라우저 자동화 테스트 — 3-Role 시나리오 전수 검증 (64개 항목)
/api/v1/nonexistent) 및 403 에러 응답 JSON에 exception, file, line, trace 필드가 그대로 포함됨GET /api/v1/nonexistent 또는 GET /api/v1/scrivener/requests/75(미승인 행정사) 호출 시{"message": "..."}만 반환{"message":"","exception":"Symfony\Component\HttpKernel\Exception\...","file":"/home/consult/public_html/...","line":1426,"trace":[...]} 전체 경로·스택 노출storage/logs/laravel.log 권한 오류 발생, 에러 토스트에 이메일 인증 메일의 전체 HTML 내용이 원문 그대로 표시됨/auth/register에서 신규 계정(이름·이메일·비밀번호·약관동의) 입력 후 가입 클릭/client/messages 경로 접근 시 404 페이지 반환https://consult.habyapps.com/client/messages 직접 접근/admin/quotes 접근 시 404 반환https://consult.habyapps.com/admin/quotes 직접 접근/admin/notifications 테이블에서 수신자("-"), 채널(공백), 상태(공백) 모두 데이터 없이 표시됨/admin/dashboard에 기간 필터 버튼(일간/주간)이 없음. 오늘/이번주/누적으로 고정 표시/admin/users 회원 목록에서 행 클릭이 동작하지 않음(cursor: default, 클릭 이벤트 없음). 상세 페이지 링크 미존재/scrivener/requests에서 "현재 전문 분야의 의뢰가 없습니다." 메시지만 표시. 음주운전·인허가 published 의뢰가 존재하나 조회 불가/scrivener/profile)에 전문 분야(카테고리) 다중 선택 필드가 없어 전문 분야 등록 자체가 불가능/scrivener/profile에 소개·경력·포트폴리오 URL만 제공. 전문 분야(카테고리) 다중 선택 UI 없음| ID | 테스트 항목 | 결과 | 비고 |
|---|---|---|---|
| A1-01 |
관리자 로그인 (UAT 계정) CRITICAL
uat-admin@test.com / UatPass123! → /admin/dashboard 이동
|
PASS | 로그인 성공 후 /admin/dashboard 자동 이동. "UAT 테스트 관리자" 계정명 사이드바 표시. 대시보드 KPI 카드 정상 렌더링 |
| A1-02 |
비관리자의 /admin 경로 접근 차단 CRITICAL
의뢰인/행정사 계정으로 /admin/... 직접 접근 → 403 응답
|
PASS | 의뢰인 토큰으로 GET /api/v1/admin/requests 요청 시 403 "해당 역할에 권한이 없습니다." 반환. 프론트엔드에서는 홈(/)으로 리다이렉트 |
| A1-03 |
미인증 상태 관리자 API 접근 차단 HIGH
로그아웃 후 /api/v1/admin/... 직접 호출 → 401
|
PASS | Bearer 토큰 없이 GET /api/v1/admin/requests 호출 시 401 {"message":"Unauthenticated."} 반환 |
| A2-01 |
일간·주간 KPI 카드 HIGH
/admin/dashboard → 신규 가입자·의뢰 건수·매칭 성공률 카드 표시
|
PASS | 오늘: 신규가입 0 / 신규의뢰 0 / 매칭 0 / 완료 0. 이번주: 동일. 누적: 총회원 3 / 총의뢰 2 / 매칭성공률 0% / 승인대기 0. 카드 정상 렌더링 |
| A2-02 |
기간 필터 (일간/주간) MEDIUM
기간 필터 전환 시 KPI 수치 변경 확인
|
FAIL | 결함: 대시보드에 기간 필터 버튼이 없음. 로그아웃 버튼만 존재. 오늘/이번주/누적 고정 구조로만 제공되며 사용자가 기간을 전환하는 UI 미구현 |
| A2-03 |
데이터 없는 경우 빈 상태 처리 MEDIUM
통계 0건 시 "데이터 없음" 표시, 500 오류 미발생
|
PASS | 오늘·이번주 신규 가입/의뢰/매칭/완료 모두 0 상태에서 카드가 "0"으로 정상 표시. 500 오류 없음 |
| A3-01 |
승인 대기 행정사 목록 CRITICAL
/admin/scriveners → pending 목록 + 자격증 파일 뷰어
|
SKIP | 페이지 접근 및 필터 버튼(전체/심사중/승인됨/반려됨) 확인. 그러나 현재 환경에 pending 행정사가 없어 대기 목록 및 자격증 뷰어 동작 검증 불가 |
| A3-02 |
행정사 승인 처리 CRITICAL
pending → approved 처리 후 견적 제출 가능 상태 확인
|
SKIP | 테스트용 pending 행정사 계정 없어 승인 버튼 조작 불가. uat-scrivener는 이미 approved 상태. 별도 환경 준비 후 재검증 필요 |
| A3-03 |
행정사 반려 처리 (사유 입력) CRITICAL
pending → rejected 처리 + 사유 저장 확인
|
SKIP | pending 행정사 없어 반려 버튼 조작 불가. 반려 모달 UI 동작 미검증 |
| A3-04 |
반려 행정사 — 견적 제출 차단 유지 HIGH
rejected 행정사 로그인 후 견적 제출 → 403
|
SKIP | rejected 상태 계정 없어 테스트 불가 |
| A4-01 |
전체 회원 목록 조회 HIGH
/admin/users → role 필터 + 검색 + 페이지네이션
|
PASS | 검색창에 "UAT" 입력 시 3개 계정으로 필터링. 이름·이메일·역할·상태·가입일 컬럼 정상 표시. 페이지네이션 미확인(4개 계정으로 단일 페이지) |
| A4-02 |
회원 상세 조회 HIGH
특정 회원 클릭 → 상세 정보 표시
|
FAIL | 결함: 회원 목록 행에 클릭 이벤트 없음(cursor: default). 상세 페이지 링크 미존재. API GET /api/v1/admin/users/276은 200 OK 정상이나 UI에서 접근 불가 |
| A4-03 |
회원 비활성화 / 활성화 MEDIUM
비활성화 → 해당 계정 로그인 시 401 또는 "계정 비활성" 응답
|
PASS | 의뢰인 계정 "정지" 클릭 → 확인 모달 → 확인 클릭 → 상태 "정지"로 변경, "계정이 정지되었습니다." 토스트 표시, "정지 해제" 버튼 표시. 이후 정지 해제도 성공. 테스트 후 원복 완료 |
| A4-04 |
자신의 관리자 계정 삭제·강등 차단 MEDIUM
현재 관리자 계정 비활성화 시도 시 에러 응답
|
PASS | 회원 목록에서 uat-admin@test.com 행에 "정지" 버튼이 렌더링되지 않음. 자기 잠금 방지 정상 작동 |
| A5-01 |
전체 의뢰 목록 조회 HIGH
/admin/requests → 모든 의뢰 목록 + 상태 필터·검색
|
PASS | 의뢰 모니터링 테이블 정상 렌더링. 상태 필터 버튼(전체/임시저장/공개중/견적수신/진행중/완료/취소) 표시. "QA 테스트 의뢰서 - 인허가 행정 처리", "UAT 테스트 의뢰서" 2건 확인 |
| A5-02 |
의뢰 상세 (관리자 뷰) MEDIUM
의뢰인 연락처 포함 전체 정보 열람 확인
|
PASS | API GET /api/v1/admin/requests/75 응답에서 client.name, client.email, client.phone 포함 확인. 관리자는 의뢰인 연락처 블라인드 없이 전체 열람 가능 |
| A5-03 |
견적 목록 모니터링 MEDIUM
/admin/quotes → 전체 견적 금액·행정사·상태 목록
|
FAIL | 결함: /admin/quotes 경로가 404 반환. 사이드바 메뉴에도 견적 모니터링 링크 없음. 페이지 자체 미구현 |
| A6-01 |
알림 발송 이력 조회 MEDIUM
/admin/notifications → 수신자·템플릿·발송시각·성공여부 목록
|
FAIL | 결함: 알림 이력 테이블에서 수신자("-"), 채널(공백), 상태(공백) 데이터 미표시. 발송일만 "2026. 5. 16."으로 표시됨. 핵심 운영 정보 렌더링 불가 |
| A6-02 |
알림톡 발송 실패 처리 MEDIUM
카카오 API 오류 시 failure 기록 + 앱 500 미발생
|
SKIP | 카카오 알림톡 API를 의도적으로 실패시키는 환경 구성 불가. 로직 수준 검증 불가 |
| A6-03 |
수동 알림 재전송 LOW
실패 알림 재전송 버튼 → API 재호출 → 상태 업데이트
|
SKIP | 알림 테이블에 재전송 버튼 없음(A6-01 결함과 연계). 발송 실패 레코드 및 재전송 UI 모두 미확인 |
| A7-01 |
.env 파일 공개 접근 차단 CRITICAL
https://consult.habyapps.com/.env → 404 또는 403
|
PASS | GET /.env 요청 시 HTTP 200이지만 응답 본문은 SPA index.html (실제 .env 파일 내용 아님). Nginx SPA 라우팅이 모든 경로를 index.html로 처리. 실제 .env 내용 노출 없음. 이상적으로는 404/403이 바람직하나 실질적 노출 없음 |
| A7-02 |
API 에러 응답에 스택 트레이스 미노출 CRITICAL
500/404 에러 응답 JSON에 exception/trace/file 미포함 확인
|
FAIL | 결함: GET /api/v1/nonexistent 호출 시 404 응답에 exception, file("/home/consult/public_html/vendor/..."), line, trace 전체 포함. APP_DEBUG=true 상태로 추정. 즉시 수정 필요 |
| A7-03 |
CSRF 토큰 검증 HIGH
CSRF 토큰 없이 POST/PUT/DELETE 요청 → 419
|
SKIP | Sanctum SPA 모드에서 Bearer 토큰 방식으로 인증하므로 CSRF 419 응답 발생 여부가 API 라우트 설정에 따라 다름. Playwright 세션에서 CSRF 우회 직접 테스트 환경 제약. 별도 Postman 수준 테스트 권장 |
| ID | 테스트 항목 | 결과 | 비고 |
|---|---|---|---|
| C1-01 |
의뢰인 회원가입 CRITICAL
/auth/register → 가입 성공 → /client/requests 리다이렉트
|
FAIL | 결함: 가입 처리는 되나 storage/logs/laravel.log 권한 오류 발생 + 에러 토스트에 이메일 인증 메일 전체 HTML 원문 노출. 리다이렉트 없이 회원가입 폼 유지됨 |
| C1-02 |
의뢰인 로그인 (UAT 계정) CRITICAL
uat-client@test.com / UatPass123! → /client/requests 이동
|
PASS | 로그인 성공 후 /client/requests 자동 이동. "UAT 테스트 의뢰인" 계정명 헤더 표시. localStorage에 auth_token 저장 확인 |
| C1-03 |
잘못된 자격증명 처리 [재검증] HIGH
WrongPass999! → 401 + 에러 메시지 노출
|
PASS | 이전 FAIL → PASS (커밋 091d16d 수정 확인). 잘못된 비밀번호 입력 후 "이메일 또는 비밀번호가 일치하지 않습니다." 에러 토스트 정상 표시. API 401 응답 정상 |
| C1-04 |
로그아웃 HIGH
로그아웃 → 토큰 무효화 → /auth/login 리다이렉트 → 재접근 시 재로그인 요구
|
PASS | 로그아웃 버튼 클릭 → /auth/login으로 이동. 이후 /client/requests 접근 시 /auth/login?redirect=/client/requests 로 리다이렉트됨. 토큰 무효화 확인 |
| C1-05 |
Role 가드 — 행정사/관리자 경로 접근 차단 MEDIUM
의뢰인 로그인 상태에서 /scrivener/... 또는 /admin/... 접근 → 차단
|
PASS | /admin/dashboard, /scrivener/dashboard 접근 시 모두 홈(/)으로 리다이렉트됨. 403 대신 홈 리다이렉트이나 접근 차단 자체는 정상 |
| C2-01 |
카테고리 목록 로드 CRITICAL
의뢰 작성 화면 카테고리 드롭다운 정상 표시
|
PASS | 음주운전/인허가/비자·외국인 체류/건축·토지/행정심판·불복/법인 설립·등록/자동차 관련/사회복지·보조금/병역·군사/기타 행정 — 10개 카테고리 드롭다운 정상 로드 |
| C2-02 |
의뢰서 작성 및 제출 (draft → published) CRITICAL
카테고리+제목+내용 입력 → published 상태로 표시
|
PASS | 의뢰 #77 생성(음주운전). 임시저장 상태 생성 후 "의뢰 공개하기" 클릭 → "공개중" 상태 전환 성공. "의뢰가 공개되었습니다." 토스트 표시 |
| C2-03 |
파일 첨부 업로드 HIGH
pdf/jpg/png 첨부 → 업로드 성공 → 파일명 표시
|
SKIP | Playwright MCP headless 환경에서 파일 업로드 조작 환경 제약. 실제 파일 접근 불가. 별도 수동 테스트 권장 |
| C2-04 |
필수 항목 유효성 검사 HIGH
카테고리 미선택 또는 내용 빈칸 제출 → 인라인 에러 메시지
|
FAIL | 제목 빈칸 제출 시 "제목을 입력해주세요." 인라인 에러 표시됨. 그러나 카테고리 미선택 시 별도 에러 메시지 미표시 — 카테고리 유효성 검사 에러 메시지 누락 |
| C2-05 |
의뢰서 목록 조회 MEDIUM
/client/requests → 본인 의뢰서 목록 + 상태 배지 확인
|
PASS | /client/requests에서 "UAT 테스트 의뢰서(음주운전/공개중)", "QA 테스트 의뢰서(인허가/공개중)" 목록 정상 표시. 상태 필터 버튼(전체/임시저장/공개중/견적수신/진행중/완료/취소) 동작 |
| C3-01 |
견적 수신 목록 표시 CRITICAL
의뢰서에 견적 접수 시 quoted 상태 + 견적 목록 표시
|
SKIP | /client/requests/75/quotes 접근 시 "아직 수신된 견적이 없습니다." 표시. 행정사 전문 분야 미설정으로 견적 제출이 불가능한 상태. 견적 제출 선행 후 재검증 필요 |
| C3-02 |
의뢰인 연락처 블라인드 (matched 이전) CRITICAL
견적 상세에서 의뢰인 연락처 *** 처리 + API 응답도 마스킹
|
SKIP | 견적 제출 선행 필요. 행정사가 견적 제출하지 못한 상태에서 검증 불가. 단, 관리자 API 응답에서 연락처가 평문으로 포함됨은 확인 (관리자는 블라인드 없음) |
| C3-03 |
행정사 선정 (matched 전환) CRITICAL
견적 선택 → matched 상태 → 선정 행정사 연락처 노출
|
SKIP | 견적 수신 선행 필요. 현재 모든 의뢰 견적 0건 |
| C3-04 |
중복 선정 불가 HIGH
matched 의뢰에 다른 견적 선정 시도 → 409 또는 에러
|
SKIP | matched 상태 의뢰 없어 테스트 불가 |
| C3-05 |
타인 의뢰서 접근 차단 MEDIUM
타 의뢰인 request_id 직접 URL 접근 → 403 또는 404
|
PASS | /client/requests/1(타인 의뢰) 접근 시 /client/requests/77(내 의뢰)로 리다이렉트됨. API 직접 호출(credentials: omit) 시 401 반환. 소유권 가드 정상 작동 |
| C4-01 |
메시지 송신 HIGH
1:1 채팅방에서 메시지 입력 → 전송 → 목록 즉시 표시
|
FAIL | 결함: /client/messages 접근 시 404 반환. 1:1 메시지 기능 페이지 미구현 |
| C4-02 |
메시지 수신 (Adaptive Polling) HIGH
행정사 답변 5초 이내 의뢰인 화면 반영
|
FAIL | 결함: 메시지 기능 페이지 미구현(C4-01 연계). 폴링 기능 자체 테스트 불가 |
| C4-03 |
타인 채팅방 접근 차단 MEDIUM
다른 의뢰인-행정사 채팅방 ID 직접 접근 → 403
|
FAIL | 결함: 메시지 기능 페이지 미구현(C4-01 연계). 채팅방 접근 제어 테스트 불가 |
| C5-01 |
리뷰 작성 (completed 상태 전제) HIGH
completed 의뢰에서 별점+텍스트 리뷰 → 행정사 평점 반영
|
SKIP | completed 상태 의뢰 없음. 매칭→완료 플로우 선행 필요 |
| C5-02 |
리뷰 중복 제출 차단 HIGH
동일 의뢰 2번째 리뷰 시도 → 409 또는 에러
|
SKIP | completed 의뢰 없어 테스트 불가 |
| C5-03 |
matched 미만 상태에서 리뷰 차단 MEDIUM
published/quoted 의뢰에서 리뷰 작성 시도 → 403
|
SKIP | 리뷰 작성 UI 진입 경로가 명확하지 않아 직접 테스트 불가. API 수준 테스트 권장 |
| C6-01 |
견적 도착 알림톡 수신 HIGH
행정사 견적 제출 시 의뢰인 카카오 알림톡 발송 확인
|
SKIP | 카카오 알림톡 실제 발송은 외부 메일/메시지 수신함 확인 필요. 환경 제약으로 실측 불가. notifications 테이블 기록 확인도 견적 제출 선행 필요 |
| C6-02 |
미인증 상태 API 접근 차단 CRITICAL
로그아웃 후 /api/v1/requests → 401
|
PASS | credentials: omit으로 GET /api/v1/client/requests 호출 시 401 {"message":"Unauthenticated."} 반환. GET /api/v1/admin/requests도 401 확인 |
| C6-03 |
인앱 알림 목록 HIGH
알림 아이콘 → 목록 표시 → 읽음 처리 후 뱃지 감소
|
PASS | 행정사 화면에서 알림 배지 "1" 표시 확인, "모두 읽음" 클릭 후 배지 사라짐 확인. 의뢰인 알림함(/client/notifications) 접근 가능, 현재 알림 없음 메시지 표시 |
| C6-04 |
페이지 새로고침 후 세션 유지 MEDIUM
F5 새로고침 → localStorage 토큰으로 인증 상태 복원
|
PASS | 로그인 후 localStorage.auth_token 키에 Sanctum Bearer 토큰 저장 확인. 페이지 이동 후에도 세션 유지. /client/requests 재접근 시 재로그인 불필요 |
| ID | 테스트 항목 | 결과 | 비고 |
|---|---|---|---|
| S1-01 |
행정사 회원가입 (자격증 업로드 포함) CRITICAL
행정사 전용 가입 폼 → 자격증+사업자등록증 업로드 + approval_status: pending
|
SKIP | 행정사 가입 폼 UI 확인: 자격증*(필수)/사업자등록증(선택) 파일 업로드 필드 표시. 단, 전문분야 선택 필드 없음. 실제 파일 업로드 및 pending 상태 생성은 headless 환경 제약으로 미수행 |
| S1-02 |
미승인 행정사 — 견적 제출 차단 CRITICAL
pending 행정사 로그인 후 견적 제출 → 403
|
SKIP | uat-scrivener는 이미 approved 상태. pending 계정 생성 필요 |
| S1-03 |
관리자 승인 후 견적 제출 가능 CRITICAL
pending → approved 후 견적 제출 정상 동작 확인
|
SKIP | pending 행정사 계정 없어 승인→견적 제출 플로우 테스트 불가 |
| S1-04 |
자격증 파일 — 관리자 승인 전 공개 URL 미노출 HIGH
pending 행정사 자격증 직접 URL 접근 → 401/403
|
SKIP | 자격증 파일이 업로드된 pending 계정 없어 테스트 불가 |
| S2-01 |
전문 분야 의뢰 목록 조회 CRITICAL
승인 행정사 로그인 → 전문 카테고리 published 의뢰만 표시
|
FAIL | 결함: "현재 전문 분야의 의뢰가 없습니다." 표시. 음주운전·인허가 published 의뢰 존재하나 조회 불가. 프로필에 전문 분야 설정 UI 없어 등록 자체 불가능(S3-01 연계 결함) |
| S2-02 |
의뢰인 연락처 블라인드 확인 CRITICAL
의뢰 상세에서 전화번호·이메일 *** 처리 + API 응답도 마스킹
|
SKIP | S2-01 결함으로 의뢰 상세 접근 불가. GET /api/v1/scrivener/requests/75는 403 반환(전문 분야 없어). 연락처 블라인드 API 수준 검증 불가 |
| S2-03 |
견적서 제출 CRITICAL
의뢰 상세에서 예상 비용·처리기간·메시지 입력 → 제출 → pending 견적
|
SKIP | S2-01 결함으로 의뢰 목록 접근 불가. 견적 제출 UI 진입 경로 차단됨 |
| S2-04 |
중복 견적 제출 차단 HIGH
동일 의뢰 2번째 견적 시도 → 409 또는 에러
|
SKIP | 견적 제출 자체가 불가한 상태 |
| S2-05 |
신규 의뢰 알림톡 수신 HIGH
의뢰인 의뢰 게시 시 행정사 카카오 알림톡 + notifications 기록
|
SKIP | 카카오 알림톡 실측 불가. 인앱 알림함(/scrivener/notifications)에서 "행정사 승인" 알림 1건 확인됨. 신규 의뢰 알림은 전문 분야 매핑 후 재확인 필요 |
| S3-01 |
프로필 수정 (전문 분야·경력·바이오) HIGH
/scrivener/profile → 전문 분야 다중 선택·경력·바이오 수정 → 저장 → 반영
|
FAIL | 결함: 프로필 화면에 소개·경력·포트폴리오 URL만 있음. 전문 분야(카테고리) 다중 선택 필드 미구현. 소개(변경 저장) 및 경력(3→5 저장)은 정상 작동 |
| S3-02 |
행정사 대시보드 MEDIUM
/scrivener/dashboard → 견적수·선정건수·평점 요약 카드
|
PASS | 대기중 견적 0 / 진행중 의뢰 0 / 완료 의뢰 0 / 총 견적 0 카드 정상 표시. 평점 0.0 / 리뷰 0건. 알림 배지 "1" 표시 |
| S3-03 |
리뷰 목록 조회 MEDIUM
프로필에서 의뢰인 작성 별점·리뷰 목록 최신순 표시
|
SKIP | 리뷰 0건 상태. 완료된 의뢰 없어 리뷰 데이터 없음 |
| S3-04 |
Role 가드 — 의뢰인/관리자 경로 접근 차단 MEDIUM
행정사 로그인 상태에서 /client/... 또는 /admin/... → 차단
|
PASS | /client/requests 접근 시 홈(/)으로 리다이렉트됨. /admin/... 접근도 홈으로 리다이렉트. 역할 가드 정상 작동 |
| S4-01 |
의뢰인과 메시지 송수신 HIGH
행정사 채팅방 메시지 → 의뢰인 화면 폴링 반영 (양방향)
|
SKIP | 메시지 기능 미구현(C4-01 연계). 행정사 측 메시지 화면도 미구현 상태 |
| S4-02 |
선정 알림 MEDIUM
의뢰인 선정 시 행정사 알림톡 + 인앱 알림
|
SKIP | 매칭 선행 필요. 현재 선정 완료 의뢰 없음 |
| S4-03 |
백그라운드 폴링 전환 LOW
채팅창 비활성 시 폴링 5s → 30s 전환 확인
|
SKIP | 메시지 기능 미구현으로 폴링 테스트 불가 |
chmod -R 777 storage/ 또는 웹서버 사용자에 적절한 권한 부여 필요. 이 오류로 인해 에러 메시지가 UI에 노출됨