Files
sam-hotfix/testcase/TC_PRODUCT_MANAGEMENT.md
김보곤 4765cd5484 test: E2E 테스트 결과 정리 및 TC 문서 업데이트
- 이전 테스트 결과 파일 정리 (Fail-*, OK-* 삭제)
- testcase 11개 문서 업데이트
- 시나리오 품질 현황 문서 수정

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 14:14:18 +09:00

407 lines
20 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TC - 품목관리 (Product Management)
> **페이지**: https://dev.codebridge-x.com/production/screen-production
> **작성일**: 2026-01-29
> **대상**: QC Playwright AI 테스트용
---
## ⚠️ 테스트 환경 안내
| 항목 | 내용 |
|------|------|
| **환경 유형** | 개발/테스트 환경 (Development Environment) |
| **운영 환경 여부** | ❌ 아니오 - 운영 환경이 **아닙니다** |
| **데이터 특성** | 테스트용 시드 데이터 및 개발 중 생성된 샘플 데이터 |
| **테스트 정책** | CRUD 전체 테스트 가능 (생성, 수정, 삭제 포함) |
### 테스트 실행 지침
1. **CRUD 테스트 허용**: 이 환경은 개발/테스트 목적으로, 데이터 생성·수정·삭제를 포함한 전체 기능 테스트를 수행해야 합니다.
2. **품목 등록 테스트**: 신규 등록(D-080~D-090) 테스트 시 실제 데이터를 생성하여 기능 검증을 수행합니다.
3. **품목 삭제 테스트**: 삭제 테스트는 테스트 중 생성한 데이터를 대상으로 실행합니다. 기존 시드 데이터는 보존합니다.
4. **테스트 데이터 정리**: 테스트 완료 후 생성된 테스트 데이터는 삭제하여 환경을 정리합니다.
---
## 0. 사이드바 메뉴 탐색 (공통 전제 조건)
### 0.1 메뉴 펼치기
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| NAV-001 | 전제 | 사이드바 최상단 스크롤 | 사이드바가 최상단으로 스크롤 |
| NAV-002 | 전제 | "모두 펼치기" 버튼 클릭 | 사이드바의 모든 메뉴가 펼쳐짐 |
| NAV-003 | 전제 | 메뉴 펼침 대기 | 2초 대기 후 모든 메뉴 펼침 완료 |
| NAV-004 | 기능 | 1차 메뉴 찾기 | 스크롤 없이 1차 메뉴(생산관리) 클릭 가능 |
| NAV-005 | 기능 | 2차 메뉴 클릭 | 펼쳐진 서브메뉴에서 품목관리 클릭 |
| NAV-006 | 기능 | 페이지 로드 확인 | 404 없이 정상 페이지 로드 |
> **💡 참고**: "모두 펼치기" 버튼으로 전체 메뉴를 펼친 후 메뉴를 탐색하면 1차 메뉴를 누르지 못해 찾지 못하는 문제를 방지할 수 있습니다.
---
## 1. 목록 페이지 (List View)
### 1.1 페이지 로딩
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-001 | 기본 | 페이지 접근 | `/production/screen-production` 정상 로딩, 테이블 표시 |
| L-002 | 기본 | 통계 카드 표시 | 상단에 "전체 품목", "판매 가능", "품절", "단종" 4개 카드 표시 |
| L-003 | 기본 | 통계 숫자 일치 | 카드 숫자 합 = 테이블 전체 건수 |
| L-004 | 기본 | 기본 정렬 | 최신순(등록일 내림차순) 정렬 |
| L-005 | 기본 | 빈 목록 | 데이터 없을 때 빈 상태 메시지 표시 |
| L-006 | 기본 | 카테고리 트리 | 좌측에 카테고리 트리 표시 |
### 1.2 테이블 컬럼
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-010 | 기본 | 컬럼 구성 | 체크박스, 이미지, 품목코드, 품목명, 카테고리, 규격, 단위, 매입가, 판매가, 재고, 상태, 작업 |
| L-011 | UI | 이미지 썸네일 | 등록된 이미지 썸네일 표시, 없으면 기본 이미지 |
| L-012 | UI | 상태 뱃지 색상 | 판매가능=초록, 품절=빨강, 단종=회색, 비활성=노랑 |
| L-013 | UI | 재고 경고 색상 | 안전재고 미만=빨강, 이상=일반 |
| L-014 | UI | 가격 포맷 | 천단위 콤마 + "원" 표시 |
| L-015 | UI | 마진율 표시 | (판매가-매입가)/판매가 × 100% 계산 표시 |
### 1.3 카테고리 트리
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-016 | 기능 | 트리 펼치기/접기 | 하위 카테고리 펼치기/접기 동작 |
| L-017 | 기능 | 카테고리 선택 | 선택한 카테고리 품목만 목록에 표시 |
| L-018 | 기능 | 전체 카테고리 | "전체" 선택 시 모든 품목 표시 |
| L-019 | 기능 | 품목 수 표시 | 각 카테고리 옆에 품목 수 표시 |
### 1.4 검색
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-020 | 기능 | 품목명 검색 | 이름 일부 입력 시 해당 품목만 필터링 |
| L-021 | 기능 | 품목코드 검색 | 코드 입력 시 해당 품목만 필터링 |
| L-022 | 기능 | 바코드 검색 | 바코드 입력 시 해당 품목만 필터링 |
| L-023 | 기능 | 규격/모델 검색 | 규격 또는 모델명으로 검색 |
| L-024 | 기능 | 검색어 지우기 | 검색어 삭제 시 전체 목록 복원 |
| L-025 | 경계 | 빈 검색어 | 전체 목록 표시 |
| L-026 | 경계 | 존재하지 않는 검색어 | 빈 결과 + "검색 결과 없음" 메시지 |
| L-027 | 경계 | 특수문자 검색 | 에러 없이 처리 |
### 1.5 필터
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-030 | 기능 | 상태 필터 - 판매가능 | 판매가능 품목만 표시 |
| L-031 | 기능 | 상태 필터 - 품절 | 품절 품목만 표시 |
| L-032 | 기능 | 상태 필터 - 단종 | 단종 품목만 표시 |
| L-033 | 기능 | 상태 필터 - 비활성 | 비활성 품목만 표시 |
| L-034 | 기능 | 재고 필터 - 재고 있음 | 재고 > 0 품목만 표시 |
| L-035 | 기능 | 재고 필터 - 재고 없음 | 재고 = 0 품목만 표시 |
| L-036 | 기능 | 재고 필터 - 안전재고 미만 | 안전재고 미만 품목만 표시 |
| L-037 | 기능 | 가격대 필터 | 설정한 가격 범위 내 품목만 표시 |
| L-038 | 기능 | 공급업체 필터 | 선택한 공급업체 품목만 표시 |
| L-039 | 기능 | 필터 복합 적용 | 카테고리 + 상태 + 재고 동시 적용 시 AND 조건 |
| L-040 | 기능 | 필터 해제 | 필터 해제 시 전체 목록 복원 |
| L-041 | 경계 | 필터 결과 0건 | 빈 상태 메시지 표시, 에러 없음 |
### 1.6 정렬
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-050 | 기능 | 최신순 | 등록일 내림차순 |
| L-051 | 기능 | 등록순 | 등록일 오름차순 |
| L-052 | 기능 | 품목명 오름차순 | 가나다/ABC 순 |
| L-053 | 기능 | 품목명 내림차순 | 역순 |
| L-054 | 기능 | 판매가 높은순 | 판매가 내림차순 |
| L-055 | 기능 | 판매가 낮은순 | 판매가 오름차순 |
| L-056 | 기능 | 재고 많은순 | 재고 내림차순 |
| L-057 | 기능 | 재고 적은순 | 재고 오름차순 |
### 1.7 페이지네이션
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-060 | 기능 | 기본 페이지 크기 | 한 페이지 20건 표시 |
| L-061 | 기능 | 페이지 크기 변경 | 20/50/100건 선택 가능 |
| L-062 | 기능 | 다음 페이지 이동 | 다음 페이지로 이동 |
| L-063 | 기능 | 이전 페이지 이동 | 이전 페이지로 복귀 |
| L-064 | 경계 | 마지막 페이지 | "다음" 버튼 비활성화 |
| L-065 | 경계 | 첫 페이지 | "이전" 버튼 비활성화 |
### 1.8 행 선택 및 동작
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-070 | 기능 | 행 클릭 | 상세 페이지(view 모드)로 이동 |
| L-071 | 기능 | 체크박스 개별 선택 | 해당 행 선택 상태 |
| L-072 | 기능 | 전체 선택 체크박스 | 현재 페이지 전체 선택/해제 |
| L-073 | 기능 | 호버 시 작업 버튼 | 행 호버 시 수정/복사/삭제 버튼 표시 |
| L-074 | 기능 | 수정 버튼 클릭 | 상세 페이지(edit 모드)로 이동 |
| L-075 | 기능 | 복사 버튼 클릭 | 신규 등록 페이지에 데이터 복사 |
| L-076 | 기능 | 삭제 버튼 클릭 | 삭제 확인 다이얼로그 표시 |
| L-077 | 기능 | 삭제 확인 | 품목 삭제, 목록 갱신 |
| L-078 | 비즈 | 주문에 사용된 품목 삭제 | 삭제 불가 에러 메시지 |
| L-079 | 비즈 | 재고가 있는 품목 삭제 | 삭제 불가 또는 경고 메시지 |
### 1.9 일괄 처리
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-080 | 기능 | 일괄 상태 변경 | 다중 선택 → 상태 일괄 변경 |
| L-081 | 기능 | 일괄 카테고리 변경 | 다중 선택 → 카테고리 일괄 이동 |
| L-082 | 기능 | 일괄 삭제 | 다중 선택 → 일괄 삭제 |
| L-083 | 기능 | Excel 내보내기 | 선택 또는 전체 품목 Excel 다운로드 |
| L-084 | 기능 | Excel 가져오기 | Excel 파일로 품목 일괄 등록 |
### 1.10 신규 등록 버튼
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| L-090 | 기능 | 신규 등록 버튼 | 클릭 시 상세 페이지(new 모드)로 이동 |
---
## 2. 상세/등록 페이지 (Detail View)
### 2.1 품목 등록 (mode=new)
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-001 | 기본 | 페이지 로딩 | 빈 폼 표시, 저장/취소 버튼 |
| D-002 | 기본 | 품목코드 자동 생성 | 코드 필드 읽기전용, 저장 시 자동 생성 |
| D-003 | 기본 | 기본값 확인 | 상태=판매가능, 재고=0, 안전재고=0 |
| D-004 | 기본 | 삭제 버튼 없음 | 신규 모드에서 삭제 버튼 미표시 |
#### 2.1.1 필수값 검증
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-010 | 검증 | 품목명 미입력 | 저장 시 필수값 에러 메시지 |
| D-011 | 검증 | 카테고리 미선택 | 저장 시 필수값 에러 메시지 |
| D-012 | 검증 | 단위 미입력 | 저장 시 필수값 에러 메시지 |
| D-013 | 검증 | 필수값만 입력 저장 | 최소 필수값으로 정상 저장 |
#### 2.1.2 기본 정보 입력
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-020 | 기능 | 품목명 입력 | 최대 200자, 정상 입력 |
| D-021 | 기능 | 영문명 입력 | 최대 200자, 영문/숫자/특수문자 |
| D-022 | 기능 | 카테고리 선택 | 드롭다운/트리에서 선택 |
| D-023 | 기능 | 규격/모델 입력 | 최대 100자 |
| D-024 | 기능 | 단위 선택 | EA, BOX, SET, KG, L 등 선택 |
| D-025 | 기능 | 바코드 입력 | 수동 입력 또는 바코드 스캔 |
| D-026 | 경계 | 품목명 중복 | 동일 품목명 등록 시 경고 또는 허용 |
| D-027 | 경계 | 바코드 중복 | 바코드 중복 시 에러 메시지 |
#### 2.1.3 가격 정보
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-030 | 기능 | 매입가 입력 | 숫자만 입력, 천단위 자동 콤마 |
| D-031 | 기능 | 판매가 입력 | 숫자만 입력, 천단위 자동 콤마 |
| D-032 | 기능 | 마진율 자동 계산 | (판매가-매입가)/판매가 × 100% |
| D-033 | 기능 | 부가세 포함 여부 | 토글로 설정 |
| D-034 | 경계 | 음수 가격 입력 | 에러 메시지 또는 입력 제한 |
| D-035 | 경계 | 매입가 > 판매가 | 경고 메시지 (역마진 알림) |
| D-036 | 기능 | 할인가 설정 | 할인가 입력 필드 |
#### 2.1.4 재고 정보
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-040 | 기능 | 현재고 입력 | 초기 재고 수량 입력 |
| D-041 | 기능 | 안전재고 설정 | 알림 기준 재고 수량 |
| D-042 | 기능 | 최대재고 설정 | 최대 보관 수량 |
| D-043 | 기능 | 창고 선택 | 기본 창고 지정 |
| D-044 | 경계 | 음수 재고 입력 | 에러 메시지 또는 입력 제한 |
| D-045 | 비즈 | 재고 관리 여부 | 재고 관리 ON/OFF 토글 |
#### 2.1.5 공급업체 정보
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-050 | 기능 | 공급업체 선택 | 거래처 목록에서 선택 |
| D-051 | 기능 | 공급업체 다중 등록 | 여러 공급업체 추가 가능 |
| D-052 | 기능 | 주 공급업체 지정 | 기본 공급업체 설정 |
| D-053 | 기능 | 공급업체 삭제 | 등록된 공급업체 제거 |
#### 2.1.6 이미지 정보
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-060 | 기능 | 대표 이미지 업로드 | 이미지 파일 선택 및 미리보기 |
| D-061 | 기능 | 추가 이미지 업로드 | 최대 5장 추가 이미지 |
| D-062 | 기능 | 이미지 순서 변경 | 드래그앤드롭으로 순서 변경 |
| D-063 | 기능 | 이미지 삭제 | 업로드된 이미지 삭제 |
| D-064 | 경계 | 이미지 용량 초과 | 5MB 초과 시 에러 메시지 |
| D-065 | 경계 | 지원하지 않는 형식 | jpg/png/gif 외 에러 |
#### 2.1.7 추가 정보
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-070 | 기능 | 상품 설명 입력 | 텍스트 에어리어 (최대 2000자) |
| D-071 | 기능 | 메모 입력 | 내부 메모 (최대 500자) |
| D-072 | 기능 | 세금 유형 선택 | 과세/면세/영세 선택 |
| D-073 | 기능 | 원산지 입력 | 국가/지역 입력 |
| D-074 | 기능 | 제조사 입력 | 제조사명 입력 |
| D-075 | 기능 | 브랜드 입력 | 브랜드명 입력 |
#### 2.1.8 저장 동작
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-080 | 기능 | 정상 저장 | 성공 메시지 + 상세(view) 페이지로 이동 |
| D-081 | 기능 | 저장 후 품목코드 | 자동 생성된 코드 확인 |
| D-082 | 기능 | 취소 버튼 | 목록 페이지로 복귀, 데이터 미저장 |
| D-083 | 경계 | 네트워크 오류 시 저장 | 에러 메시지 표시, 데이터 유지 |
| D-084 | 기능 | 저장 후 계속 등록 | "저장 후 계속" 버튼으로 연속 등록 |
| D-085 | 기능 | 전체 필드 입력 저장 | 모든 필드 정상 저장 및 조회 |
---
### 2.2 조회 모드 (mode=view)
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-100 | 기본 | 페이지 로딩 | 저장된 데이터 표시, 모든 필드 읽기전용 |
| D-101 | 기본 | 품목코드 표시 | 자동 생성된 코드 표시 |
| D-102 | UI | 버튼 표시 | 수정/삭제/복사/목록 버튼 |
| D-103 | 기능 | 수정 버튼 클릭 | edit 모드로 전환 |
| D-104 | 기능 | 복사 버튼 클릭 | 데이터 복사된 신규 등록 모드 |
| D-105 | 기능 | 목록 버튼/뒤로가기 | 목록 페이지로 복귀 |
#### 2.2.1 이미지 뷰어
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-110 | 기능 | 대표 이미지 표시 | 메인 영역에 대표 이미지 표시 |
| D-111 | 기능 | 이미지 확대 | 클릭 시 라이트박스로 확대 |
| D-112 | 기능 | 추가 이미지 썸네일 | 하단에 썸네일 목록 |
| D-113 | 기능 | 이미지 전환 | 썸네일 클릭 시 메인 이미지 변경 |
#### 2.2.2 재고 현황
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-120 | 기능 | 재고 현황 표시 | 현재고, 안전재고, 가용재고 표시 |
| D-121 | 기능 | 창고별 재고 | 창고별 재고 분포 표시 |
| D-122 | 기능 | 입출고 이력 | 최근 입출고 내역 요약 |
#### 2.2.3 거래 이력
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-130 | 기능 | 주문 이력 | 해당 품목 주문 내역 |
| D-131 | 기능 | 매출 통계 | 기간별 매출 현황 |
| D-132 | 기능 | 발주 이력 | 해당 품목 발주 내역 |
---
### 2.3 수정 모드 (mode=edit)
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-200 | 기본 | 페이지 로딩 | 기존 데이터 채워진 편집 가능 폼 |
| D-201 | 기본 | 품목코드 읽기전용 | 코드 수정 불가 |
| D-202 | 기능 | 품목명 수정 | 변경 후 저장 정상 동작 |
| D-203 | 기능 | 카테고리 변경 | 다른 카테고리로 이동 |
| D-204 | 기능 | 가격 수정 | 매입가/판매가 수정 |
| D-205 | 기능 | 상태 변경 | 판매가능→단종 등 상태 변경 |
| D-206 | 기능 | 이미지 수정 | 기존 이미지 삭제/교체/추가 |
| D-207 | 비즈 | 재고 직접 수정 | 재고조정 사유 입력 필수 |
#### 2.3.1 저장/취소/삭제
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| D-210 | 기능 | 수정 저장 | 변경사항 저장 + view 모드 전환 |
| D-211 | 기능 | 수정 취소 | 변경사항 폐기 + view 모드 복귀 |
| D-212 | 기능 | 삭제 버튼 | 삭제 확인 다이얼로그 표시 |
| D-213 | 기능 | 삭제 확인 | 품목 삭제 + 목록 페이지 이동 |
| D-214 | 기능 | 삭제 취소 | 아무 변경 없음 |
| D-215 | 비즈 | 주문에 사용된 품목 삭제 | 삭제 불가, 에러 메시지 |
| D-216 | 비즈 | 재고 있는 품목 삭제 | 삭제 불가 또는 재고 처리 안내 |
---
## 3. 카테고리 관리
### 3.1 카테고리 CRUD
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| C-001 | 기능 | 카테고리 추가 | 루트 또는 하위 카테고리 추가 |
| C-002 | 기능 | 카테고리 수정 | 카테고리명 수정 |
| C-003 | 기능 | 카테고리 삭제 | 빈 카테고리만 삭제 가능 |
| C-004 | 기능 | 카테고리 이동 | 드래그앤드롭으로 위치 변경 |
| C-005 | 비즈 | 품목 있는 카테고리 삭제 | 삭제 불가, 에러 메시지 |
| C-006 | 기능 | 하위 카테고리 계층 | 최대 3단계 계층 지원 |
---
## 4. 모바일 반응형
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| M-001 | UI | 목록 모바일 뷰 | 테이블 → 카드 레이아웃 전환 |
| M-002 | UI | 카드 핵심 정보 | 이미지, 품목명, 가격, 재고 표시 |
| M-003 | UI | 카테고리 트리 | 햄버거 메뉴로 접근 |
| M-004 | UI | 상세 페이지 레이아웃 | 이미지 상단, 정보 하단 배치 |
| M-005 | UI | 검색/필터 모바일 | 검색바, 필터 접근 가능 |
---
## 5. API 응답 검증
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| API-001 | API | GET /products 응답 | `{ success: true, data: { data: [...], total, page, size } }` |
| API-002 | API | GET /products/{id} 응답 | 품목 상세 + 재고 정보 + 이미지 |
| API-003 | API | POST /products 응답 | product_code 자동 생성 |
| API-004 | API | GET /products/categories 응답 | 카테고리 트리 구조 |
| API-005 | API | DELETE - 주문 연결 | 400 에러 + 적절한 에러 메시지 |
| API-006 | API | 멀티테넌트 격리 | 다른 tenant 데이터 접근 불가 |
---
## 6. 데이터 정합성
| TC# | 구분 | 테스트 항목 | 기대 결과 |
|-----|------|------------|-----------|
| I-001 | 비즈 | 마진율 계산 | (판매가-매입가)/판매가 × 100% |
| I-002 | 비즈 | 재고 동기화 | 입출고 시 재고 자동 갱신 |
| I-003 | 비즈 | 카테고리 품목 수 | 품목 이동 시 카운트 갱신 |
| I-004 | 비즈 | 등록→조회 일치 | 등록한 데이터 = 조회 데이터 |
| I-005 | 비즈 | 이미지 순서 유지 | 설정한 순서대로 표시 |
---
## TC 요약
| 카테고리 | 건수 |
|----------|------|
| 목록 페이지 | 58건 |
| 상세/등록 페이지 | 54건 |
| 카테고리 관리 | 6건 |
| 모바일 반응형 | 5건 |
| API 응답 검증 | 6건 |
| 데이터 정합성 | 5건 |
| **합계** | **134건** |
---
## 참고: 구분 체계
- **기본**: 페이지 로딩, 기본 표시
- **기능**: 사용자 인터랙션, CRUD 동작
- **UI**: 색상, 레이아웃, 뱃지 등 시각 요소
- **검증**: 입력값 유효성 검사
- **경계**: 경계값, 예외 케이스
- **비즈**: 비즈니스 로직 (재고, 가격 등)
- **API**: API 레벨 검증