✏️ 기존 화면 수정 · 컬럼 추가
무엇 — 검색 키워드를 상품명에 끼워넣던 관행을 폐지하고, 상품과 별도로 부착·재사용하는 검색 태그를 신설한다. 자유입력 + 기존 태그 목록 조회로 표기 통일과 남발을 방지한다.📍 위치: 상품관리 › 공급사 상품 관리 › 편집
핵심 결정
태그 저장 위치
상품명(product_name)과 분리 — 신규 product_search_tag + seller_product_tag_map
입력 방식
자유입력 + 기존 등록 태그 목록 조회(사용빈도 노출)로 표기 통일·남발 방지
중복 차단
정규화 키(공백·대소문자 제거)로 기존 태그와 대조 후 재사용
노출 제어
태그 유형별 — SEARCH(색인 전용) / FILTER(기획전 필터) / BADGE(라벨 노출)
위치
공급사 상품 관리 › 편집에 태그 칸 신설 · 앱은 큐레이션/검색 반영(3순위)
01화면 — 먼저 보기
이 티켓이 실제로 어떤 화면이 되는지 먼저 봅니다
기존 상품명에 끼워넣은 검색 키워드를 태그로 옮기고 상품명을 정리하는 1회성 마이그레이션과 검색 색인 반영 시점은 착수 전 미팅에서 확정한다(현재 미정).
현행 화면 · 실제 캡처현행 「상품 수정」 — 검색어 태그 추가
변경안 · 제안 화면
상품관리 › 공급사 상품 관리 › 편집컬럼 추가
노출 ▾검색태그 유무 ▾🔍 상품명·히어로코드 검색태그 관리상품명 정리 일괄
▲ 공급사 상품 관리 목록 — 바뀌는 컬럼은 🆕 로 표시(예시 데이터)
1편집 진입 — 공급사 상품 관리 목록에서 상품 편집을 열면, 상품명 아래에 신설된 '검색 태그' 칸이 보인다.
2기존 태그 조회 — 태그 입력란을 누르면 등록된 태그 목록이 사용빈도·유형과 함께 뜬다. 통일성을 위해 기존 태그에서 먼저 고르도록 유도.
3입력·중복 차단 — 자유입력하면 정규화 키로 기존 태그와 대조한다. 동일 태그면 재사용하고, 유사하면 후보를 제안해 신규 남발을 막는다.
4상품명 정리 — 상품명에 박혀있던 검색 키워드를 지우고, 그 키워드를 태그로 대체한다. 원본은 original_product_name에 보존.
5저장·색인 반영 — 저장 시 매핑을 갱신하고 검색 색인 큐에 등록한다. 반영 시점(즉시/배치)은 미팅 확정 사항.
6앱 반영 — FILTER·BADGE 태그는 앱 검색과 기획전 필터에 노출되고, SEARCH 태그는 검색 결과 커버에만 쓰인다.
product_search_tag 신규
idPK bigserial
tag_namevarchar(50)
normalized_keyvarchar(50)
tag_typevarchar(10)
use_ynchar(1)
product_countinteger
created_byvarchar(100)
created_attimestamp
검색 태그 마스터. 표시명·정규화 키·유형·사용빈도 관리, 중복 및 표기 통일의 단일 기준.
seller_product_tag_map 신규
idPK bigserial
hero_product_codeFK varchar(100)
tag_idFK bigint
sort_orderinteger
created_byvarchar(100)
created_attimestamp
상품↔태그 N:M 매핑. 히어로코드 기준으로 상품에 부착된 태그 연결.
seller_product WRITE
hero_product_codePK varchar(100)
product_codevarchar(30)
product_nametext
original_product_nametext
open_ynvarchar(1)
기존 공급사 상품. 태그 이관 후 product_name 정리(UPDATE) 대상. 스키마 변경 없음.
seller_product_tag_map.hero_product_code → seller_product.hero_product_code (N:1)
seller_product_tag_map.tag_id → product_search_tag.id (N:1)
seller_product ↔ product_search_tag = seller_product_tag_map 경유 N:M
-- 검색 태그 마스터 (신규)
CREATE TABLE product_search_tag (
id BIGSERIAL PRIMARY KEY, -- 태그 식별자
tag_name VARCHAR(50) NOT NULL, -- 표시용 태그명 (예: 박스특가, 여름추천)
normalized_key VARCHAR(50) NOT NULL, -- 정규화 키 (공백·대소문자 제거) — 중복 판정용
tag_type VARCHAR(10) NOT NULL DEFAULT 'SEARCH', -- 유형: SEARCH(색인전용)/FILTER(기획필터)/BADGE(라벨노출)
use_yn CHAR(1) NOT NULL DEFAULT 'Y', -- 사용 여부 Y/N
product_count INTEGER NOT NULL DEFAULT 0, -- 연결 상품 수 (남발 판단용 캐시)
created_by VARCHAR(100), -- 생성자(MD)
created_at TIMESTAMP NOT NULL DEFAULT now(), -- 생성일시
updated_at TIMESTAMP, -- 수정일시
CONSTRAINT uq_search_tag_norm UNIQUE (normalized_key) -- 정규화 키 유일 → 중복 태그 생성 차단
);
COMMENT ON TABLE product_search_tag IS '검색 태그 마스터: 상품명과 분리된 검색·기획 키워드';
-- 상품↔태그 매핑 (신규, N:M)
CREATE TABLE seller_product_tag_map (
id BIGSERIAL PRIMARY KEY, -- 매핑 식별자
hero_product_code VARCHAR(100) NOT NULL, -- 상품 히어로코드
tag_id BIGINT NOT NULL, -- 태그 id
sort_order INTEGER NOT NULL DEFAULT 0, -- 상품 내 태그 노출 순서
created_by VARCHAR(100), -- 부착자
created_at TIMESTAMP NOT NULL DEFAULT now(), -- 부착일시
CONSTRAINT uq_sp_tag UNIQUE (hero_product_code, tag_id), -- 동일 상품 중복 부착 방지
CONSTRAINT fk_sptag_product FOREIGN KEY (hero_product_code)
REFERENCES seller_product (hero_product_code),
CONSTRAINT fk_sptag_tag FOREIGN KEY (tag_id)
REFERENCES product_search_tag (id)
);
CREATE INDEX idx_sptag_tag ON seller_product_tag_map (tag_id); -- 태그별 상품 역조회
CREATE INDEX idx_sptag_hero ON seller_product_tag_map (hero_product_code); -- 상품별 태그 조회
COMMENT ON TABLE seller_product_tag_map IS '공급사 상품 ↔ 검색 태그 매핑';
-- 기존 상품명 정리 (스키마 변경 없음, 이관 후 UPDATE 예시)
-- UPDATE seller_product SET product_name = :cleaned WHERE hero_product_code = :code; -- 키워드 제거·정리
04화면 상세 — 세부 표·규칙
목록 외 품목표·모달·규칙 등 세부 화면
편집 모달 — 검색 태그 입력 + 기존 등록 태그 목록 조회
자유입력 칸 + 이 목록에서 선택. 사용빈도 높은 태그를 상단 노출해 통일성 유도. '박스 특가'는 정규화 시 '박스특가'와 동일 판정되어 병합 후보로 표시.
태그 정규화·노출 규칙표
양끝 trim·연속공백 축약·대소문자 통일 후 normalized_key로 대조. (가정) 최대 50자, 특수문자·이모지 제한, 상품당 10개 상한 — 착수 전 확정.