사진 한 장으로 비슷한 상품을 찾는 법 — 패션 이미지 검색 PoC
핵심 요약 패션 이미지 검색은 사용자가 정확한 상품명을 몰라도 사진 한 장으로 유사 상품을 찾게 해주는 검색 방식입니다. 제품 이미지를 임베딩 벡터로 바꾸고, 업로드 이미지와 가까운 상품을 비교하는 구조가 핵심입니다.
패션 상품을 찾을 때 사용자는 꼭 정확한 상품명을 알고 있지 않습니다. 길에서 본 신발, 착용샷 속 아우터, 비슷한 디자인의 가방처럼 이미지는 있는데 키워드는 애매한 상황이 더 많습니다.
이번 PoC는 이런 상황을 전제로 만들었습니다. 사진 한 장을 업로드하면 이미지에서 특징을 추출하고, 상품 카탈로그에 저장된 이미지 벡터와 비교해 비슷한 상품을 추천하는 구조입니다.

왜 이미지 검색인가
텍스트 검색은 상품명, 브랜드명, 카테고리, 색상 같은 메타데이터가 잘 정리되어 있을 때 강합니다. 하지만 패션 상품은 같은 상품도 사용자가 다르게 표현합니다. 누군가는 "흰색 운동화"라고 검색하고, 누군가는 "두꺼운 밑창 스니커즈"라고 검색합니다.
이미지 검색은 이 간극을 줄입니다. 사용자가 가진 사진을 기준으로 형태, 색감, 실루엣, 패턴 같은 시각 특징을 비교하면 텍스트가 부족해도 유사 상품을 찾을 수 있습니다.
검색 흐름
핵심은 상품 이미지를 단순 파일로 두지 않고, 검색 가능한 벡터로 바꾸는 것입니다.

- 상품 이미지를 수집하고 카테고리와 함께 정리합니다.
- 이미지 임베딩 모델로 각 상품의 특징 벡터를 생성합니다.
- 벡터 DB에 상품 ID, 카테고리, 이미지 경로, 임베딩을 저장합니다.
- 사용자가 업로드한 검색 이미지도 같은 방식으로 벡터화합니다.
- 벡터 유사도 기준으로 가까운 상품을 정렬해 보여줍니다.
이 구조에서는 검색어가 정확하지 않아도 됩니다. 검색의 기준이 텍스트가 아니라 이미지 자체이기 때문입니다.
상품 검색 화면
사용자는 이미지를 올리거나 상품명을 입력해 검색할 수 있습니다. 카테고리 필터를 함께 두면 전체 상품 중에서 원하는 범위를 좁힐 수 있습니다.

검색 결과는 유사도와 함께 노출됩니다. 운영자는 추천 결과가 실제로 기대한 상품군에 가까운지 확인하면서 카테고리, 이미지 품질, 임베딩 생성 상태를 점검할 수 있습니다.
착용샷으로 검색하기
실제 사용자는 정면 상품 이미지보다 착용샷이나 현장 사진을 가지고 있을 가능성이 높습니다. 그래서 테스트 화면은 업로드 이미지에서 관심 객체를 기준으로 비슷한 상품을 찾는 흐름을 확인하도록 구성했습니다.

검색 결과가 좋아지려면 단순히 모델만 바꾸는 것으로는 부족합니다. 상품 이미지의 배경, 각도, 해상도, 카테고리 품질이 함께 맞아야 합니다. PoC 단계에서는 이 품질 기준을 빠르게 확인하는 것이 중요합니다.
상품 관리와 임베딩 재생성
이미지 검색 서비스에서 관리 화면은 검색 화면만큼 중요합니다. 상품 이미지가 바뀌었는데 임베딩이 갱신되지 않으면 검색 결과는 오래된 정보를 기준으로 움직입니다.

그래서 상품 관리 화면에는 이미지 수, 임베딩 상태, 검수 상태를 함께 보여주는 구성이 필요합니다. 신규 상품을 등록하거나 이미지를 수정한 뒤에는 임베딩을 재생성해 검색 결과에 반영합니다.
PoC에서 확인한 것
이번 PoC의 목적은 완성형 쇼핑몰을 만드는 것이 아니라, 이미지 검색이 상품 탐색 업무에 실제로 쓸 수 있는지 확인하는 것이었습니다.
확인할 지점은 명확했습니다. 사용자가 이미지를 업로드했을 때 유사 상품이 충분히 빠르게 나오는가, 카테고리 필터가 결과 품질을 높이는가, 상품 관리자가 이미지와 임베딩 상태를 이해할 수 있는가, 신규 상품을 넣었을 때 검색 결과에 반영되는가입니다.
마치며
이미지 검색은 "상품명을 입력하는 검색"을 대체한다기보다, 사용자가 말로 설명하기 어려운 순간을 보완하는 검색 방식입니다.
패션처럼 시각 정보가 중요한 영역에서는 상품 이미지, 카탈로그 데이터, 벡터 검색, 관리 화면이 함께 맞물려야 합니다. 검색 결과 화면만 만드는 것이 아니라, 이미지를 계속 관리하고 갱신할 수 있는 운영 흐름까지 같이 설계해야 실제 서비스로 이어질 수 있습니다.
좋아요와 댓글
GitHub 계정으로 로그인하면 댓글을 작성하고 반응(좋아요)을 남길 수 있습니다. 댓글과 GitHub 계정명은 공개되며, 수정·삭제와 신고는 GitHub Discussions에서 처리됩니다.