{"content_id":"rl3zchhyg6","slug":"five-policies-before-ai-ecommerce-search-development","locale":"ko","schema_type":"HowTo","category":"how_to","category_name":"하우투","title":"AI 쇼핑몰 검색 개발 전에 정해야 할 5가지 운영 정책","summary":"AI는 쇼핑몰 검색 코드를 빠르게 만들 수 있지만 상품 노출 기준과 예외 처리는 운영자가 먼저 결정해야 합니다. 이 가이드는 정렬, 상품 상태, 목록 방식, 검색 범위, 로그 정책을 실제 구현과 테스트 수준으로 정리합니다.","author":{"name":"인조이스 편집팀","url":"https://injoys.com/ko/about"},"key_points":["기본 정렬은 검색 관련도와 판매·품질 신호를 문서화된 공식으로 결합하고 광고 노출은 유기적 순위와 분리해야 합니다.","품절, 일시 판매 중지, 판매 종료, 리콜을 서로 다른 상태로 모델링하고 검색·상세·장바구니·결제에서 일관되게 처리해야 합니다.","대규모 상품 목록은 페이지네이션, 더 보기, 무한 스크롤을 목적에 맞게 선택하고 URL 상태와 뒤로 가기 복원을 보장해야 합니다.","상품명뿐 아니라 브랜드, 카테고리, 속성, 동의어, 모델명을 검색 범위에 포함하고 결과 없음 화면을 별도 진열대로 설계해야 합니다.","검색 로그는 수요 데이터로 활용하되 개인 식별자와 민감 검색어를 최소화하고 원문 보관과 집계 보관을 분리해야 합니다."],"content_markdown":"AI는 상품 목록 API, 검색창, 정렬 버튼을 빠르게 만들 수 있다. 그러나 **어떤 상품을 보여주고, 어떤 상품을 숨기며, 무엇을 ‘추천’이라고 부를지**는 코드가 아니라 운영 정책이다. 쇼핑몰 검색은 단순한 조회 기능이 아니라 매대 배치, 광고 지면, 재고 처리, 고객 경험, 데이터 수집이 한곳에 결합된 의사결정 시스템이다.\n\n정책을 주지 않은 채 “상품 검색 기능을 만들어 줘”라고만 지시하면 AI는 최신 등록순, 상품명 부분 일치, 단순 페이지네이션 같은 익숙한 예시를 임의로 채울 수 있다. 코드는 실행되더라도 매장 운영에는 맞지 않을 수 있다. 최신 상품이 품절인데도 첫 줄에 노출되고, 판매 종료 상품이 장바구니에 담기며, 고객이 “사과”를 검색해도 “청송 부사”를 찾지 못하는 문제가 대표적이다.\n\n## 검색 순위는 기술 기능이 아니라 운영 정책이다\n\n상품 진열 순서는 사업자가 설계할 수 있다. 다만 화면이 소비자에게 전달하는 의미와 실제 순위 산정 방식이 어긋나거나, 경제적 이해관계가 있는 노출을 일반 추천처럼 보이게 하면 법적·신뢰상 위험이 커진다.\n\n공정거래위원회는 2024년 6월 쿠팡과 CPLB의 검색순위 운영 및 임직원 구매후기 작성 등을 문제 삼아 잠정 1,400억 원의 과징금을 발표했고, 같은 해 8월 의결서 기준 과징금은 1,628억 원으로 정해졌다. 사업자 측은 처분에 불복했으며, 2026년 4월 보도 기준 관련 취소소송은 계속 중이었다. 이 사례의 실무적 교훈은 “자사 상품 우대는 언제나 불법”이라는 단순 명제가 아니다. **추천이라는 표시가 무엇을 뜻하는지, 광고·자사 이해관계를 명확히 드러냈는지, 순위 변경을 데이터와 문서로 설명할 수 있는지**를 설계 단계에서 검토해야 한다는 점이다.\n\n법률 적용은 서비스 구조와 표시 방식에 따라 달라질 수 있으므로 실제 출시 전에는 관련 법령과 최신 집행 사례를 별도로 확인하는 것이 안전하다.\n\n## 한 줄 프롬프트가 만드는 ‘뚝딱 버전’의 실패 지점\n\n| 미정인 정책 | AI가 임의로 채울 수 있는 구현 | 실제 운영 위험 |\n|---|---|---|\n| 기본 정렬 | `created_at DESC` | 최근 등록한 품절·검수 전 상품이 상단에 노출 |\n| 판매 상태 | 삭제 여부만 확인 | 판매 중지·리콜 상품이 검색되거나 주문 가능 |\n| 목록 로딩 | 전체 조회 또는 단순 무한 스크롤 | 느린 응답, 뒤로 가기 시 위치 상실, 비교 어려움 |\n| 검색 범위 | 상품명만 부분 일치 | 브랜드·품종·모델명·동의어 검색 실패 |\n| 결과 없음 | 빈 배열만 반환 | 구매 의도가 높은 고객이 즉시 이탈 |\n| 로그 | 검색어와 회원·IP를 그대로 저장 | 목적 외 수집, 과도한 보관, 민감 검색어 노출 위험 |\n\nAI는 요구사항의 빈칸을 메울 수 있지만, 그 선택이 매장의 전략과 법적 책임에 맞는지는 판단하지 못한다. 따라서 구현 전에 최소한 다음 다섯 가지 정책을 문서로 확정해야 한다.\n\n## 1. 정렬 기본값: 무엇을 ‘추천순’이라고 부를 것인가\n\n기본 정렬은 고객이 가장 먼저 보는 진열대다. 다수의 사용자는 정렬 옵션을 바꾸지 않으므로 기본값은 매출, 재고 소진, 신상품 육성, 고객 만족도에 직접 영향을 준다.\n\n### 먼저 순위 산정 단계를 분리한다\n\n검색 결과는 한 번에 섞어 계산하기보다 다음 순서로 나누는 것이 안전하다.\n\n1. **노출 자격 판정:** 판매 가능, 공개 가능, 법적·운영상 차단 대상이 아닌 상품만 후보에 포함한다.\n2. **검색 관련도 계산:** 상품명, 브랜드, 카테고리, 속성, 동의어가 검색어와 얼마나 맞는지 계산한다.\n3. **유기적 순위 계산:** 판매 속도, 전환율, 평점 신뢰도, 배송 품질 같은 신호를 결합한다.\n4. **비즈니스 규칙 적용:** 품절 감점, 신상품 탐색 기회, 다양성 제한 등을 적용한다.\n5. **광고 슬롯 결합:** 광고 상품은 유기적 순위와 분리해 삽입하고 명확히 표시한다.\n6. **안정적 동률 처리:** 같은 점수일 때 `product_id` 같은 고정 키로 순서를 결정한다.\n\n### 추천 점수는 문서화된 공식이어야 한다\n\n다음은 구조를 설명하기 위한 예시일 뿐, 모든 쇼핑몰에 맞는 정답은 아니다.\n\n```text\norganic_score =\n  0.45 × query_relevance\n+ 0.20 × conversion_rate_28d\n+ 0.15 × sales_velocity_14d\n+ 0.10 × rating_confidence\n+ 0.10 × fulfillment_quality\n```\n\n각 신호는 동일한 범위로 정규화하고, 기간과 집계 대상을 명시해야 한다. 단순 평균 별점은 리뷰 1개의 5점 상품을 리뷰 1,000개의 4.8점 상품보다 높게 만들 수 있으므로 리뷰 수를 함께 반영한 보정 점수를 쓰는 편이 낫다. 판매량만 쓰면 오래 팔린 상품이 영구적으로 유리해질 수 있으므로 최근 기간의 판매 속도와 전환율을 함께 본다.\n\n### 반드시 정해야 할 세부 항목\n\n- 추천순의 목표가 검색 적합도, 구매 가능성, 고객 만족, 재고 효율 중 무엇인지\n- 각 신호의 집계 기간과 갱신 주기\n- 취소율, 반품률, 배송 지연, 품절 가능성 같은 감점 신호\n- 리뷰가 적은 신상품에 줄 탐색 기회와 최대 가산점\n- 동일 브랜드나 동일 판매자가 상단을 과도하게 점유하지 않도록 할 다양성 규칙\n- 점수 동률 시 사용할 고정 정렬 키\n- 순위 공식의 버전, 변경 사유, 적용 시각, 승인자를 남기는 감사 기록\n- A/B 테스트의 성공 지표와 중단 조건\n\n### 광고와 유기적 추천을 섞지 않는다\n\n광고비, 자사 상품 여부, 높은 마진 같은 경제적 이해관계를 반영할 수는 있지만, 이를 일반적인 “인기순”이나 “추천순”으로 오인하게 만들면 위험하다. 공정거래위원회는 2025년 고가 상품 판매 플랫폼 사건에서도 유료 옵션을 구매한 판매자의 상품이 기본 정렬에서 우선 노출되는 구조와 관련 표시를 문제 삼았다. 광고 상품은 별도 후보군과 슬롯으로 관리하고, 카드 단위에서 식별 가능한 “광고” 또는 “스폰서” 표시를 제공하는 것이 기본이다. 관리자 화면에는 광고 노출 규칙과 유기적 순위 공식을 분리해 보여줘야 한다.\n\n## 2. 비정상 상태 상품: 품절과 판매 중지는 다른 상태다\n\n`is_sold_out` 하나로 모든 예외를 처리하면 검색, 상세, 장바구니, 주문 검증이 서로 어긋난다. 최소한 **판매 상태, 재고 상태, 공개 상태, 규제 상태**를 분리해야 한다.\n\n### 권장 상태 모델\n\n| 상태 | 검색·목록 | 직접 URL 상세 | 장바구니·주문 | 권장 처리 |\n|---|---|---|---|---|\n| 판매 중·재고 있음 | 정상 노출 | 정상 표시 | 가능 | 기본 후보 |\n| 판매 중·일시 품절 | 표시 가능하되 감점 또는 후순위 | 품절·재입고 알림 표시 | 불가 | 재입고 가능성을 보존 |\n| 일시 판매 중지 | 기본적으로 숨김 | 일시 중지 안내 | 불가 | 재개 시 복원 |\n| 판매 종료 | 검색·카테고리에서 숨김 | 종료 안내와 대체 상품 | 불가 | 기존 링크와 CS 맥락 보존 |\n| 초안·검수 중 | 완전 숨김 | 권한 있는 관리자만 | 불가 | 공개 전 검수 |\n| 리콜·법적 차단 | 완전 숨김 | 필요 시 안전 공지 | 불가 | 대체 추천보다 안전 안내 우선 |\n\n품절 상품은 재입고 알림과 검색 수요 파악에 가치가 있으므로 무조건 삭제할 필요가 없다. 반면 판매 종료 상품은 일반 목록에서 제외하되, 기존 북마크나 외부 링크로 들어온 고객에게 “판매가 종료되었습니다”라는 설명과 유사 상품을 제공할 수 있다. 상세 URL을 유지할지 `410 Gone`으로 종료할지는 검색 유입, 법적 공지 필요성, 대체 콘텐츠 가치에 따라 결정한다.\n\n### 검색 인덱스는 주문 가능 여부의 최종 권한이 아니다\n\n검색 인덱스는 동기화 지연이 생길 수 있다. 따라서 검색 결과에서 재고가 있다고 보여도 다음 단계에서 다시 검증해야 한다.\n\n- 장바구니 담기 시 판매 상태와 재고 재검증\n- 주문서 진입 시 가격, 할인, 재고 재검증\n- 결제 직전 재고 예약 또는 원자적 차감\n- 판매 중지 이벤트 발생 시 검색 인덱스 긴급 제거\n- 색인 지연 시간과 실패 건수를 모니터링\n\n이 규칙이 없으면 검색 화면은 정상인데 결제 단계에서만 실패하는 CS 사고가 반복된다.\n\n## 3. 목록 노출 방식: 페이지네이션, 더 보기, 무한 스크롤 중 무엇을 쓸 것인가\n\n상품이 수천·수만 개라면 한 번에 모두 내려보내면 안 된다. 다만 “쇼핑몰은 언제나 숫자 페이지가 정답”이라고 단정하는 것도 정확하지 않다. 비교 중심 검색에서는 위치와 상태 복원이 중요하고, 카테고리 탐색에서는 “더 보기”가 편할 수 있다.\n\n| 방식 | 강점 | 약점 | 잘 맞는 상황 |\n|---|---|---|---|\n| 숫자 페이지네이션 | 현재 위치와 결과 규모를 이해하기 쉬움, 특정 페이지 재방문 가능 | 페이지 전환이 끊기고 페이지 간 비교가 번거로움 | 데스크톱 검색, 깊은 탐색, 공유 가능한 결과 |\n| 더 보기 | 기존 상품을 유지한 채 사용자가 로딩을 통제 | 결과가 매우 많으면 DOM과 메모리가 커짐 | 모바일·카테고리 탐색, 중간 규모 결과 |\n| 무한 스크롤 | 연속 탐색이 자연스러움 | 위치·끝·전체 규모가 불명확하고 뒤로 가기 복원이 어려움 | 비교보다 발견이 중요한 피드형 화면 |\n\n실무적으로는 **검색 결과에는 페이지네이션 또는 “더 보기 + 복원 가능한 페이지 URL”**, 발견형 추천 피드에는 무한 스크롤을 우선 검토할 수 있다. 순수 무한 스크롤을 쓰더라도 다음 조건을 충족해야 한다.\n\n- 검색어, 정렬, 필터, 페이지 또는 커서를 URL이나 복원 가능한 상태에 저장\n- 상세 페이지에서 뒤로 갔을 때 이전 상품과 스크롤 위치를 복원\n- 키보드 탐색, 스크린리더, 포커스 이동을 지원\n- 푸터와 주요 탐색 링크에 접근 가능한 대안 제공\n- 로딩 실패와 재시도 UI 제공\n- 각 결과 묶음에 접근 가능한 고유 URL 또는 링크 구조 마련\n\n### 오프셋과 커서 페이지네이션\n\n`OFFSET 5000 LIMIT 40` 같은 깊은 오프셋은 데이터가 많고 갱신이 잦을수록 느려지고 중복·누락이 생기기 쉽다. 얕은 페이지와 관리자 화면에는 오프셋이 단순하지만, 대규모 검색에는 마지막 결과의 정렬 키를 넘기는 커서 방식이 안정적이다.\n\n```text\nORDER BY score DESC, product_id DESC\ncursor = last_score + last_product_id\n```\n\n점수만 커서로 쓰면 동률 상품이 빠질 수 있으므로 고유 키를 함께 사용한다. 추천 점수가 실시간으로 자주 바뀐다면 검색 세션 동안 스냅샷 버전이나 랭킹 기준 시각을 고정하는 정책도 필요하다.\n\n## 4. 검색 범위와 결과 없음 화면: 고객의 표현을 상품 데이터에 연결한다\n\n고객은 운영자가 등록한 정확한 상품명을 모른다. “사과”를 찾는 고객에게 “청송 부사”, “홍로”, “가정용 사과”를 보여주려면 상품 데이터와 검색 사전을 함께 설계해야 한다.\n\n### 검색 필드 우선순위\n\n| 필드 | 권장 우선순위 | 예시 |\n|---|---:|---|\n| SKU·모델명·바코드 | 매우 높음 | `SM-S928N`, `880...` |\n| 상품명 | 높음 | 청송 부사 사과 3kg |\n| 브랜드·제조사 | 높음 | Samsung, Apple |\n| 카테고리·상품 유형 | 중간 이상 | 과일, 러닝화 |\n| 핵심 속성 | 중간 이상 | 용량, 색상, 규격, 호환 기종 |\n| 동의어·별칭·품종·태그 | 중간 이상 | 조깅화↔러닝화, 사과↔부사 |\n| 상세 설명 | 낮음 | 긴 설명의 잡음을 줄이기 위해 낮은 가중치 |\n| 리뷰 본문 | 선택적 | 품질·스팸·개인정보 검토 후 제한적으로 사용 |\n\n한국어 검색에서는 띄어쓰기 차이, 자모 분리, 영문·한글 브랜드 표기, 숫자와 단위, 복합명사도 고려해야 한다. 예를 들어 “에어팟프로2”, “에어팟 프로 2”, “AirPods Pro 2”가 같은 상품군으로 연결되도록 정규화 규칙을 둔다.\n\n### 권장 검색 파이프라인\n\n1. 입력 길이와 허용 문자를 검증한다.\n2. 대소문자, 공백, 특수문자, 단위를 정규화한다.\n3. 상품 코드와 정확 일치를 먼저 확인한다.\n4. 토큰화와 형태·철자 변형을 적용한다.\n5. 운영자가 관리하는 동의어와 카테고리 사전을 확장한다.\n6. 텍스트 검색으로 후보를 찾는다.\n7. 필요하면 의미 검색을 보조 후보 생성에 사용한다.\n8. 판매·공개·규제 상태를 필터링한다.\n9. 유기적 점수를 계산하고 광고를 별도로 결합한다.\n10. 결과와 진단 정보를 반환한다.\n\n생성형 AI나 벡터 검색을 도입하더라도 SKU, 브랜드, 모델명 같은 정확 일치를 약화시키면 안 된다. 쇼핑 검색에서는 **정확 검색 + 텍스트 관련도 + 선택적 의미 검색**을 결합한 하이브리드 방식이 일반적으로 안전하다. AI가 카탈로그에 없는 상품, 가격, 재고를 만들어 말하지 않도록 모든 응답을 실제 상품 ID와 현재 데이터에 연결해야 한다.\n\n### 결과 없음 화면은 두 번째 진열대다\n\n검색 결과가 없을 때 빈 화면만 보여주지 않는다. 다만 관련 없는 인기 상품을 검색 결과인 것처럼 섞어서도 안 된다.\n\n권장 구성은 다음과 같다.\n\n- 사용자가 입력한 검색어를 그대로 보여주고 일치 상품이 없음을 명확히 안내\n- 오타 교정 후보와 동의어 제안\n- 필터 때문에 0건이 된 경우 제거 가능한 필터 안내\n- 범위를 넓힌 결과를 별도 라벨로 제시\n- 관련 카테고리, 대체 상품, 전체 인기 상품을 구분해 노출\n- 재입고·입점 요청 또는 고객센터 연결\n- 결과 없는 검색 이벤트를 관리자 분석에 기록\n\n“결과 없음”과 “필터 적용 후 없음”은 다른 문제다. 원래 후보는 있었지만 가격·색상 필터로 0건이 된 경우라면 필터 완화가 가장 유용하고, 카탈로그 자체에 상품이 없다면 소싱 데이터로 활용해야 한다.\n\n## 5. 검색 기록: 시장조사 데이터와 개인정보를 함께 관리한다\n\n결과 없는 검색어는 고객이 찾았지만 구매하지 못한 수요를 보여준다. 인기 검색어는 진열과 재고 계획에 도움이 되고, 검색 후 클릭·장바구니·구매 흐름은 검색 품질을 평가하는 핵심 지표가 된다.\n\n그러나 “검색어와 횟수만 저장하면 언제나 개인정보가 아니다”라고 단정할 수는 없다. 검색어 자체에 전화번호, 주문번호, 이름, 건강·종교·성생활 같은 민감한 내용이 들어갈 수 있고, 계정·IP·기기 정보와 결합되면 개인을 식별하거나 추적할 가능성이 커진다.\n\n### 권장 수집 항목\n\n| 구분 | 권장 처리 |\n|---|---|\n| 정규화된 검색어 | 일·시간 단위로 집계하고 원문 보관 기간 최소화 |\n| 결과 수 | 0건 여부와 구간값을 저장 |\n| 적용 필터·정렬 | 검색 품질 분석에 필요한 범위만 저장 |\n| 클릭·장바구니·구매 | 가능하면 검색어 단위 집계 지표로 저장 |\n| 세션 연결 | 꼭 필요할 때만 짧은 수명의 무작위 식별자 사용 |\n| 회원 ID·IP·정확 위치 | 명확한 목적과 근거가 없으면 검색 분석 로그에서 제외 |\n| 원문 내 개인정보 | 이메일·전화번호·주문번호 패턴을 마스킹하거나 폐기 |\n\n해시된 회원 ID도 자동으로 익명정보가 되는 것은 아니다. 다시 특정 사용자와 연결할 수 있으면 가명정보 또는 개인정보로 다뤄야 한다. 보관 기간도 일률적으로 정하지 말고 목적, 분석 주기, 보안 위험을 기준으로 원문과 집계 데이터에 각각 설정한다.\n\n### 관리자 대시보드에 필요한 지표\n\n- 검색량과 고유 검색어 수\n- 결과 없음 비율\n- 검색 결과 클릭률\n- 검색 후 장바구니율과 구매 전환율\n- 검색어 수정률과 필터 해제율\n- 품절 상품 노출 비율\n- 상위 결과 집중도와 브랜드 다양성\n- 광고와 유기적 결과의 성과를 분리한 지표\n- 검색 인덱스 최신성 및 색인 실패 건수\n\n저빈도 원문 검색어는 개인정보가 포함될 가능성이 있으므로 최소 집계 기준을 넘은 항목만 운영자 화면에 노출하는 방법도 유용하다.\n\n## 실전 프롬프트: 정책을 코드로 변환하는 방법\n\n개발 용어를 많이 쓰는 것보다 운영 규칙을 명확하게 쓰는 편이 중요하다. 다음 템플릿을 서비스 상황에 맞게 채워 AI에게 제공할 수 있다.\n\n```text\n우리 쇼핑몰의 상품 검색 기능을 설계하고 구현해 줘.\n\n1. 노출 자격\n- 판매 중이며 공개 상태이고 규제 차단이 없는 상품만 검색 후보에 포함한다.\n- 일시 품절은 표시하되 동일 조건의 재고 상품보다 뒤로 보낸다.\n- 판매 종료와 일시 판매 중지는 검색·카테고리에서 숨긴다.\n- 판매 종료 상품의 직접 URL에는 종료 안내와 대체 상품을 보여주고 구매 버튼은 제거한다.\n\n2. 기본 정렬\n- 검색어 관련도를 가장 크게 반영한다.\n- 최근 28일 전환율, 최근 14일 판매 속도, 보정 평점, 배송 품질을 반영한다.\n- 각 가중치는 설정 파일 또는 관리자 정책으로 변경 가능하게 한다.\n- 동률은 product_id 내림차순으로 안정적으로 정렬한다.\n- 광고 상품은 유기적 점수에 섞지 말고 별도 슬롯에 넣어 '광고'로 표시한다.\n\n3. 목록 탐색\n- 한 번에 40개씩 반환한다.\n- 검색어, 정렬, 필터, 페이지 또는 커서를 URL에서 복원할 수 있게 한다.\n- 상세 페이지에서 뒤로 가면 목록과 스크롤 위치를 복원한다.\n- 대규모 결과는 커서 페이지네이션을 사용한다.\n\n4. 검색 범위\n- SKU와 모델명 정확 일치를 최우선으로 한다.\n- 상품명, 브랜드, 카테고리, 속성, 동의어 태그를 검색한다.\n- 한국어 띄어쓰기와 영문·한글 브랜드 변형을 처리한다.\n- 결과가 없으면 오타 제안, 필터 완화, 관련 카테고리, 대체 추천을 구분해 보여준다.\n\n5. 검색 로그\n- 정규화 검색어, 시간 구간, 결과 수, 필터, 집계 클릭·구매 지표만 기본 저장한다.\n- 회원 ID와 IP는 검색 분석 로그에 저장하지 않는다.\n- 이메일, 전화번호, 주문번호 형태는 마스킹한다.\n- 원문 보관 기간과 집계 보관 기간을 설정값으로 분리한다.\n\n6. 기술 요구\n- 데이터 모델, API 계약, 검색 인덱스, 동기화 방식, 예외 처리, 관리자 지표를 함께 설계한다.\n- 실제 조회 패턴에 맞는 인덱스를 제안하고 실행 계획 확인 방법을 설명한다.\n- 검색 인덱스 지연 상황에서도 장바구니와 결제 단계에서 상태·가격·재고를 재검증한다.\n- 단위 테스트, 통합 테스트, 성능 테스트, 접근성 테스트 시나리오를 작성한다.\n\n구현을 시작하기 전에 내가 정하지 않은 정책 중 결과에 영향을 주는 결정이 있으면 먼저 질문하고, 임의로 정한 가정은 별도 목록으로 표시해 줘.\n```\n\n마지막 문장은 AI를 단순 코드 생성기에서 요구사항 검토 파트너로 바꾸는 핵심 장치다. 다만 질문만 받는 것으로 끝내지 말고, 확정된 답을 정책 문서와 테스트 조건에 반영해야 한다.\n\n## 구현 설계: 정책을 데이터와 API에 고정한다\n\n### 데이터 모델 예시\n\n```text\nproducts\n- product_id\n- sales_status\n- stock_status\n- visibility_status\n- compliance_status\n- brand_id\n- category_id\n- searchable_name\n- search_tags\n- price\n- inventory_quantity\n- ranking_feature_version\n- updated_at\n```\n\n한 필드에 여러 의미를 넣지 않는다. 예를 들어 `status = 1`만 두면 판매 가능, 공개 가능, 재고 있음, 규제 통과 중 무엇을 뜻하는지 알 수 없다. 상태 전이도 표로 관리해 초안에서 판매 중으로, 판매 중에서 종료로 이동할 때 필요한 검수와 이벤트를 정의한다.\n\n### API 응답에 포함할 정보\n\n- 정규화된 검색어\n- 적용된 정렬과 필터\n- 결과 묶음과 다음 커서\n- 결과 수 또는 근사 결과 수\n- 품절·판매 상태 배지\n- 광고 여부와 광고 표시 문구\n- 오타 교정·검색 범위 확대 여부\n- 검색 정책 버전과 추적용 요청 ID\n\n내부 디버깅 정보인 원시 점수와 사업상 민감한 가중치를 고객 API에 그대로 노출할 필요는 없다. 대신 운영자가 요청 ID로 순위 산정 경로를 재현할 수 있어야 한다.\n\n### 인덱스는 실제 조회 패턴에 맞춰 설계한다\n\n일반적으로 상태 필터와 정렬에 쓰는 열에는 B-tree 계열 인덱스를, 전문 검색 문서에는 역색인 계열을 검토한다. PostgreSQL이라면 `tsvector`와 GIN 인덱스, 유사 문자열 검색이 필요하면 `pg_trgm`을 사용할 수 있다. 외부 검색엔진을 쓰더라도 원칙은 같다.\n\n```sql\nCREATE INDEX idx_products_visibility\nON products (visibility_status, sales_status, compliance_status);\n\nCREATE INDEX idx_products_search_document\nON products USING GIN (search_document);\n```\n\n인덱스를 많이 만들수록 쓰기 비용과 저장 공간도 증가한다. 예상만으로 결정하지 말고 실제 쿼리와 데이터 분포로 `EXPLAIN ANALYZE`, 슬로 쿼리 로그, 부하 테스트를 확인한다. 상품 수가 늘어날 때는 평균 응답시간보다 p95·p99 지연, 타임아웃률, 색인 최신성을 함께 본다.\n\n### 생성형 AI를 붙일 때 추가할 안전장치\n\n- 상품 존재 여부, 가격, 재고, 배송일은 카탈로그 API 결과만 사용\n- 모델이 만든 검색어 확장은 원문과 함께 기록하고 과도한 확장을 제한\n- 정확한 SKU·모델명 검색은 의미 검색보다 우선\n- 판매 중지·리콜 필터는 AI 검색 후보에도 동일하게 적용\n- 답변에 노출한 상품 ID와 근거 필드를 추적\n- 모델 실패 시 일반 텍스트 검색으로 폴백\n- 프롬프트 주입성 문구가 상품 설명이나 리뷰에 있어도 시스템 지침으로 실행하지 않도록 분리\n\n## 출시 전 인수 테스트\n\n| 시나리오 | 기대 결과 |\n|---|---|\n| 어제 등록한 품절 상품과 꾸준히 판매되는 재고 상품이 함께 있음 | 품절 상품이 기본 상단을 차지하지 않음 |\n| 판매 종료 상품을 검색 | 목록에는 없고 직접 URL에는 종료 안내와 구매 불가 상태가 표시됨 |\n| 광고 상품이 1위 슬롯에 노출 | 카드에서 광고임을 즉시 식별 가능 |\n| 필터 적용 후 0건 | 필터 제거 제안과 원래 후보 존재 여부를 안내 |\n| “러닝화”, “조깅화” 검색 | 동의어 정책에 따라 관련 상품군이 일관되게 노출 |\n| 상세를 열었다가 뒤로 이동 | 검색어, 필터, 정렬, 목록, 스크롤 위치가 복원 |\n| 동일 점수 상품이 여러 개 | 페이지 이동을 반복해도 중복·누락 없이 고정 순서 유지 |\n| 검색 인덱스에 재고가 남아 있음 | 장바구니·결제 단계에서 최신 재고로 차단 |\n| 검색어에 이메일·전화번호가 포함 | 로그 저장 전에 마스킹 또는 폐기 |\n| 대량 동시 검색 | 정의한 p95 지연과 오류율 기준을 충족 |\n| 관리자 검색어 대시보드 | 저빈도 원문과 민감 패턴이 그대로 노출되지 않음 |\n| 랭킹 가중치 변경 | 정책 버전, 승인자, 적용 시각, 전후 지표가 기록됨 |\n\n## 운영 단계에서 반복해야 할 일\n\n검색은 한 번 개발하고 끝나는 기능이 아니다. 상품 구성, 계절, 프로모션, 고객 표현이 바뀌므로 다음 주기를 운영 프로세스로 둔다.\n\n1. 매주 결과 없는 검색어와 급증 검색어를 검토한다.\n2. 동의어와 카테고리 매핑을 승인 절차로 갱신한다.\n3. 품절 노출률, 클릭률, 전환율, 검색어 수정률을 함께 본다.\n4. 가중치 변경은 오프라인 평가와 제한된 A/B 테스트 후 확대한다.\n5. 광고·자사 상품·유기적 결과의 노출 비중을 별도로 감사한다.\n6. 검색 로그의 보관 기간, 접근 권한, 마스킹 실패를 정기 점검한다.\n7. 실제 트래픽으로 인덱스 사용률과 느린 쿼리를 재검토한다.\n\n## 결론\n\nAI는 검색 API와 화면을 빠르게 만들 수 있지만, 어떤 상품이 고객 앞에 설 자격이 있는지 결정하지는 못한다. 실전형 쇼핑몰 검색은 **정렬 기본값, 상품 상태, 목록 탐색, 검색 범위와 결과 없음 처리, 검색 로그**를 먼저 정책으로 확정하고 그 정책을 데이터 모델, API, 인덱스, 테스트, 관리자 지표에 일관되게 반영할 때 완성된다.\n\n코딩은 자동화할 수 있어도 진열 원칙과 책임은 자동으로 생기지 않는다. 가장 좋은 AI 프롬프트는 길고 어려운 개발 용어가 아니라, 운영자가 이미 결정한 정책과 아직 결정하지 않은 질문을 명확히 구분한 문서다.","content_html":"\u003cp\u003eAI는 상품 목록 API, 검색창, 정렬 버튼을 빠르게 만들 수 있다. 그러나 \u003cstrong\u003e어떤 상품을 보여주고, 어떤 상품을 숨기며, 무엇을 ‘추천’이라고 부를지\u003c/strong\u003e는 코드가 아니라 운영 정책이다. 쇼핑몰 검색은 단순한 조회 기능이 아니라 매대 배치, 광고 지면, 재고 처리, 고객 경험, 데이터 수집이 한곳에 결합된 의사결정 시스템이다.\u003c/p\u003e\n\u003cp\u003e정책을 주지 않은 채 “상품 검색 기능을 만들어 줘”라고만 지시하면 AI는 최신 등록순, 상품명 부분 일치, 단순 페이지네이션 같은 익숙한 예시를 임의로 채울 수 있다. 코드는 실행되더라도 매장 운영에는 맞지 않을 수 있다. 최신 상품이 품절인데도 첫 줄에 노출되고, 판매 종료 상품이 장바구니에 담기며, 고객이 “사과”를 검색해도 “청송 부사”를 찾지 못하는 문제가 대표적이다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EA%B2%80%EC%83%89-%EC%88%9C%EC%9C%84%EB%8A%94-%EA%B8%B0%EC%88%A0-%EA%B8%B0%EB%8A%A5%EC%9D%B4-%EC%95%84%EB%8B%88%EB%9D%BC-%EC%9A%B4%EC%98%81-%EC%A0%95%EC%B1%85%EC%9D%B4%EB%8B%A4\" class=\"anchor\" id=\"검색-순위는-기술-기능이-아니라-운영-정책이다\"\u003e\u003c/a\u003e검색 순위는 기술 기능이 아니라 운영 정책이다\u003c/h2\u003e\n\u003cp\u003e상품 진열 순서는 사업자가 설계할 수 있다. 다만 화면이 소비자에게 전달하는 의미와 실제 순위 산정 방식이 어긋나거나, 경제적 이해관계가 있는 노출을 일반 추천처럼 보이게 하면 법적·신뢰상 위험이 커진다.\u003c/p\u003e\n\u003cp\u003e공정거래위원회는 2024년 6월 쿠팡과 CPLB의 검색순위 운영 및 임직원 구매후기 작성 등을 문제 삼아 잠정 1,400억 원의 과징금을 발표했고, 같은 해 8월 의결서 기준 과징금은 1,628억 원으로 정해졌다. 사업자 측은 처분에 불복했으며, 2026년 4월 보도 기준 관련 취소소송은 계속 중이었다. 이 사례의 실무적 교훈은 “자사 상품 우대는 언제나 불법”이라는 단순 명제가 아니다. \u003cstrong\u003e추천이라는 표시가 무엇을 뜻하는지, 광고·자사 이해관계를 명확히 드러냈는지, 순위 변경을 데이터와 문서로 설명할 수 있는지\u003c/strong\u003e를 설계 단계에서 검토해야 한다는 점이다.\u003c/p\u003e\n\u003cp\u003e법률 적용은 서비스 구조와 표시 방식에 따라 달라질 수 있으므로 실제 출시 전에는 관련 법령과 최신 집행 사례를 별도로 확인하는 것이 안전하다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%ED%95%9C-%EC%A4%84-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8%EA%B0%80-%EB%A7%8C%EB%93%9C%EB%8A%94-%EB%9A%9D%EB%94%B1-%EB%B2%84%EC%A0%84%EC%9D%98-%EC%8B%A4%ED%8C%A8-%EC%A7%80%EC%A0%90\" class=\"anchor\" id=\"한-줄-프롬프트가-만드는-뚝딱-버전의-실패-지점\"\u003e\u003c/a\u003e한 줄 프롬프트가 만드는 ‘뚝딱 버전’의 실패 지점\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e미정인 정책\u003c/th\u003e\n\u003cth\u003eAI가 임의로 채울 수 있는 구현\u003c/th\u003e\n\u003cth\u003e실제 운영 위험\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e기본 정렬\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e\u003ccode\u003ecreated_at DESC\u003c/code\u003e\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e최근 등록한 품절·검수 전 상품이 상단에 노출\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e판매 상태\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e삭제 여부만 확인\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e판매 중지·리콜 상품이 검색되거나 주문 가능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e목록 로딩\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e전체 조회 또는 단순 무한 스크롤\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e느린 응답, 뒤로 가기 시 위치 상실, 비교 어려움\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e검색 범위\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e상품명만 부분 일치\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e브랜드·품종·모델명·동의어 검색 실패\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e결과 없음\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e빈 배열만 반환\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e구매 의도가 높은 고객이 즉시 이탈\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"미정인 정책\"\u003e로그\u003c/td\u003e\n\u003ctd data-label=\"AI가 임의로 채울 수 있는 구현\"\u003e검색어와 회원·IP를 그대로 저장\u003c/td\u003e\n\u003ctd data-label=\"실제 운영 위험\"\u003e목적 외 수집, 과도한 보관, 민감 검색어 노출 위험\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003eAI는 요구사항의 빈칸을 메울 수 있지만, 그 선택이 매장의 전략과 법적 책임에 맞는지는 판단하지 못한다. 따라서 구현 전에 최소한 다음 다섯 가지 정책을 문서로 확정해야 한다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#1-%EC%A0%95%EB%A0%AC-%EA%B8%B0%EB%B3%B8%EA%B0%92-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%B6%94%EC%B2%9C%EC%88%9C%EC%9D%B4%EB%9D%BC%EA%B3%A0-%EB%B6%80%EB%A5%BC-%EA%B2%83%EC%9D%B8%EA%B0%80\" class=\"anchor\" id=\"1-정렬-기본값-무엇을-추천순이라고-부를-것인가\"\u003e\u003c/a\u003e1. 정렬 기본값: 무엇을 ‘추천순’이라고 부를 것인가\u003c/h2\u003e\n\u003cp\u003e기본 정렬은 고객이 가장 먼저 보는 진열대다. 다수의 사용자는 정렬 옵션을 바꾸지 않으므로 기본값은 매출, 재고 소진, 신상품 육성, 고객 만족도에 직접 영향을 준다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EB%A8%BC%EC%A0%80-%EC%88%9C%EC%9C%84-%EC%82%B0%EC%A0%95-%EB%8B%A8%EA%B3%84%EB%A5%BC-%EB%B6%84%EB%A6%AC%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"먼저-순위-산정-단계를-분리한다\"\u003e\u003c/a\u003e먼저 순위 산정 단계를 분리한다\u003c/h3\u003e\n\u003cp\u003e검색 결과는 한 번에 섞어 계산하기보다 다음 순서로 나누는 것이 안전하다.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cstrong\u003e노출 자격 판정:\u003c/strong\u003e 판매 가능, 공개 가능, 법적·운영상 차단 대상이 아닌 상품만 후보에 포함한다.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e검색 관련도 계산:\u003c/strong\u003e 상품명, 브랜드, 카테고리, 속성, 동의어가 검색어와 얼마나 맞는지 계산한다.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e유기적 순위 계산:\u003c/strong\u003e 판매 속도, 전환율, 평점 신뢰도, 배송 품질 같은 신호를 결합한다.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e비즈니스 규칙 적용:\u003c/strong\u003e 품절 감점, 신상품 탐색 기회, 다양성 제한 등을 적용한다.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e광고 슬롯 결합:\u003c/strong\u003e 광고 상품은 유기적 순위와 분리해 삽입하고 명확히 표시한다.\u003c/li\u003e\n\u003cli\u003e\n\u003cstrong\u003e안정적 동률 처리:\u003c/strong\u003e 같은 점수일 때 \u003ccode\u003eproduct_id\u003c/code\u003e 같은 고정 키로 순서를 결정한다.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EC%B6%94%EC%B2%9C-%EC%A0%90%EC%88%98%EB%8A%94-%EB%AC%B8%EC%84%9C%ED%99%94%EB%90%9C-%EA%B3%B5%EC%8B%9D%EC%9D%B4%EC%96%B4%EC%95%BC-%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"추천-점수는-문서화된-공식이어야-한다\"\u003e\u003c/a\u003e추천 점수는 문서화된 공식이어야 한다\u003c/h3\u003e\n\u003cp\u003e다음은 구조를 설명하기 위한 예시일 뿐, 모든 쇼핑몰에 맞는 정답은 아니다.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eorganic_score =\n\u003c/span\u003e\u003cspan\u003e  0.45 × query_relevance\n\u003c/span\u003e\u003cspan\u003e+ 0.20 × conversion_rate_28d\n\u003c/span\u003e\u003cspan\u003e+ 0.15 × sales_velocity_14d\n\u003c/span\u003e\u003cspan\u003e+ 0.10 × rating_confidence\n\u003c/span\u003e\u003cspan\u003e+ 0.10 × fulfillment_quality\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e각 신호는 동일한 범위로 정규화하고, 기간과 집계 대상을 명시해야 한다. 단순 평균 별점은 리뷰 1개의 5점 상품을 리뷰 1,000개의 4.8점 상품보다 높게 만들 수 있으므로 리뷰 수를 함께 반영한 보정 점수를 쓰는 편이 낫다. 판매량만 쓰면 오래 팔린 상품이 영구적으로 유리해질 수 있으므로 최근 기간의 판매 속도와 전환율을 함께 본다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EB%B0%98%EB%93%9C%EC%8B%9C-%EC%A0%95%ED%95%B4%EC%95%BC-%ED%95%A0-%EC%84%B8%EB%B6%80-%ED%95%AD%EB%AA%A9\" class=\"anchor\" id=\"반드시-정해야-할-세부-항목\"\u003e\u003c/a\u003e반드시 정해야 할 세부 항목\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e추천순의 목표가 검색 적합도, 구매 가능성, 고객 만족, 재고 효율 중 무엇인지\u003c/li\u003e\n\u003cli\u003e각 신호의 집계 기간과 갱신 주기\u003c/li\u003e\n\u003cli\u003e취소율, 반품률, 배송 지연, 품절 가능성 같은 감점 신호\u003c/li\u003e\n\u003cli\u003e리뷰가 적은 신상품에 줄 탐색 기회와 최대 가산점\u003c/li\u003e\n\u003cli\u003e동일 브랜드나 동일 판매자가 상단을 과도하게 점유하지 않도록 할 다양성 규칙\u003c/li\u003e\n\u003cli\u003e점수 동률 시 사용할 고정 정렬 키\u003c/li\u003e\n\u003cli\u003e순위 공식의 버전, 변경 사유, 적용 시각, 승인자를 남기는 감사 기록\u003c/li\u003e\n\u003cli\u003eA/B 테스트의 성공 지표와 중단 조건\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B4%91%EA%B3%A0%EC%99%80-%EC%9C%A0%EA%B8%B0%EC%A0%81-%EC%B6%94%EC%B2%9C%EC%9D%84-%EC%84%9E%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4\" class=\"anchor\" id=\"광고와-유기적-추천을-섞지-않는다\"\u003e\u003c/a\u003e광고와 유기적 추천을 섞지 않는다\u003c/h3\u003e\n\u003cp\u003e광고비, 자사 상품 여부, 높은 마진 같은 경제적 이해관계를 반영할 수는 있지만, 이를 일반적인 “인기순”이나 “추천순”으로 오인하게 만들면 위험하다. 공정거래위원회는 2025년 고가 상품 판매 플랫폼 사건에서도 유료 옵션을 구매한 판매자의 상품이 기본 정렬에서 우선 노출되는 구조와 관련 표시를 문제 삼았다. 광고 상품은 별도 후보군과 슬롯으로 관리하고, 카드 단위에서 식별 가능한 “광고” 또는 “스폰서” 표시를 제공하는 것이 기본이다. 관리자 화면에는 광고 노출 규칙과 유기적 순위 공식을 분리해 보여줘야 한다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#2-%EB%B9%84%EC%A0%95%EC%83%81-%EC%83%81%ED%83%9C-%EC%83%81%ED%92%88-%ED%92%88%EC%A0%88%EA%B3%BC-%ED%8C%90%EB%A7%A4-%EC%A4%91%EC%A7%80%EB%8A%94-%EB%8B%A4%EB%A5%B8-%EC%83%81%ED%83%9C%EB%8B%A4\" class=\"anchor\" id=\"2-비정상-상태-상품-품절과-판매-중지는-다른-상태다\"\u003e\u003c/a\u003e2. 비정상 상태 상품: 품절과 판매 중지는 다른 상태다\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003eis_sold_out\u003c/code\u003e 하나로 모든 예외를 처리하면 검색, 상세, 장바구니, 주문 검증이 서로 어긋난다. 최소한 \u003cstrong\u003e판매 상태, 재고 상태, 공개 상태, 규제 상태\u003c/strong\u003e를 분리해야 한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B6%8C%EC%9E%A5-%EC%83%81%ED%83%9C-%EB%AA%A8%EB%8D%B8\" class=\"anchor\" id=\"권장-상태-모델\"\u003e\u003c/a\u003e권장 상태 모델\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e상태\u003c/th\u003e\n\u003cth\u003e검색·목록\u003c/th\u003e\n\u003cth\u003e직접 URL 상세\u003c/th\u003e\n\u003cth\u003e장바구니·주문\u003c/th\u003e\n\u003cth\u003e권장 처리\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e판매 중·재고 있음\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e정상 노출\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e정상 표시\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e가능\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e기본 후보\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e판매 중·일시 품절\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e표시 가능하되 감점 또는 후순위\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e품절·재입고 알림 표시\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e불가\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e재입고 가능성을 보존\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e일시 판매 중지\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e기본적으로 숨김\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e일시 중지 안내\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e불가\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e재개 시 복원\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e판매 종료\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e검색·카테고리에서 숨김\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e종료 안내와 대체 상품\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e불가\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e기존 링크와 CS 맥락 보존\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e초안·검수 중\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e완전 숨김\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e권한 있는 관리자만\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e불가\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e공개 전 검수\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"상태\"\u003e리콜·법적 차단\u003c/td\u003e\n\u003ctd data-label=\"검색·목록\"\u003e완전 숨김\u003c/td\u003e\n\u003ctd data-label=\"직접 URL 상세\"\u003e필요 시 안전 공지\u003c/td\u003e\n\u003ctd data-label=\"장바구니·주문\"\u003e불가\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e대체 추천보다 안전 안내 우선\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e품절 상품은 재입고 알림과 검색 수요 파악에 가치가 있으므로 무조건 삭제할 필요가 없다. 반면 판매 종료 상품은 일반 목록에서 제외하되, 기존 북마크나 외부 링크로 들어온 고객에게 “판매가 종료되었습니다”라는 설명과 유사 상품을 제공할 수 있다. 상세 URL을 유지할지 \u003ccode\u003e410 Gone\u003c/code\u003e으로 종료할지는 검색 유입, 법적 공지 필요성, 대체 콘텐츠 가치에 따라 결정한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B2%80%EC%83%89-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%8A%94-%EC%A3%BC%EB%AC%B8-%EA%B0%80%EB%8A%A5-%EC%97%AC%EB%B6%80%EC%9D%98-%EC%B5%9C%EC%A2%85-%EA%B6%8C%ED%95%9C%EC%9D%B4-%EC%95%84%EB%8B%88%EB%8B%A4\" class=\"anchor\" id=\"검색-인덱스는-주문-가능-여부의-최종-권한이-아니다\"\u003e\u003c/a\u003e검색 인덱스는 주문 가능 여부의 최종 권한이 아니다\u003c/h3\u003e\n\u003cp\u003e검색 인덱스는 동기화 지연이 생길 수 있다. 따라서 검색 결과에서 재고가 있다고 보여도 다음 단계에서 다시 검증해야 한다.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e장바구니 담기 시 판매 상태와 재고 재검증\u003c/li\u003e\n\u003cli\u003e주문서 진입 시 가격, 할인, 재고 재검증\u003c/li\u003e\n\u003cli\u003e결제 직전 재고 예약 또는 원자적 차감\u003c/li\u003e\n\u003cli\u003e판매 중지 이벤트 발생 시 검색 인덱스 긴급 제거\u003c/li\u003e\n\u003cli\u003e색인 지연 시간과 실패 건수를 모니터링\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e이 규칙이 없으면 검색 화면은 정상인데 결제 단계에서만 실패하는 CS 사고가 반복된다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#3-%EB%AA%A9%EB%A1%9D-%EB%85%B8%EC%B6%9C-%EB%B0%A9%EC%8B%9D-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%84%A4%EC%9D%B4%EC%85%98-%EB%8D%94-%EB%B3%B4%EA%B8%B0-%EB%AC%B4%ED%95%9C-%EC%8A%A4%ED%81%AC%EB%A1%A4-%EC%A4%91-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%93%B8-%EA%B2%83%EC%9D%B8%EA%B0%80\" class=\"anchor\" id=\"3-목록-노출-방식-페이지네이션-더-보기-무한-스크롤-중-무엇을-쓸-것인가\"\u003e\u003c/a\u003e3. 목록 노출 방식: 페이지네이션, 더 보기, 무한 스크롤 중 무엇을 쓸 것인가\u003c/h2\u003e\n\u003cp\u003e상품이 수천·수만 개라면 한 번에 모두 내려보내면 안 된다. 다만 “쇼핑몰은 언제나 숫자 페이지가 정답”이라고 단정하는 것도 정확하지 않다. 비교 중심 검색에서는 위치와 상태 복원이 중요하고, 카테고리 탐색에서는 “더 보기”가 편할 수 있다.\u003c/p\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e방식\u003c/th\u003e\n\u003cth\u003e강점\u003c/th\u003e\n\u003cth\u003e약점\u003c/th\u003e\n\u003cth\u003e잘 맞는 상황\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"방식\"\u003e숫자 페이지네이션\u003c/td\u003e\n\u003ctd data-label=\"강점\"\u003e현재 위치와 결과 규모를 이해하기 쉬움, 특정 페이지 재방문 가능\u003c/td\u003e\n\u003ctd data-label=\"약점\"\u003e페이지 전환이 끊기고 페이지 간 비교가 번거로움\u003c/td\u003e\n\u003ctd data-label=\"잘 맞는 상황\"\u003e데스크톱 검색, 깊은 탐색, 공유 가능한 결과\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"방식\"\u003e더 보기\u003c/td\u003e\n\u003ctd data-label=\"강점\"\u003e기존 상품을 유지한 채 사용자가 로딩을 통제\u003c/td\u003e\n\u003ctd data-label=\"약점\"\u003e결과가 매우 많으면 DOM과 메모리가 커짐\u003c/td\u003e\n\u003ctd data-label=\"잘 맞는 상황\"\u003e모바일·카테고리 탐색, 중간 규모 결과\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"방식\"\u003e무한 스크롤\u003c/td\u003e\n\u003ctd data-label=\"강점\"\u003e연속 탐색이 자연스러움\u003c/td\u003e\n\u003ctd data-label=\"약점\"\u003e위치·끝·전체 규모가 불명확하고 뒤로 가기 복원이 어려움\u003c/td\u003e\n\u003ctd data-label=\"잘 맞는 상황\"\u003e비교보다 발견이 중요한 피드형 화면\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e실무적으로는 \u003cstrong\u003e검색 결과에는 페이지네이션 또는 “더 보기 + 복원 가능한 페이지 URL”\u003c/strong\u003e, 발견형 추천 피드에는 무한 스크롤을 우선 검토할 수 있다. 순수 무한 스크롤을 쓰더라도 다음 조건을 충족해야 한다.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e검색어, 정렬, 필터, 페이지 또는 커서를 URL이나 복원 가능한 상태에 저장\u003c/li\u003e\n\u003cli\u003e상세 페이지에서 뒤로 갔을 때 이전 상품과 스크롤 위치를 복원\u003c/li\u003e\n\u003cli\u003e키보드 탐색, 스크린리더, 포커스 이동을 지원\u003c/li\u003e\n\u003cli\u003e푸터와 주요 탐색 링크에 접근 가능한 대안 제공\u003c/li\u003e\n\u003cli\u003e로딩 실패와 재시도 UI 제공\u003c/li\u003e\n\u003cli\u003e각 결과 묶음에 접근 가능한 고유 URL 또는 링크 구조 마련\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EC%98%A4%ED%94%84%EC%85%8B%EA%B3%BC-%EC%BB%A4%EC%84%9C-%ED%8E%98%EC%9D%B4%EC%A7%80%EB%84%A4%EC%9D%B4%EC%85%98\" class=\"anchor\" id=\"오프셋과-커서-페이지네이션\"\u003e\u003c/a\u003e오프셋과 커서 페이지네이션\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eOFFSET 5000 LIMIT 40\u003c/code\u003e 같은 깊은 오프셋은 데이터가 많고 갱신이 잦을수록 느려지고 중복·누락이 생기기 쉽다. 얕은 페이지와 관리자 화면에는 오프셋이 단순하지만, 대규모 검색에는 마지막 결과의 정렬 키를 넘기는 커서 방식이 안정적이다.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eORDER BY score DESC, product_id DESC\n\u003c/span\u003e\u003cspan\u003ecursor = last_score + last_product_id\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e점수만 커서로 쓰면 동률 상품이 빠질 수 있으므로 고유 키를 함께 사용한다. 추천 점수가 실시간으로 자주 바뀐다면 검색 세션 동안 스냅샷 버전이나 랭킹 기준 시각을 고정하는 정책도 필요하다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#4-%EA%B2%80%EC%83%89-%EB%B2%94%EC%9C%84%EC%99%80-%EA%B2%B0%EA%B3%BC-%EC%97%86%EC%9D%8C-%ED%99%94%EB%A9%B4-%EA%B3%A0%EA%B0%9D%EC%9D%98-%ED%91%9C%ED%98%84%EC%9D%84-%EC%83%81%ED%92%88-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%97%90-%EC%97%B0%EA%B2%B0%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"4-검색-범위와-결과-없음-화면-고객의-표현을-상품-데이터에-연결한다\"\u003e\u003c/a\u003e4. 검색 범위와 결과 없음 화면: 고객의 표현을 상품 데이터에 연결한다\u003c/h2\u003e\n\u003cp\u003e고객은 운영자가 등록한 정확한 상품명을 모른다. “사과”를 찾는 고객에게 “청송 부사”, “홍로”, “가정용 사과”를 보여주려면 상품 데이터와 검색 사전을 함께 설계해야 한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B2%80%EC%83%89-%ED%95%84%EB%93%9C-%EC%9A%B0%EC%84%A0%EC%88%9C%EC%9C%84\" class=\"anchor\" id=\"검색-필드-우선순위\"\u003e\u003c/a\u003e검색 필드 우선순위\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e필드\u003c/th\u003e\n\u003cth\u003e권장 우선순위\u003c/th\u003e\n\u003cth\u003e예시\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003eSKU·모델명·바코드\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e매우 높음\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e\n\u003ccode\u003eSM-S928N\u003c/code\u003e, \u003ccode\u003e880...\u003c/code\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e상품명\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e높음\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e청송 부사 사과 3kg\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e브랜드·제조사\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e높음\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003eSamsung, Apple\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e카테고리·상품 유형\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e중간 이상\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e과일, 러닝화\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e핵심 속성\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e중간 이상\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e용량, 색상, 규격, 호환 기종\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e동의어·별칭·품종·태그\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e중간 이상\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e조깅화↔러닝화, 사과↔부사\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e상세 설명\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e낮음\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e긴 설명의 잡음을 줄이기 위해 낮은 가중치\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"필드\"\u003e리뷰 본문\u003c/td\u003e\n\u003ctd data-label=\"권장 우선순위\"\u003e선택적\u003c/td\u003e\n\u003ctd data-label=\"예시\"\u003e품질·스팸·개인정보 검토 후 제한적으로 사용\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e한국어 검색에서는 띄어쓰기 차이, 자모 분리, 영문·한글 브랜드 표기, 숫자와 단위, 복합명사도 고려해야 한다. 예를 들어 “에어팟프로2”, “에어팟 프로 2”, “AirPods Pro 2”가 같은 상품군으로 연결되도록 정규화 규칙을 둔다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B6%8C%EC%9E%A5-%EA%B2%80%EC%83%89-%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8\" class=\"anchor\" id=\"권장-검색-파이프라인\"\u003e\u003c/a\u003e권장 검색 파이프라인\u003c/h3\u003e\n\u003col\u003e\n\u003cli\u003e입력 길이와 허용 문자를 검증한다.\u003c/li\u003e\n\u003cli\u003e대소문자, 공백, 특수문자, 단위를 정규화한다.\u003c/li\u003e\n\u003cli\u003e상품 코드와 정확 일치를 먼저 확인한다.\u003c/li\u003e\n\u003cli\u003e토큰화와 형태·철자 변형을 적용한다.\u003c/li\u003e\n\u003cli\u003e운영자가 관리하는 동의어와 카테고리 사전을 확장한다.\u003c/li\u003e\n\u003cli\u003e텍스트 검색으로 후보를 찾는다.\u003c/li\u003e\n\u003cli\u003e필요하면 의미 검색을 보조 후보 생성에 사용한다.\u003c/li\u003e\n\u003cli\u003e판매·공개·규제 상태를 필터링한다.\u003c/li\u003e\n\u003cli\u003e유기적 점수를 계산하고 광고를 별도로 결합한다.\u003c/li\u003e\n\u003cli\u003e결과와 진단 정보를 반환한다.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e생성형 AI나 벡터 검색을 도입하더라도 SKU, 브랜드, 모델명 같은 정확 일치를 약화시키면 안 된다. 쇼핑 검색에서는 \u003cstrong\u003e정확 검색 + 텍스트 관련도 + 선택적 의미 검색\u003c/strong\u003e을 결합한 하이브리드 방식이 일반적으로 안전하다. AI가 카탈로그에 없는 상품, 가격, 재고를 만들어 말하지 않도록 모든 응답을 실제 상품 ID와 현재 데이터에 연결해야 한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B2%B0%EA%B3%BC-%EC%97%86%EC%9D%8C-%ED%99%94%EB%A9%B4%EC%9D%80-%EB%91%90-%EB%B2%88%EC%A7%B8-%EC%A7%84%EC%97%B4%EB%8C%80%EB%8B%A4\" class=\"anchor\" id=\"결과-없음-화면은-두-번째-진열대다\"\u003e\u003c/a\u003e결과 없음 화면은 두 번째 진열대다\u003c/h3\u003e\n\u003cp\u003e검색 결과가 없을 때 빈 화면만 보여주지 않는다. 다만 관련 없는 인기 상품을 검색 결과인 것처럼 섞어서도 안 된다.\u003c/p\u003e\n\u003cp\u003e권장 구성은 다음과 같다.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e사용자가 입력한 검색어를 그대로 보여주고 일치 상품이 없음을 명확히 안내\u003c/li\u003e\n\u003cli\u003e오타 교정 후보와 동의어 제안\u003c/li\u003e\n\u003cli\u003e필터 때문에 0건이 된 경우 제거 가능한 필터 안내\u003c/li\u003e\n\u003cli\u003e범위를 넓힌 결과를 별도 라벨로 제시\u003c/li\u003e\n\u003cli\u003e관련 카테고리, 대체 상품, 전체 인기 상품을 구분해 노출\u003c/li\u003e\n\u003cli\u003e재입고·입점 요청 또는 고객센터 연결\u003c/li\u003e\n\u003cli\u003e결과 없는 검색 이벤트를 관리자 분석에 기록\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e“결과 없음”과 “필터 적용 후 없음”은 다른 문제다. 원래 후보는 있었지만 가격·색상 필터로 0건이 된 경우라면 필터 완화가 가장 유용하고, 카탈로그 자체에 상품이 없다면 소싱 데이터로 활용해야 한다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#5-%EA%B2%80%EC%83%89-%EA%B8%B0%EB%A1%9D-%EC%8B%9C%EC%9E%A5%EC%A1%B0%EC%82%AC-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-%EA%B0%9C%EC%9D%B8%EC%A0%95%EB%B3%B4%EB%A5%BC-%ED%95%A8%EA%BB%98-%EA%B4%80%EB%A6%AC%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"5-검색-기록-시장조사-데이터와-개인정보를-함께-관리한다\"\u003e\u003c/a\u003e5. 검색 기록: 시장조사 데이터와 개인정보를 함께 관리한다\u003c/h2\u003e\n\u003cp\u003e결과 없는 검색어는 고객이 찾았지만 구매하지 못한 수요를 보여준다. 인기 검색어는 진열과 재고 계획에 도움이 되고, 검색 후 클릭·장바구니·구매 흐름은 검색 품질을 평가하는 핵심 지표가 된다.\u003c/p\u003e\n\u003cp\u003e그러나 “검색어와 횟수만 저장하면 언제나 개인정보가 아니다”라고 단정할 수는 없다. 검색어 자체에 전화번호, 주문번호, 이름, 건강·종교·성생활 같은 민감한 내용이 들어갈 수 있고, 계정·IP·기기 정보와 결합되면 개인을 식별하거나 추적할 가능성이 커진다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B6%8C%EC%9E%A5-%EC%88%98%EC%A7%91-%ED%95%AD%EB%AA%A9\" class=\"anchor\" id=\"권장-수집-항목\"\u003e\u003c/a\u003e권장 수집 항목\u003c/h3\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e구분\u003c/th\u003e\n\u003cth\u003e권장 처리\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e정규화된 검색어\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e일·시간 단위로 집계하고 원문 보관 기간 최소화\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e결과 수\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e0건 여부와 구간값을 저장\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e적용 필터·정렬\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e검색 품질 분석에 필요한 범위만 저장\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e클릭·장바구니·구매\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e가능하면 검색어 단위 집계 지표로 저장\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e세션 연결\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e꼭 필요할 때만 짧은 수명의 무작위 식별자 사용\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e회원 ID·IP·정확 위치\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e명확한 목적과 근거가 없으면 검색 분석 로그에서 제외\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"구분\"\u003e원문 내 개인정보\u003c/td\u003e\n\u003ctd data-label=\"권장 처리\"\u003e이메일·전화번호·주문번호 패턴을 마스킹하거나 폐기\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003cp\u003e해시된 회원 ID도 자동으로 익명정보가 되는 것은 아니다. 다시 특정 사용자와 연결할 수 있으면 가명정보 또는 개인정보로 다뤄야 한다. 보관 기간도 일률적으로 정하지 말고 목적, 분석 주기, 보안 위험을 기준으로 원문과 집계 데이터에 각각 설정한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EA%B4%80%EB%A6%AC%EC%9E%90-%EB%8C%80%EC%8B%9C%EB%B3%B4%EB%93%9C%EC%97%90-%ED%95%84%EC%9A%94%ED%95%9C-%EC%A7%80%ED%91%9C\" class=\"anchor\" id=\"관리자-대시보드에-필요한-지표\"\u003e\u003c/a\u003e관리자 대시보드에 필요한 지표\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e검색량과 고유 검색어 수\u003c/li\u003e\n\u003cli\u003e결과 없음 비율\u003c/li\u003e\n\u003cli\u003e검색 결과 클릭률\u003c/li\u003e\n\u003cli\u003e검색 후 장바구니율과 구매 전환율\u003c/li\u003e\n\u003cli\u003e검색어 수정률과 필터 해제율\u003c/li\u003e\n\u003cli\u003e품절 상품 노출 비율\u003c/li\u003e\n\u003cli\u003e상위 결과 집중도와 브랜드 다양성\u003c/li\u003e\n\u003cli\u003e광고와 유기적 결과의 성과를 분리한 지표\u003c/li\u003e\n\u003cli\u003e검색 인덱스 최신성 및 색인 실패 건수\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e저빈도 원문 검색어는 개인정보가 포함될 가능성이 있으므로 최소 집계 기준을 넘은 항목만 운영자 화면에 노출하는 방법도 유용하다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%8B%A4%EC%A0%84-%ED%94%84%EB%A1%AC%ED%94%84%ED%8A%B8-%EC%A0%95%EC%B1%85%EC%9D%84-%EC%BD%94%EB%93%9C%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95\" class=\"anchor\" id=\"실전-프롬프트-정책을-코드로-변환하는-방법\"\u003e\u003c/a\u003e실전 프롬프트: 정책을 코드로 변환하는 방법\u003c/h2\u003e\n\u003cp\u003e개발 용어를 많이 쓰는 것보다 운영 규칙을 명확하게 쓰는 편이 중요하다. 다음 템플릿을 서비스 상황에 맞게 채워 AI에게 제공할 수 있다.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003e우리 쇼핑몰의 상품 검색 기능을 설계하고 구현해 줘.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e1. 노출 자격\n\u003c/span\u003e\u003cspan\u003e- 판매 중이며 공개 상태이고 규제 차단이 없는 상품만 검색 후보에 포함한다.\n\u003c/span\u003e\u003cspan\u003e- 일시 품절은 표시하되 동일 조건의 재고 상품보다 뒤로 보낸다.\n\u003c/span\u003e\u003cspan\u003e- 판매 종료와 일시 판매 중지는 검색·카테고리에서 숨긴다.\n\u003c/span\u003e\u003cspan\u003e- 판매 종료 상품의 직접 URL에는 종료 안내와 대체 상품을 보여주고 구매 버튼은 제거한다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e2. 기본 정렬\n\u003c/span\u003e\u003cspan\u003e- 검색어 관련도를 가장 크게 반영한다.\n\u003c/span\u003e\u003cspan\u003e- 최근 28일 전환율, 최근 14일 판매 속도, 보정 평점, 배송 품질을 반영한다.\n\u003c/span\u003e\u003cspan\u003e- 각 가중치는 설정 파일 또는 관리자 정책으로 변경 가능하게 한다.\n\u003c/span\u003e\u003cspan\u003e- 동률은 product_id 내림차순으로 안정적으로 정렬한다.\n\u003c/span\u003e\u003cspan\u003e- 광고 상품은 유기적 점수에 섞지 말고 별도 슬롯에 넣어 '광고'로 표시한다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e3. 목록 탐색\n\u003c/span\u003e\u003cspan\u003e- 한 번에 40개씩 반환한다.\n\u003c/span\u003e\u003cspan\u003e- 검색어, 정렬, 필터, 페이지 또는 커서를 URL에서 복원할 수 있게 한다.\n\u003c/span\u003e\u003cspan\u003e- 상세 페이지에서 뒤로 가면 목록과 스크롤 위치를 복원한다.\n\u003c/span\u003e\u003cspan\u003e- 대규모 결과는 커서 페이지네이션을 사용한다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e4. 검색 범위\n\u003c/span\u003e\u003cspan\u003e- SKU와 모델명 정확 일치를 최우선으로 한다.\n\u003c/span\u003e\u003cspan\u003e- 상품명, 브랜드, 카테고리, 속성, 동의어 태그를 검색한다.\n\u003c/span\u003e\u003cspan\u003e- 한국어 띄어쓰기와 영문·한글 브랜드 변형을 처리한다.\n\u003c/span\u003e\u003cspan\u003e- 결과가 없으면 오타 제안, 필터 완화, 관련 카테고리, 대체 추천을 구분해 보여준다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e5. 검색 로그\n\u003c/span\u003e\u003cspan\u003e- 정규화 검색어, 시간 구간, 결과 수, 필터, 집계 클릭·구매 지표만 기본 저장한다.\n\u003c/span\u003e\u003cspan\u003e- 회원 ID와 IP는 검색 분석 로그에 저장하지 않는다.\n\u003c/span\u003e\u003cspan\u003e- 이메일, 전화번호, 주문번호 형태는 마스킹한다.\n\u003c/span\u003e\u003cspan\u003e- 원문 보관 기간과 집계 보관 기간을 설정값으로 분리한다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e6. 기술 요구\n\u003c/span\u003e\u003cspan\u003e- 데이터 모델, API 계약, 검색 인덱스, 동기화 방식, 예외 처리, 관리자 지표를 함께 설계한다.\n\u003c/span\u003e\u003cspan\u003e- 실제 조회 패턴에 맞는 인덱스를 제안하고 실행 계획 확인 방법을 설명한다.\n\u003c/span\u003e\u003cspan\u003e- 검색 인덱스 지연 상황에서도 장바구니와 결제 단계에서 상태·가격·재고를 재검증한다.\n\u003c/span\u003e\u003cspan\u003e- 단위 테스트, 통합 테스트, 성능 테스트, 접근성 테스트 시나리오를 작성한다.\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003e구현을 시작하기 전에 내가 정하지 않은 정책 중 결과에 영향을 주는 결정이 있으면 먼저 질문하고, 임의로 정한 가정은 별도 목록으로 표시해 줘.\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e마지막 문장은 AI를 단순 코드 생성기에서 요구사항 검토 파트너로 바꾸는 핵심 장치다. 다만 질문만 받는 것으로 끝내지 말고, 확정된 답을 정책 문서와 테스트 조건에 반영해야 한다.\u003c/p\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EA%B5%AC%ED%98%84-%EC%84%A4%EA%B3%84-%EC%A0%95%EC%B1%85%EC%9D%84-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%99%80-api%EC%97%90-%EA%B3%A0%EC%A0%95%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"구현-설계-정책을-데이터와-api에-고정한다\"\u003e\u003c/a\u003e구현 설계: 정책을 데이터와 API에 고정한다\u003c/h2\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8-%EC%98%88%EC%8B%9C\" class=\"anchor\" id=\"데이터-모델-예시\"\u003e\u003c/a\u003e데이터 모델 예시\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eproducts\n\u003c/span\u003e\u003cspan\u003e- product_id\n\u003c/span\u003e\u003cspan\u003e- sales_status\n\u003c/span\u003e\u003cspan\u003e- stock_status\n\u003c/span\u003e\u003cspan\u003e- visibility_status\n\u003c/span\u003e\u003cspan\u003e- compliance_status\n\u003c/span\u003e\u003cspan\u003e- brand_id\n\u003c/span\u003e\u003cspan\u003e- category_id\n\u003c/span\u003e\u003cspan\u003e- searchable_name\n\u003c/span\u003e\u003cspan\u003e- search_tags\n\u003c/span\u003e\u003cspan\u003e- price\n\u003c/span\u003e\u003cspan\u003e- inventory_quantity\n\u003c/span\u003e\u003cspan\u003e- ranking_feature_version\n\u003c/span\u003e\u003cspan\u003e- updated_at\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e한 필드에 여러 의미를 넣지 않는다. 예를 들어 \u003ccode\u003estatus = 1\u003c/code\u003e만 두면 판매 가능, 공개 가능, 재고 있음, 규제 통과 중 무엇을 뜻하는지 알 수 없다. 상태 전이도 표로 관리해 초안에서 판매 중으로, 판매 중에서 종료로 이동할 때 필요한 검수와 이벤트를 정의한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#api-%EC%9D%91%EB%8B%B5%EC%97%90-%ED%8F%AC%ED%95%A8%ED%95%A0-%EC%A0%95%EB%B3%B4\" class=\"anchor\" id=\"api-응답에-포함할-정보\"\u003e\u003c/a\u003eAPI 응답에 포함할 정보\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e정규화된 검색어\u003c/li\u003e\n\u003cli\u003e적용된 정렬과 필터\u003c/li\u003e\n\u003cli\u003e결과 묶음과 다음 커서\u003c/li\u003e\n\u003cli\u003e결과 수 또는 근사 결과 수\u003c/li\u003e\n\u003cli\u003e품절·판매 상태 배지\u003c/li\u003e\n\u003cli\u003e광고 여부와 광고 표시 문구\u003c/li\u003e\n\u003cli\u003e오타 교정·검색 범위 확대 여부\u003c/li\u003e\n\u003cli\u003e검색 정책 버전과 추적용 요청 ID\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e내부 디버깅 정보인 원시 점수와 사업상 민감한 가중치를 고객 API에 그대로 노출할 필요는 없다. 대신 운영자가 요청 ID로 순위 산정 경로를 재현할 수 있어야 한다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%8A%94-%EC%8B%A4%EC%A0%9C-%EC%A1%B0%ED%9A%8C-%ED%8C%A8%ED%84%B4%EC%97%90-%EB%A7%9E%EC%B6%B0-%EC%84%A4%EA%B3%84%ED%95%9C%EB%8B%A4\" class=\"anchor\" id=\"인덱스는-실제-조회-패턴에-맞춰-설계한다\"\u003e\u003c/a\u003e인덱스는 실제 조회 패턴에 맞춰 설계한다\u003c/h3\u003e\n\u003cp\u003e일반적으로 상태 필터와 정렬에 쓰는 열에는 B-tree 계열 인덱스를, 전문 검색 문서에는 역색인 계열을 검토한다. PostgreSQL이라면 \u003ccode\u003etsvector\u003c/code\u003e와 GIN 인덱스, 유사 문자열 검색이 필요하면 \u003ccode\u003epg_trgm\u003c/code\u003e을 사용할 수 있다. 외부 검색엔진을 쓰더라도 원칙은 같다.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e\u003cspan\u003eCREATE INDEX \u003c/span\u003e\u003cspan\u003eidx_products_visibility\n\u003c/span\u003e\u003cspan\u003eON\u003c/span\u003e\u003cspan\u003e products (visibility_status, sales_status, compliance_status);\n\u003c/span\u003e\u003cspan\u003e\n\u003c/span\u003e\u003cspan\u003eCREATE INDEX \u003c/span\u003e\u003cspan\u003eidx_products_search_document\n\u003c/span\u003e\u003cspan\u003eON\u003c/span\u003e\u003cspan\u003e products USING GIN (search_document);\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e인덱스를 많이 만들수록 쓰기 비용과 저장 공간도 증가한다. 예상만으로 결정하지 말고 실제 쿼리와 데이터 분포로 \u003ccode\u003eEXPLAIN ANALYZE\u003c/code\u003e, 슬로 쿼리 로그, 부하 테스트를 확인한다. 상품 수가 늘어날 때는 평균 응답시간보다 p95·p99 지연, 타임아웃률, 색인 최신성을 함께 본다.\u003c/p\u003e\n\u003ch3\u003e\n\u003ca href=\"#%EC%83%9D%EC%84%B1%ED%98%95-ai%EB%A5%BC-%EB%B6%99%EC%9D%BC-%EB%95%8C-%EC%B6%94%EA%B0%80%ED%95%A0-%EC%95%88%EC%A0%84%EC%9E%A5%EC%B9%98\" class=\"anchor\" id=\"생성형-ai를-붙일-때-추가할-안전장치\"\u003e\u003c/a\u003e생성형 AI를 붙일 때 추가할 안전장치\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e상품 존재 여부, 가격, 재고, 배송일은 카탈로그 API 결과만 사용\u003c/li\u003e\n\u003cli\u003e모델이 만든 검색어 확장은 원문과 함께 기록하고 과도한 확장을 제한\u003c/li\u003e\n\u003cli\u003e정확한 SKU·모델명 검색은 의미 검색보다 우선\u003c/li\u003e\n\u003cli\u003e판매 중지·리콜 필터는 AI 검색 후보에도 동일하게 적용\u003c/li\u003e\n\u003cli\u003e답변에 노출한 상품 ID와 근거 필드를 추적\u003c/li\u003e\n\u003cli\u003e모델 실패 시 일반 텍스트 검색으로 폴백\u003c/li\u003e\n\u003cli\u003e프롬프트 주입성 문구가 상품 설명이나 리뷰에 있어도 시스템 지침으로 실행하지 않도록 분리\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%B6%9C%EC%8B%9C-%EC%A0%84-%EC%9D%B8%EC%88%98-%ED%85%8C%EC%8A%A4%ED%8A%B8\" class=\"anchor\" id=\"출시-전-인수-테스트\"\u003e\u003c/a\u003e출시 전 인수 테스트\u003c/h2\u003e\n\u003cdiv class=\"overflow-x-auto\"\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e시나리오\u003c/th\u003e\n\u003cth\u003e기대 결과\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e어제 등록한 품절 상품과 꾸준히 판매되는 재고 상품이 함께 있음\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e품절 상품이 기본 상단을 차지하지 않음\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e판매 종료 상품을 검색\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e목록에는 없고 직접 URL에는 종료 안내와 구매 불가 상태가 표시됨\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e광고 상품이 1위 슬롯에 노출\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e카드에서 광고임을 즉시 식별 가능\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e필터 적용 후 0건\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e필터 제거 제안과 원래 후보 존재 여부를 안내\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e“러닝화”, “조깅화” 검색\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e동의어 정책에 따라 관련 상품군이 일관되게 노출\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e상세를 열었다가 뒤로 이동\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e검색어, 필터, 정렬, 목록, 스크롤 위치가 복원\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e동일 점수 상품이 여러 개\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e페이지 이동을 반복해도 중복·누락 없이 고정 순서 유지\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e검색 인덱스에 재고가 남아 있음\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e장바구니·결제 단계에서 최신 재고로 차단\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e검색어에 이메일·전화번호가 포함\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e로그 저장 전에 마스킹 또는 폐기\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e대량 동시 검색\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e정의한 p95 지연과 오류율 기준을 충족\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e관리자 검색어 대시보드\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e저빈도 원문과 민감 패턴이 그대로 노출되지 않음\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd data-label=\"시나리오\"\u003e랭킹 가중치 변경\u003c/td\u003e\n\u003ctd data-label=\"기대 결과\"\u003e정책 버전, 승인자, 적용 시각, 전후 지표가 기록됨\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/div\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EC%9A%B4%EC%98%81-%EB%8B%A8%EA%B3%84%EC%97%90%EC%84%9C-%EB%B0%98%EB%B3%B5%ED%95%B4%EC%95%BC-%ED%95%A0-%EC%9D%BC\" class=\"anchor\" id=\"운영-단계에서-반복해야-할-일\"\u003e\u003c/a\u003e운영 단계에서 반복해야 할 일\u003c/h2\u003e\n\u003cp\u003e검색은 한 번 개발하고 끝나는 기능이 아니다. 상품 구성, 계절, 프로모션, 고객 표현이 바뀌므로 다음 주기를 운영 프로세스로 둔다.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e매주 결과 없는 검색어와 급증 검색어를 검토한다.\u003c/li\u003e\n\u003cli\u003e동의어와 카테고리 매핑을 승인 절차로 갱신한다.\u003c/li\u003e\n\u003cli\u003e품절 노출률, 클릭률, 전환율, 검색어 수정률을 함께 본다.\u003c/li\u003e\n\u003cli\u003e가중치 변경은 오프라인 평가와 제한된 A/B 테스트 후 확대한다.\u003c/li\u003e\n\u003cli\u003e광고·자사 상품·유기적 결과의 노출 비중을 별도로 감사한다.\u003c/li\u003e\n\u003cli\u003e검색 로그의 보관 기간, 접근 권한, 마스킹 실패를 정기 점검한다.\u003c/li\u003e\n\u003cli\u003e실제 트래픽으로 인덱스 사용률과 느린 쿼리를 재검토한다.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003e\n\u003ca href=\"#%EA%B2%B0%EB%A1%A0\" class=\"anchor\" id=\"결론\"\u003e\u003c/a\u003e결론\u003c/h2\u003e\n\u003cp\u003eAI는 검색 API와 화면을 빠르게 만들 수 있지만, 어떤 상품이 고객 앞에 설 자격이 있는지 결정하지는 못한다. 실전형 쇼핑몰 검색은 \u003cstrong\u003e정렬 기본값, 상품 상태, 목록 탐색, 검색 범위와 결과 없음 처리, 검색 로그\u003c/strong\u003e를 먼저 정책으로 확정하고 그 정책을 데이터 모델, API, 인덱스, 테스트, 관리자 지표에 일관되게 반영할 때 완성된다.\u003c/p\u003e\n\u003cp\u003e코딩은 자동화할 수 있어도 진열 원칙과 책임은 자동으로 생기지 않는다. 가장 좋은 AI 프롬프트는 길고 어려운 개발 용어가 아니라, 운영자가 이미 결정한 정책과 아직 결정하지 않은 질문을 명확히 구분한 문서다.\u003c/p\u003e\n","tags":["AI 개발","쇼핑몰 검색","검색 정책","이커머스 운영","검색 UX"],"faqs":[{"question":"쇼핑몰 검색의 기본 정렬을 최신 등록순으로 두면 왜 문제가 되나요?","answer":"최신 등록순은 등록 시각만 반영하므로 품절, 검수 전, 판매성이 낮은 상품이 상단을 차지할 수 있습니다. 검색어 관련도와 판매 가능 상태를 먼저 보장한 뒤 전환율, 판매 속도, 평점 신뢰도 같은 신호를 조합하는 편이 안전합니다."},{"question":"추천순 가중치는 AI가 자동으로 정하게 해도 되나요?","answer":"AI는 후보 공식을 제안하고 시뮬레이션 코드를 만들 수 있지만 목표와 허용 범위는 운영자가 정해야 합니다. 가중치는 과거 데이터로 오프라인 평가하고, 제한된 A/B 테스트와 중단 조건을 거쳐 변경해야 합니다."},{"question":"품절 상품은 검색 결과에서 완전히 숨겨야 하나요?","answer":"재입고 가능성이 있고 고객이 재입고 알림을 사용할 수 있다면 완전 삭제보다 품절 배지와 후순위 배치가 유용합니다. 장기 품절이나 공급 중단 상품은 별도 기준으로 숨기고, 구매 가능 여부는 장바구니와 결제 단계에서 다시 검증해야 합니다."},{"question":"판매 종료 상품의 상세 페이지는 404로 없애는 것이 맞나요?","answer":"항상 그렇지는 않습니다. 기존 링크, 주문 이력, 안전 공지, 대체 상품 안내 가치가 있으면 상세 페이지를 유지하면서 판매 종료와 구매 불가 상태를 명확히 표시할 수 있습니다. 콘텐츠 가치가 전혀 없고 영구 제거가 적절한 경우에는 404 또는 410 정책을 검토합니다."},{"question":"페이지네이션과 무한 스크롤 중 쇼핑몰에 더 좋은 방식은 무엇인가요?","answer":"비교와 재방문이 중요한 검색 결과에는 숫자 페이지네이션이나 더 보기 방식이 일반적으로 관리하기 쉽습니다. 무한 스크롤을 쓰려면 URL 상태, 뒤로 가기, 스크롤 위치, 접근성, 오류 복원을 완성해야 하며 발견형 피드에 더 잘 맞습니다."},{"question":"AI 검색이나 벡터 검색을 도입하면 기존 텍스트 검색은 필요 없나요?","answer":"필요합니다. SKU, 모델명, 브랜드, 규격처럼 정확 일치가 중요한 쇼핑 검색은 텍스트 검색이 기반이 되어야 합니다. 의미 검색은 표현이 다른 후보를 넓히는 보조 계층으로 사용하고, 실제 상품 ID와 재고 데이터에 연결해야 합니다."},{"question":"검색어와 검색 횟수만 저장하면 개인정보 문제가 없나요?","answer":"자동으로 안전하다고 볼 수 없습니다. 검색어에 이메일, 전화번호, 주문번호 또는 민감한 내용이 포함될 수 있고 다른 식별자와 결합되면 개인을 추적할 수 있습니다. 목적 최소화, 마스킹, 접근 통제, 원문과 집계 데이터의 분리 보관이 필요합니다."},{"question":"광고 상품을 추천순 상단에 넣어도 되나요?","answer":"광고 노출 자체보다 일반 유기적 추천으로 오인되지 않게 설계하는 것이 중요합니다. 광고 후보와 유기적 후보를 분리하고, 상품 카드에서 즉시 식별 가능한 표시를 제공하며, 광고 노출 규칙과 성과 지표를 별도로 관리해야 합니다."},{"question":"상품 검색에는 어떤 데이터베이스 인덱스가 필요한가요?","answer":"정답은 실제 쿼리와 데이터 분포에 따라 달라집니다. 상태 필터와 정렬에는 B-tree 계열, 전문 검색에는 GIN 같은 역색인, 유사 문자열 검색에는 trigram 계열을 검토할 수 있으며 실행 계획과 부하 테스트로 효과를 확인해야 합니다."},{"question":"검색 품질은 어떤 지표로 평가해야 하나요?","answer":"결과 없음 비율, 검색 결과 클릭률, 검색 후 장바구니율과 구매 전환율, 검색어 수정률, 품절 노출률을 함께 봐야 합니다. 여기에 p95 지연, 타임아웃률, 색인 최신성을 결합해야 품질과 성능을 동시에 평가할 수 있습니다."},{"question":"검색 로그는 얼마나 오래 보관해야 하나요?","answer":"모든 서비스에 적용되는 하나의 기간은 없습니다. 원문 검색어는 분석에 필요한 최소 기간만 두고, 장기 추세는 개인정보 위험을 낮춘 집계 데이터로 보관하는 방식이 좋습니다. 보관 목적, 삭제 주기, 접근 권한을 개인정보 처리방침과 내부 정책에 일치시켜야 합니다."},{"question":"AI에게 구현 전 질문하도록 만드는 가장 중요한 문장은 무엇인가요?","answer":"“구현을 시작하기 전에 내가 정하지 않은 정책 중 결과에 영향을 주는 결정이 있으면 먼저 질문하고, 임의로 정한 가정은 별도 목록으로 표시해 줘”라고 지시할 수 있습니다. 이후 답변을 정책 문서, API 계약, 테스트 조건에 반영해야 효과가 있습니다."}],"sources":[{"url":"https://www.ftc.go.kr/www/selectBbsNttView.do?bordCd=3\u0026key=12\u0026nttSn=43448\u0026pageIndex=1\u0026pageUnit=10\u0026rltnNttSn=46624\u0026searchCnd=all\u0026searchViolt=0604","title":"공정거래위원회: 쿠팡 및 씨피엘비의 위계에 의한 고객유인행위 건 제재","type":"source"},{"url":"https://www.lawtimes.co.kr/news/articleView.html?idxno=218796","title":"법률신문: 쿠팡-공정위 소송, 네이버쇼핑 사건 쟁점화","type":"source"},{"url":"https://www.law.go.kr/LSW/lsInfoP.do?lsId=002011","title":"국가법령정보센터: 표시ㆍ광고의 공정화에 관한 법률","type":"source"},{"url":"https://case.ftc.go.kr/ocp/co/openDocView.do?docCnvrMnNo=12808\u0026docId=20221229104156671154\u0026docTy=LTFR\u0026id=OCPLTFR20140759018192","title":"공정거래위원회 온라인 사건 처리: 키워드 광고 표시 관련 의결2014-103","type":"source"},{"url":"https://www.ftc.go.kr/www/selectBbsNttView.do?bordCd=3\u0026key=12\u0026nttSn=46006\u0026pageIndex=2\u0026pageUnit=10\u0026rltnNttSn=37048\u0026searchCnd=all\u0026searchCtgry=01%2C02\u0026searchKrwd=%EA%B4%91%EA%B3%A0\u0026searchViolt=0609","title":"공정거래위원회: 고가의 유명 상품 판매 플랫폼의 표시광고법 및 전자상거래법 위반행위 제재","type":"source"},{"url":"https://www.law.go.kr/LSW/lsInfoP.do?ancYnChk=0\u0026lsId=011357","title":"국가법령정보센터: 개인정보 보호법","type":"source"},{"url":"https://baymard.com/learn/ecommerce-ux-best-practices","title":"Baymard Institute: Data-Driven Ecommerce UX Best Practices","type":"source"},{"url":"https://developers.google.com/search/docs/specialty/ecommerce/pagination-and-incremental-page-loading","title":"Google Search Central: Pagination and Incremental Page Loading","type":"source"},{"url":"https://www.postgresql.org/docs/current/textsearch.html","title":"PostgreSQL Documentation: Full Text Search","type":"source"},{"url":"https://www.postgresql.org/docs/current/textsearch-indexes.html","title":"PostgreSQL Documentation: Preferred Index Types for Text Search","type":"source"},{"url":"https://www.postgresql.org/docs/current/pgtrgm.html","title":"PostgreSQL Documentation: pg_trgm","type":"source"}],"images":[{"id":240,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MjM1NSwicHVyIjoiYmxvYl9pZCJ9fQ==--6c0b755d9bc5bce8a57d0306acd05a2302fe176e/ChatGPT%20Image%202026%E1%84%82%E1%85%A7%E1%86%AB%207%E1%84%8B%E1%85%AF%E1%86%AF%2021%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2002_29_49.webp","is_representative":true,"generation_method":"upload","mime_type":"image/webp","original_filename":"ChatGPT Image 2026년 7월 21일 오전 02_29_49.png","translations":{"ko":{"alt":"AI 네트워크와 상품 검색 화면, 정책 체크카드, 분석 대시보드가 결합된 쇼핑몰 검색 설계 일러스트","caption":"AI 쇼핑몰 검색을 구현하기 전에 정렬, 상품 상태, 탐색, 검색 범위, 데이터 정책을 설계하는 과정을 보여준다.","description":null},"en":{"alt":"AI network, product search interface, policy checklist cards, and analytics dashboard for e-commerce search planning","caption":"The illustration shows the planning of ranking, product status, navigation, search scope, and data policies before building AI-powered e-commerce search.","description":null},"ja":{"alt":"AIネットワーク、商品検索画面、ポリシーカード、分析ダッシュボードを組み合わせたEC検索設計","caption":"AI搭載のEC検索を構築する前に、並び順、商品状態、ナビゲーション、検索範囲、データ方針を設計する様子を示している。","description":null},"es":{"alt":"Red de IA, interfaz de búsqueda de productos, tarjetas de políticas y panel analítico para comercio electrónico","caption":"La ilustración muestra cómo definir el orden, el estado de los productos, la navegación, el alcance de búsqueda y la política de datos antes de crear un buscador con IA.","description":null},"id":{"alt":"Jaringan AI, antarmuka pencarian produk, kartu kebijakan, dan dasbor analitik untuk perencanaan pencarian toko online","caption":"Ilustrasi ini menunjukkan perencanaan peringkat, status produk, navigasi, cakupan pencarian, dan kebijakan data sebelum membangun pencarian e-commerce berbasis AI.","description":null},"pt":{"alt":"Rede de IA, interface de busca de produtos, cartões de políticas e painel analítico para comércio eletrônico","caption":"A ilustração mostra o planejamento de ordenação, status dos produtos, navegação, escopo da busca e política de dados antes de criar uma busca de e-commerce com IA.","description":null},"zh-hant":{"alt":"結合AI網路、商品搜尋介面、政策檢查卡與分析儀表板的電商搜尋規劃圖","caption":"此圖呈現在建立AI電商搜尋前，規劃排序、商品狀態、瀏覽方式、搜尋範圍與資料政策的過程。","description":null}}},{"id":241,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MjM2MiwicHVyIjoiYmxvYl9pZCJ9fQ==--7aa0dfb3a548f3bdfe5cf4f73b74b387fe8da178/ChatGPT%20Image%202026%E1%84%82%E1%85%A7%E1%86%AB%207%E1%84%8B%E1%85%AF%E1%86%AF%2021%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2002_32_48.webp","is_representative":false,"generation_method":"upload","mime_type":"image/webp","original_filename":"ChatGPT Image 2026년 7월 21일 오전 02_32_48.png","translations":{"ko":{"alt":"상품 의미 연결망, 대체 추천 화면, 보안 데이터 저장소로 구성된 AI 쇼핑 검색 설계도","caption":"상품 속성과 동의어를 연결하고 검색 결과가 없을 때 대안을 추천하며 로그를 안전하게 집계하는 구조를 보여준다.","description":null},"en":{"alt":"AI shopping search map with semantic product links, fallback recommendations, and secure data storage","caption":"The illustration shows product attributes and synonyms being connected, alternative items suggested for empty results, and search logs aggregated securely.","description":null},"ja":{"alt":"商品意味ネットワーク、代替推薦画面、安全なデータ保存で構成されたAIショッピング検索設計","caption":"商品属性や同義語を結び、検索結果がない場合に代替商品を提案し、検索ログを安全に集計する仕組みを示している。","description":null},"es":{"alt":"Mapa de búsqueda comercial con vínculos semánticos, recomendaciones alternativas y almacenamiento seguro de datos","caption":"La ilustración muestra cómo conectar atributos y sinónimos, recomendar productos cuando no hay resultados y agregar registros de búsqueda de forma segura.","description":null},"id":{"alt":"Peta pencarian belanja AI dengan relasi produk, rekomendasi alternatif, dan penyimpanan data aman","caption":"Ilustrasi ini menunjukkan hubungan atribut dan sinonim produk, rekomendasi saat hasil kosong, serta pengelompokan log pencarian secara aman.","description":null},"pt":{"alt":"Mapa de busca comercial com conexões semânticas, recomendações alternativas e armazenamento seguro de dados","caption":"A ilustração mostra atributos e sinônimos conectados, sugestões para buscas sem resultado e agregação segura dos registros de pesquisa.","description":null},"zh-hant":{"alt":"結合商品語意關聯、替代推薦與安全資料儲存的AI購物搜尋架構","caption":"此圖呈現商品屬性與同義詞連結、無結果時提供替代推薦，以及安全彙整搜尋紀錄的流程。","description":null}}},{"id":242,"url":"https://injoys.com/rails/active_storage/blobs/proxy/eyJfcmFpbHMiOnsiZGF0YSI6MjM3NiwicHVyIjoiYmxvYl9pZCJ9fQ==--82241565295e41a5790d7d000781a8b32abf8792/ChatGPT%20Image%202026%E1%84%82%E1%85%A7%E1%86%AB%207%E1%84%8B%E1%85%AF%E1%86%AF%2021%E1%84%8B%E1%85%B5%E1%86%AF%20%E1%84%8B%E1%85%A9%E1%84%8C%E1%85%A5%E1%86%AB%2002_42_23.webp","is_representative":false,"generation_method":"upload","mime_type":"image/webp","original_filename":"ChatGPT Image 2026년 7월 21일 오전 02_42_23.png","visible_locales":["ko"],"translations":{"ko":{"alt":"AI 쇼핑몰 검색의 기본 정렬, 상품 상태, 목록 방식, 검색 범위, 로그 정책을 정리한 인포그래픽","caption":"AI 쇼핑몰 검색 개발 전에 결정해야 할 다섯 가지 운영 정책과 잘못된 구현의 위험을 단계별로 보여준다.","description":null},"en":{"alt":"Infographic covering ranking, product status, browsing, search scope, and logging policies for AI shopping search","caption":"The infographic presents five operating policies to define before developing AI-powered e-commerce search and highlights common implementation risks.","description":null},"ja":{"alt":"AI通販検索の基本順位、商品状態、一覧方式、検索範囲、ログ方針を整理したインフォグラフィック","caption":"AI搭載の通販検索を開発する前に決めるべき五つの運用方針と、誤った実装によるリスクを段階的に示している。","description":null},"es":{"alt":"Infografía sobre ordenación, estado de productos, navegación, alcance de búsqueda y registros en búsquedas con IA","caption":"La infografía explica cinco políticas operativas que deben definirse antes de desarrollar un buscador de comercio electrónico con IA y muestra riesgos habituales.","description":null},"id":{"alt":"Infografik kebijakan peringkat, status produk, navigasi, cakupan pencarian, dan log untuk pencarian belanja AI","caption":"Infografik ini menjelaskan lima kebijakan operasional yang perlu ditetapkan sebelum mengembangkan pencarian e-commerce berbasis AI beserta risiko implementasinya.","description":null},"pt":{"alt":"Infográfico sobre ordenação, status de produtos, navegação, escopo de busca e registros em buscas com IA","caption":"O infográfico apresenta cinco políticas operacionais que devem ser definidas antes do desenvolvimento de uma busca de e-commerce com IA e destaca riscos comuns.","description":null},"zh-hant":{"alt":"整理AI購物搜尋排序、商品狀態、瀏覽方式、搜尋範圍與紀錄政策的資訊圖表","caption":"此資訊圖表分區說明開發AI電商搜尋前應確定的五項營運政策，以及常見錯誤實作的風險。","description":null}}}],"published_at":"2026-07-21T10:05:48+09:00","updated_at":"2026-07-21T10:05:55+09:00","license":"cc_by","translation_status":"original","available_locales":["ko","en","ja","es"],"data_locales":["ko","en","ja","es","id","pt","zh-hant"],"url":"https://injoys.com/ko/articles/five-policies-before-ai-ecommerce-search-development"}