| Screen ID |
Screen Title |
진입 조건 |
| SRCH-OVR-01 |
검색 메인 / 검색 중 (SH_120_Search, SH_121_Searching) |
헤더 검색 버튼 클릭 → 검색어 입력 전(SH_120)/입력 중(SH_121) |
검색 버튼 클릭 시 진입하는 검색 오버레이. 검색어 입력 전(최근 검색어·추천 검색어·추천 브랜드·최근 본 상품·인기 상품)과 입력 중(자동완성 드롭다운)의 두 상태를 다룬다. 검색 실행 후 결과 화면은 search-results.md 참고.
원본: 검색 마스터.md(SH_120_Search + SH_121_Searching) + 검색 정책.md(최근검색어/추천검색어/추천브랜드/최근본상품 섹션) 병합.
| 항목 |
기준 |
| 플레이스홀더 |
검색어를 입력하세요 |
| 기본 상태 |
돋보기 아이콘 |
| 입력 중 |
X 아이콘 표시 / 클릭 시 전체 삭제 / 자동완성 드롭다운 표시 |
| 검색 실행 트리거 |
Enter 키 · 연관 검색어 클릭 · 검색 버튼 클릭 |
| 최대 입력 길이 |
50자 (초과 시 추가 입력 제한) |
| 특수문자 |
허용 |
| 최소 길이 제한 |
없음 |
| 항목 |
기준 |
| 최대 개수 |
20개 (최신순) |
| 초과 시 |
21번째 검색 시 가장 오래된 항목 자동 삭제 |
| 개별 삭제 |
X 버튼 클릭 시 즉시 삭제 |
| 전체 삭제 |
전체 삭제 버튼 클릭 → 전체 삭제 + 영역 숨김 |
| 스크롤 |
가로 스크롤 |
| 검색어 클릭 |
해당 검색어로 검색 실행 |
| 동일 키워드 재검색 |
기존 항목 삭제 후 최신 항목으로 갱신 |
| 빈 상태 (앱) |
섹션 자체가 표시되지 않음 (문구 노출 없음) |
| 빈 상태 (웹) |
“최근 검색어가 존재하지 않습니다” 메시지 표시 |
| 항목 |
기준 |
| 데이터 기준 |
검색 빈도 상위 10개 키워드 |
| 관리 |
어드민에서 편집 가능. 관리자 설정 검색어는 어드민에 “관리자” 태그, 자동 생성은 “자동” 표시 |
| 스크롤 |
가로 스크롤 |
| 검색어 클릭 |
검색 실행 + 점수 증가 API 호출 |
| 빈 상태 (웹/앱 공통) |
추천 검색어 섹션 자체가 표시되지 않음 |
| 항목 |
기준 |
| 데이터 기준 |
검색 빈도 상위 10개 브랜드 |
| 관리 |
어드민에서 편집 가능 |
| 표시 정보 |
브랜드 이미지 · 영문 브랜드명 · 한글 브랜드명 · 관심 브랜드 설정 수(포커스 브랜드 설정 회원 수) · 신상품 뱃지 |
| 관심 브랜드 토글 |
북마크 아이콘 클릭 시 설정/해제 |
| 브랜드 보기 버튼 |
브랜드 필터 적용된 SH_100_Main(plp-main.md)으로 이동 |
| 브랜드 카드 클릭 |
점수 증가 API 호출하지 않음 |
| 빈 상태 (웹/앱 공통) |
추천 브랜드 섹션 자체가 표시되지 않음 |
| 항목 |
기준 |
| 최대 개수 |
24개 (마스터 기준, 미결 사항 참고) |
| 로그인 사용자 |
계정 기반 |
| 비로그인 사용자 |
브라우저(로컬) 기반 |
| 정렬 |
최신순 |
| 스크롤 |
가로 스크롤 |
| 상품 클릭 |
상품 상세 이동 + 점수 증가 API 호출 |
| 빈 상태 (웹/앱 공통) |
“최근 본 상품이 존재하지 않습니다” 메시지 표시 |
| 항목 |
기준 |
| 데이터 기준 |
최근 24시간 조회수 상위 20개 |
| 리셋 주기 |
매일 자정 (00:00) |
| 품절 상품 |
포함 |
| 비노출 상품 |
제외 (visible = 0) |
| 정렬 우선순위 |
조회수(view_score) → 최신 업데이트(updated_ts) → 어드민 추천 |
| 관리 |
어드민 패널에서 수정 가능 |
| 상품 클릭 |
상품 상세 이동 + 점수 증가 API 호출 |
| 빈 상태 (웹/앱 공통) |
“많이 본 상품이 존재하지 않습니다” 메시지 표시 |
| 항목 |
기준 |
| 데이터 기준 |
최근 24시간 결제 완료 상품 중 최소 2개 이상 판매 |
| 리셋 주기 |
매일 자정 (00:00) |
| 품절 상품 |
마스터 기준: 포함 — 정책 문서와 정면 충돌, 미결 사항 참고 |
| 비노출 상품 |
제외 |
| 정렬 우선순위 |
결제 완료 건수 → 판매 금액 → 상품 등록 순서 |
| 관리 |
어드민 패널에서 수정 가능 |
| 상품 클릭 |
상품 상세 이동 + 점수 증가 API 호출 |
| 빈 상태 (웹/앱 공통) |
“많이 산 상품이 존재하지 않습니다” 메시지 표시 |
| 액션 |
이동 화면 |
| 검색 실행 (검색 중 상태) |
SH_121_Searching (본 문서 하단) |
| 검색 결과 표시 |
search-results.md (SH_122_Searched) |
| 브랜드 보기 버튼 |
SH_100_Main (브랜드 필터 적용) |
| 상품 클릭 |
해당 상품 상세 |
| 항목 |
기준 |
| 진입 시 동작 |
검색바 자동 포커스 + 키보드 자동 노출 |
| API 호출 방식 |
입력할 때마다 즉시 호출 (디바운싱 없음) |
| 입력 제한 |
SH_120과 동일 (최대 50자, 특수문자 허용, 최소 길이 없음) |
운영 주의: 디바운싱 없이 즉시 호출하므로 짧은 시간에 여러 요청이 발생할 수 있다. 렌더링은 가장 마지막 입력값에 대한 응답을 우선한다.
| 항목 |
기준 |
| 노출 위치 |
검색바 바로 아래 드롭다운 |
| 노출 조건 |
검색어 입력 시에만 표시 |
| 결과 없을 시 |
드롭다운 전체 숨김 |
| 항목 |
기준 |
| 노출 조건 |
자동완성 응답 중 isBrand = true 항목 |
| 최대 개수 |
5개 |
| 표시 형식 |
검색어 + 브랜드 라벨 (예: 칼하트 브랜드) — 브랜드 라벨이 표시된 검색어가 최상위 노출 |
| 정렬 기준 |
API 응답 순서. 브랜드가 여럿이면 검색 빈도수 상위 5개 순 |
| 클릭 동작 |
점수 증가 API 호출 → SH_100_Main (브랜드 필터 적용) 이동 |
운영 주의: 브랜드 클릭은 검색 결과 화면이 아닌 쇼핑 메인의 브랜드 필터 화면으로 이동한다. 점수 증가 API는 호출하지만 targetType은 SEARCH이다.
| 항목 |
기준 |
| 노출 조건 |
자동완성 응답 중 isBrand = false 항목 |
| 노출 위치 |
브랜드 섹션 아래 |
| 정렬 기준 |
API 응답 순서 |
| 클릭 동작 |
점수 증가 API 호출 → SH_122_Searched(search-results.md) 이동 |
| 액션 |
이동 화면 |
| 일반 연관 검색어 클릭 |
SH_122_Searched |
| Enter 키 / 검색 버튼 클릭 |
SH_122_Searched |
| 브랜드 추천 클릭 |
SH_100_Main (브랜드 필터 적용) |
| 뒤로가기 |
SH_120_Search |
- 검색을 수행하면 해당 키워드가 자동으로 최근 검색어에 저장된다.
- 검색어 입력 시 실시간으로 관련 키워드가 제안된다.
- 브랜드 키워드는 검색 빈도수(모든 사용자의 일일 검색 데이터를 수집, 매월 업데이트)가 높은 5개 순으로 정렬된다.
| 항목 |
내용 |
| 엔드포인트 |
GET /v1/search/history |
| 호출 시점 |
검색 화면 진입 시 |
| 활용 필드 |
searchKeyword (표시), updatedAt (정렬 기준) |
| 최대 표시 |
20개 |
| 항목 |
내용 |
| 엔드포인트 |
GET /v1/score |
| 파라미터 |
targetType=SEARCH (추천 검색어) / targetType=BRAND (추천 브랜드) |
| 호출 시점 |
검색 화면 진입 시 |
- 추천 검색어 응답 주요 필드:
targetType, targetId, name, sort
- 추천 브랜드 응답 주요 필드:
targetType, targetId, name, korName, likeCnt, imageUrl, newArrival
| 항목 |
내용 |
| 엔드포인트 |
GET /v1/products/{productIds} |
| 호출 시점 |
검색 화면 진입 시 |
| 데이터 처리 |
로그인: 계정 기반 / 비로그인: 로컬 저장 ID 목록 기반 |
| 최대 표시 |
24개 (마스터), 정책은 20개 — 미결 사항 참고 |
| 항목 |
내용 |
| 엔드포인트 |
GET /v1/score |
| 파라미터 |
scoreSortType=DAILY_VIEW (조회수) / scoreSortType=DAILY_SALE (구매량) |
| 호출 시점 |
검색 화면 진입 시 |
| 활용 필드 |
targetId, name, brandName, currentPrice, discountedRate, thumbnailUrl, sizes |
| 기능 |
API |
| 목록 조회 |
GET /v1/bookmarks |
| 추가/제거 |
POST /v1/bookmarks (targetId, targetType: "BRAND") |
| 항목 |
내용 |
| 엔드포인트 |
GET /v1/search/autoCompleteKeyword |
| 파라미터 |
searchKeyword: 현재 입력값 |
| 호출 방식 |
입력할 때마다 즉시 호출 (디바운싱 없음) |
| 활용 필드 |
isBrand (섹션 분리), targetId (점수 증가/이동), targetSearchKeyword (표시 텍스트) |
| 표시 규칙 |
isBrand=true 최대 5개 상단 / isBrand=false 브랜드 아래 |
| 호출 시점 |
scoreType |
targetType |
| 추천 검색어 클릭 |
VIEW |
SEARCH |
| 최근 본 상품 클릭 |
VIEW |
PRODUCT |
| 인기 상품 클릭 |
VIEW |
PRODUCT |
| 브랜드 또는 일반 연관 검색어 클릭 (SH_121) |
SEARCH |
SEARCH |
| 확인 항목 |
확인 방법 |
정상 기준 |
| 최근 검색어 미노출 |
GET /v1/search/history 응답 |
searchKeyword 1개 이상 |
| 추천 검색어/브랜드 미노출 |
GET /v1/score?targetType=SEARCH/BRAND 응답 |
1개 이상 |
| 최근 본 상품 미노출 |
GET /v1/products/{productIds} 응답 |
로컬 ID 목록 존재 여부 확인 |
| 인기 상품 미노출 |
GET /v1/score?scoreSortType=DAILY_VIEW/DAILY_SALE 응답 |
1개 이상 |
| 관심 브랜드 토글 미반영 |
GET /v1/bookmarks 응답 |
targetType BRAND 정상 여부 |
| 드롭다운 전체 미노출 |
입력값 + API 응답 확인 |
payload 1개 이상 |
| 브랜드/일반 섹션 분리 오류 |
isBrand 매핑 확인 |
true → 브랜드, false → 일반 |
| 이전 검색어 결과 잔류 |
마지막 입력값 기준 렌더링 여부 |
최신 입력값 응답 우선 |
| 브랜드 클릭 이동 오류 |
클릭 이벤트 라우팅 파라미터 확인 |
SH_100_Main + 브랜드 필터 |
| 점수 증가 미호출 |
POST /v1/score/scoreUp 호출 여부 |
targetId / scoreType 정상 |
| 증상 |
예상 원인 |
1차 조치 |
| 추천 검색어/브랜드 미노출 |
score API 실패 또는 데이터 없음 |
GET /v1/score 파라미터 및 응답 확인 |
| 자동완성 드롭다운 미노출 |
자동완성 API 실패 또는 빈 입력 처리 오류 |
입력값 + API 응답 확인 |
| 브랜드/일반 섹션 분리 오류 |
isBrand 매핑 오류 |
응답 파싱 로직 확인 |
| 이전 검색 결과 잔류 |
최신 응답 비교 처리 누락 |
마지막 입력 기준 렌더링 여부 확인 |
검색은 “검색 → 상세 → 뒤로가기” 네비게이션 스택 관리와 필터 상태가 다른 탭으로 새어나가는 문제가 반복되는 영역이다. 재진입 시 상태 유지, 탭 간 상태 격리를 체크할 것.
자세히: QA 체크리스트 §3 화면 전환·재진입
| 항목 |
내용 |
| 최근 본 상품 최대 개수 충돌 |
검색 마스터.md(SH_120 섹션 5)는 24개, 검색 정책.md(4.4.1)는 20개. 정면 충돌. 최신 문서 확인 필요 — 두 문서 모두 최종 수정일이 명시되어 있으나 어느 쪽이 실제 구현 기준인지 운영팀 확인 필요. 현재 문서는 마스터(24개)를 기본으로 기재 |
| “많이 산 상품” 품절 표시 여부 정면 충돌 |
검색 마스터.md(SH_120 섹션 7, 인기 상품 — 구매량 기준)는 품절 상품 포함으로 명시. 검색 정책.md(4.6.1, 많이 산 상품)는 “품절 상품은 표시되지 않습니다”로 명시 — 정면 충돌. 실제 구현 기준 운영팀 확정 필요 |
| 웹/앱 빈 상태 문구 차이 |
최근 검색어 빈 상태는 웹(문구 노출)과 앱(섹션 숨김)이 다르게 동작 — 의도된 차이인지 확인 필요 |
| 버전 |
날짜 |
변경 내용 |
| v1.0 |
2026-07-30 |
최초 작성 — 검색 마스터.md(SH_120_Search + SH_121_Searching) + 검색 정책.md(최근검색어/추천검색어/추천브랜드/최근본상품 섹션) 병합 |