Files
sam-docs/frontend/v1/11-browser-navigation-rules.md
유병철 e34796a53f docs: [frontend] 브라우저 네비게이션 규칙 문서 추가
- AI/E2E 자동화 시 URL 추측 금지, 메뉴 클릭 필수 규칙
- .gitignore에 frontend 폴더 추적 허용
- _index.md에 11번 문서 항목 추가
2026-03-10 17:32:05 +09:00

136 lines
4.5 KiB
Markdown

# 11. 브라우저 네비게이션 규칙 (AI/자동화 필수)
> **대상**: AI 에이전트 (Claude, Cursor 등), E2E 테스트 작성자, 브라우저 자동화 개발자
> **버전**: 1.0.0
> **최종 수정**: 2026-03-10
---
## 1. 핵심 원칙
> **URL을 추측하거나 자의적으로 생성하여 주소창에 입력하지 않는다.**
> **반드시 사이드바 메뉴 클릭 또는 앱 내부 라우터(링크/버튼)를 통해서만 페이지를 이동한다.**
### 왜?
SAM ERP는 폐쇄형 시스템으로, 페이지 URL 구조가 외부에 공개되지 않는다.
AI가 URL을 추측하면 존재하지 않는 경로로 이동하여 404가 발생하고,
E2E 테스트에서는 잘못된 URL로 인해 테스트가 실패하거나 의미 없는 결과를 반환한다.
---
## 2. 규칙 상세
### 2.1 페이지 이동
| 상황 | 올바른 방법 | 금지 |
|------|-----------|------|
| 메뉴 페이지 이동 | 사이드바 메뉴 버튼 클릭 | URL 직접 입력 |
| 상세 페이지 이동 | 목록에서 행 클릭 | URL에 ID 직접 조합 |
| 모달/다이얼로그 열기 | 버튼 클릭 | URL 파라미터 추가 |
| 뒤로가기 | 브라우저 뒤로가기 또는 앱 내 버튼 | 이전 URL 추측 입력 |
| 탭 전환 | 탭 버튼 클릭 | URL 해시/쿼리 직접 수정 |
### 2.2 현재 페이지 확인
페이지 이동 전, 반드시 현재 상태를 먼저 확인한다.
```
1. 현재 페이지의 스냅샷/스크린샷 확인
2. 사이드바에서 원하는 메뉴 찾기
3. 메뉴 클릭으로 이동
4. 이동 후 페이지 로드 완료 확인
```
### 2.3 사이드바 메뉴 구조
SAM ERP의 사이드바는 **2단계 계층 구조**이다.
```
1단계: 대분류 (클릭하면 하위 메뉴 펼침)
└─ 2단계: 실제 페이지 메뉴 (클릭하면 페이지 이동)
```
하위 메뉴가 보이지 않으면, 먼저 대분류 버튼을 클릭하여 펼쳐야 한다.
---
## 3. AI 에이전트 전용 규칙
### 3.1 Chrome DevTools MCP 사용 시
```
✅ 올바른 패턴:
1. take_snapshot → 현재 페이지 및 사이드바 상태 확인
2. click(uid) → 사이드바 대분류 클릭하여 하위 메뉴 펼치기
3. take_snapshot → 하위 메뉴 uid 확인
4. click(uid) → 원하는 페이지 메뉴 클릭
5. take_screenshot → 페이지 로드 확인
❌ 금지 패턴:
- navigate_page("http://localhost:3000/some-guessed-url")
- URL을 추측하여 직접 이동
```
### 3.2 E2E 테스트 (Playwright) 작성 시
```typescript
// ✅ 올바른 패턴 - 메뉴 클릭으로 이동
await page.getByRole('button', { name: '회계관리' }).click();
await page.getByRole('button', { name: '계좌입출금내역' }).click();
await expect(page.getByRole('heading', { name: '계좌 입출금 내역' })).toBeVisible();
// ✅ 허용 - 이미 알려진 URL로 직접 이동 (테스트 효율성)
// 단, URL은 실제 앱에서 확인한 것만 사용
await page.goto('/accounting/bank-transactions');
// ❌ 금지 - URL 추측
await page.goto('/accounting/bank-transaction-inquiry'); // 존재하지 않는 경로
await page.goto('/account/bank'); // 추측 URL
```
### 3.3 URL 확인이 필요할 때
특정 페이지의 URL을 알아야 한다면:
```
1. 사이드바 메뉴 클릭으로 해당 페이지 이동
2. 이동 후 스냅샷의 RootWebArea url 속성에서 확인
3. 확인된 URL만 이후 작업에 사용
```
---
## 4. 메뉴 → URL 매핑 관리
### 원칙
- URL 매핑 테이블을 별도로 유지하지 않는다 (변경 시 동기화 비용)
- 항상 **앱 사이드바가 Single Source of Truth**
- URL이 필요하면 메뉴 클릭 후 브라우저에서 확인
### 예외: 자주 사용하는 진입점
E2E 테스트 효율을 위해 검증된 URL만 하드코딩 허용:
```typescript
// e2e/fixtures/urls.ts (검증된 URL만 등록)
export const VERIFIED_URLS = {
dashboard: '/',
quoteManagement: '/sales/quote-management',
// ... 실제 앱에서 확인 후 추가
} as const;
```
이 목록에 없는 URL은 반드시 메뉴 클릭으로 이동한다.
---
## 5. 체크리스트
브라우저 자동화 또는 E2E 테스트 작성 시:
- [ ] URL을 추측하여 직접 입력하지 않았는가?
- [ ] 사이드바 메뉴 또는 앱 내 링크/버튼으로 이동했는가?
- [ ] 이동 후 페이지가 정상 로드되었는지 확인했는가?
- [ ] 하드코딩한 URL이 있다면, 실제 앱에서 검증한 URL인가?
- [ ] 존재하지 않는 페이지(404)로 이동하는 테스트가 없는가?