QA 테스트 실행 결과

Playwright MCP 브라우저 자동화 테스트 — 3-Role 시나리오 전수 검증 (64개 항목)

테스트 환경: Production (consult.habyapps.com) 실행 도구: Playwright MCP 실행일: 2026-05-17 총 케이스: 64 (Client 25 / Scrivener 16 / Admin 23) 결함: 12건
테스트 요약
64
전체 케이스
24
통과 (PASS)
12
실패 (FAIL)
테스트 환경 정보
대상 URL consult.habyapps.com
실행 도구 Playwright MCP (Claude Code)
테스트 날짜 2026-05-17
브라우저 Chromium (headless)
백엔드 Laravel 11.x / PHP 8.3
인증 방식 Laravel Sanctum (SPA Bearer Token)
이전 결과 대비 14개 → 65개 전수 확장
재검증 항목 C1-03 (커밋 091d16d 수정 확인)
발견된 결함

FAIL — A7-02: API 에러 응답에 스택 트레이스 노출 CRITICAL

FAIL — C1-01: 회원가입 시 로그 파일 권한 오류 및 이메일 내용 UI 노출 CRITICAL

FAIL — C4-01 / C4-02 / C4-03: 1:1 메시지 기능 미구현 HIGH

FAIL — A5-03: /admin/quotes 견적 모니터링 페이지 미구현 MEDIUM

FAIL — A6-01: 알림 발송 이력 핵심 컬럼 데이터 미표시 MEDIUM

FAIL — A2-02: 대시보드 기간 필터(일간/주간 전환) 미구현 MEDIUM

FAIL — A4-02: 회원 상세 조회 UI 미구현 MEDIUM

FAIL — S2-01: 전문 분야 미설정으로 행정사 의뢰 목록 전체 공란 HIGH

FAIL — S3-01: 프로필 전문 분야 다중 선택 필드 미구현 HIGH

FAIL — C2-04: 카테고리 미선택 시 에러 메시지 미표시 MEDIUM

관리자 (Admin) 테스트 결과
🛡️
관리자 (Admin)
uat-admin@test.com — /admin
PASS 11 FAIL 5 SKIP 7
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 수준 테스트 권장
의뢰인 (Client) 테스트 결과
👤
의뢰인 (Client)
uat-client@test.com — /client
PASS 11 FAIL 5 SKIP 9
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 재접근 시 재로그인 불필요
행정사 (Scrivener) 테스트 결과
📋
행정사 (Scrivener)
uat-scrivener@test.com — /scrivener
PASS 2 FAIL 2 SKIP 12
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
메시지 기능 미구현으로 폴링 테스트 불가
추가 관찰 사항 및 환경 제약