TL;DR — 2026 업계 합의는 "폴더 = 도메인(정본 계층 1개) / 태그 = 카테고리·우선순위(교차 분류)" 이중 모델.
현 구조는 카테고리-우선(critical/<domain>/)이라 역방향 — sequences 4개 폴더 분산, tagTest 사용률 5%가 그 부작용.
도메인-우선 features/ 트리로 뒤집고 카테고리는 태그 + grep으로 이전.
1. 리서치 — 공통 합의 패턴 Top 5
Playwright 공식 문서·팀 블로그, TestRail / Xray / Allure TestOps / Qase, ReportPortal docs, 커뮤니티(2025–2026) 교차 검증 결과.
# 합의 패턴 근거
1 폴더 = 도메인/feature 1계층, 태그 = 교차 분류 Playwright 팀 공식 "test type 말고 feature로 조직하라" 명시. Xray(Repository+Sets)·Allure(Behaviors+Suites)도 동일 이중 모델
2 smoke/ 폴더 금지 → @smoke 태그 + --grep/projects한 테스트가 여러 실행 세트에 속해야 하므로
3 태그 taxonomy 6~12개 상한 + 문서화 과다·비일관 태깅이 양대 실패 모드
4 E2E는 critical journey만 얇게 (trophy/honeycomb) 분류 단위 = 시나리오, 전수 회귀는 하위 레이어로
5 리포팅 분류는 태그/attribute가 SSOT RP Component Health Check = attribute 10레벨 드릴다운 (폴더 아님)
2. 진단 — 현 구조의 문제
문제 사례 상태
카테고리-우선 → 도메인 분산 sequences가 sequences/ · sequence-proposal/ · sequences-list/ · sequences-step2/ 4곳 (33 tests) 심각
무소속 파일 tests/admin-recordings-audio-progress.spec.ts (루트), critical/main-menu.spec.ts정리 필요
태그 공백 tagTest 사용 2/39 파일(5%) → RP 필터·위젯 불능 심각
GUIDELINES 드리프트 proposal→sequences/ 매핑 위배 · noauth/billing/iam 규칙 부재 문서 개정
3. 목표 구조 — 도메인-우선 트리
e2e/tests/
├── auth.setup.ts
├── features/ ← 정본 계층: 폴더 = 제품 도메인 (1테스트 1폴더)
│ ├── auth/ signin·signup·login·routes-guard (noauth 4)
│ ├── onboarding/
│ ├── dashboard/
│ ├── leads/ 바이어 관리
│ ├── lead-discovery/ 바이어서치 (+ workspace-isolation)
│ ├── sequences/ ★ 4폴더 통합 → 화면 단위 spec
│ │ ├── list-tree.spec.ts (구 sequences-tree + sequences-list/quality)
│ │ ├── create-tree.spec.ts
│ │ ├── step-editor-a11y.spec.ts (구 sequences-step2)
│ │ └── proposal-tree.spec.ts (구 sequence-proposal 2파일)
│ ├── email-replies/ email-tree · inbox-buckets-tree
│ ├── ai/ ai-copilot + ai-employee 통합
│ ├── billing/ gtm-pack checkout → 여기로
│ ├── settings/ settings + iam + workspace-switch
│ ├── admin/ console-page + recordings(무소속 흡수)
│ ├── content/ help · knowledge-base · campaign-calendar · linkedin-sdr
│ └── platform/ 교차 기능: main-menu · i18n · security · auto-public
├── db/ ← 레이어 예외 (별도 project, UI 없음) — 유지
│ ├── core/ └── aux/
├── exploratory/ ← 비결정적 탐색 (a11y 전수·크롤러) — 유지
├── helpers/ fixtures/
└── GUIDELINES.md
✕ 삭제: tests/smoke/ · tests/critical/ (카테고리 폴더 → 태그로 이전)
4. 태그 taxonomy — 총 10개 (상한 12 이내)
태그 축
축 태그 개수
실행 세트 @smoke @critical @exploratory3
우선순위 @P0 @P1 @P23
특성 @noauth @a11y @flaky @slow4
도메인 폴더 경로에서 자동 도출 (tagTest가 testInfo.file 파싱) — 수동 태깅 0 0
실행 세트 = projects grep
// playwright.config.ts
projects: [
{ name: "smoke",
grep: /@smoke/ },
{ name: "critical",
grep: /@critical/ },
...
]
CI partial 필터는 features/sequences 폴더 경로 그대로 — 도메인-우선이라 detect 정규식이 오히려 단순해짐.
ReportPortal 트리 매핑 (직관성의 핵심)
RP suite 트리 = 파일명 → describe 구조. spec 안 describe를 도메인 화면 — {접근 / 구조 / 액션} 3단 트리로 표준화(현 tree 패턴 유지)
+ 태그를 attribute로 브리지하면 Component Health Check 위젯에서 domain → priority → 실행세트 드릴다운 이 코드 수정 없이 나온다.
5. 마이그레이션 계획 (~2h, git mv 위주)
노드 작업 크기
N1.1*tagTest v2: 폴더→도메인 자동 도출 + {tag} 공식 API + RP attribute 브리지 M
N1.2*git mv로 features/ 재배치 (sequences 4→1 통합, 무소속 2개 수용)M
N1.3playwright.config projects(smoke/critical grep) + npm scripts + CI detect 경로 수정 M
N1.4전 spec 태그 일괄 부여 (39파일 — 도메인 자동 도출 덕에 카테고리·P만 명시) M
N2.1GUIDELINES.md 개정 (이중 모델 규칙 + noauth/billing/iam 명시) S
리스크 & 전제
CI e2e-on-alpha.yml의 partial 경로 정규식과 npm scripts가 폴더 하드코딩 — N1.2와 N1.3은 같은 PR로 원자적 머지 필수 .
RP launch history는 파일 경로 변경으로 1회 끊김 — testCaseId 도입 시점이라 동시 적용 권장.
버전 전제: Playwright 1.60.0 + agent-js-playwright 5.4.1 (2026-06-11 업그레이드 완료, 183 tests 수집 검증).
부록 — 현 인벤토리 요약
카테고리 파일 테스트 비고
critical/ (26개 도메인 폴더) 34 76 page-smoke 9 · tree 패턴 9 · noauth 5
smoke/ 1 1 routes.json 기반 public 라우트 자동
db/ 1 1 FK 무결성 (별도 project)
exploratory/ 1 1 a11y 전수
무소속(루트) 1 1 admin-recordings → features/admin/ 흡수 예정
합계 39 111