스타일 있는 AI 검색: OpenShift AI와 EDB로 구현하는 패션 검색

2025년 9월 10일
작성자: Shane Heroux, Bilge Ince – EDB

관련 주제:
APIs, 인공지능

관련 제품:
Red Hat AI, Red Hat OpenShift AI, Red Hat OpenShift


목차: 아키텍처 개요

전자상거래에서 구매 여정은 종종 검색창에서 시작됩니다. 하지만 패션에서는 런웨이와 관객 사이의 간극이 의외로 넓을 수 있습니다. 이번 글에서는 패션을 위해 우리가 구축한 솔루션을 소개합니다. 이 솔루션은 ‘어떻게 보이는지’ 혹은 ‘어떤 느낌인지’가 정확한 단어보다 더 중요한 모든 카탈로그에 적용할 수 있습니다.


패션에서 키워드 검색이 부족한 이유

고객이 “해변 여행용 보헤미안 스타일 썬드레스”라고 입력한다고 가정해 봅시다. 전통적인 전체 텍스트 검색은 제목이나 설명에 이 단어들이 포함된 상품은 찾을 수 있습니다. 그러나 고객이 진짜 원하는 것—드레스의 핏, 원단, 색감—은 이해하지 못합니다.

이럴 때 의미를 이해하는 시맨틱 검색(semantic search) 이 강점을 발휘합니다. 단어에 숨겨진 의미를 파악해, 동일한 단어가 없어도 더 관련성 높은 결과를 보여줍니다. 때로는 고객이 단어를 몰라서 검색 대신 휴대폰에 저장된 사진을 사용하기도 합니다.

전통적인 키워드 검색은 단순히 텍스트 문자열을 매칭할 뿐입니다. 의미를 연결하지 못하고, 이미지를 처리하려면 많은 추가 작업이 필요합니다. 패션과 같은 제품 검색을 자연스럽게 만들려면 단순 텍스트 매칭에서 의미 매칭으로 전환해야 합니다.


아키텍처 개요

이 패션 추천 시스템은 다음 기반으로 동작합니다:

  • EDB Postgres AI: 구조화·비구조화 AI 데이터를 AI Database 확장(즉, aidb)을 통해 처리하고, 의미를 수치로 표현한 임베딩과 표준 제품 데이터를 함께 저장·검색
  • Red Hat OpenShift AI: 임베딩을 생성하는 AI 모델을 서비스
  • Red Hat OpenShift: 애플리케이션을 위한 확장 가능하고 안전한 플랫폼 제공

아키텍처 자체는 단순하지만, 이들의 조합이 솔루션을 가능하게 합니다.


다음 단계: “쇼 미” 순간

이제부터는 직접 보여드릴 차례입니다. EDB Postgres AI 내부에 AI-ready 지식 베이스(KB)를 구축하고, 업로드된 이미지 하나만으로 시각적 검색을 실행하며, 자유 형식의 난해한 리뷰를 사람이 읽기 좋은 형태로 변환한 뒤, 마지막으로 이를 깔끔한 프론트엔드와 연결합니다. 마치 리모델링 프로그램의 비포&애프터처럼, 검색에 스타일 변신을 주는 과정이라 할 수 있습니다.


Step 1: Postgres AI 안에서 모델 생성하기

OpenShift AI와 EDB Postgres AI는 별개의 플랫폼이지만, 매끄럽게 연동됩니다. OpenShift AI 같은 서빙 플랫폼에서 직접 모델을 띄우거나, 온라인 호스팅 모델을 연결하거나, 로컬 패키지 모델을 사용할 수도 있습니다. 이 모든 과정은 Postgres AI의 create_model 함수를 통해 파이프라인에 통합할 수 있습니다.

모델이 배포되면, SQL 한 줄로 OpenAI 호환 엔드포인트를 참조해 aidb에 연결할 수 있습니다. 이후 SQL 워크플로우 안에서 곧바로 활용 가능하며, 추가적인 도구 전환이 필요하지 않습니다.

-- OpenShift AI에서 실행되는 LLM 예시
SELECT aidb.create_model('product_descriptions_embeddings','embeddings', 
'{"model": "gritlm-7b","url": "https://gritlm-7b...openshift.com/v1/embeddings"}'::JSONB, 
credentials => '{"token": "abcd"}'::jsonb );
-- 로컬 멀티모달 이미지 처리 모델
SELECT aidb.create_model('recom_images', 'clip_local');

핵심: SQL 한 줄로 모델을 등록하고 사용하는 단순함은, API 연결·파이프라인 구성·툴 전환 등 기존 마찰을 제거합니다. 결과적으로 빠른 반복, 단순한 아키텍처, 짧은 구현 주기를 제공합니다.


Step 2: Postgres AI 안에서 KB 구축하기

이 솔루션의 혁신적인 점 중 하나는, OpenShift 위에서 Postgres AI 안에 검색 인덱스를 단 몇 줄의 SQL로 만들 수 있다는 점입니다. 별도 벡터 DB나 동기화 작업이 필요 없습니다.

임베딩은 운영 데이터와 동일한 DB에 저장되고, OpenShift AI는 임베딩을 생성하는 모델까지 함께 운영합니다. AI Database 확장을 사용하면 지식 베이스 생성도 SQL 몇 줄로 끝납니다.

-- 이미지 KB (S3 버킷)
SELECT aidb.create_volume_knowledge_base(
            name => 'recom_images',
            model_name => 'recom_images',
            source_volume_name => 'images_bucket_vol',
            batch_size => 500);
SELECT aidb.bulk_embedding('recom_images');
-- 텍스트 KB (PostgreSQL 테이블)
SELECT aidb.create_table_knowledge_base(
    name => 'recommend_products',
    model_name => 'product_descriptions_embeddings',
    source_table => 'products',
    source_key_column => 'product_id',
    source_data_column => 'productdisplayname',
    source_data_type => 'Text',
    auto_processing =>'Live',
    batch_size => 1000);
SELECT aidb.bulk_embedding('recommend_products');

운영 데이터와 같은 DB에서 임베딩을 유지하면 복잡성과 지연 시간이 줄어듭니다. 즉, 인프라 관리에 쓰는 시간을 줄이고 고객 경험 개선에 집중할 수 있습니다.


Step 3: 단순하게 동작하는 이미지 검색

쇼핑객이 이미지를 업로드하면, 앱은 이미지를 base64로 인코딩해 OpenShift AI의 비전 모델로 보냅니다. 모델이 임베딩을 반환하면 Postgres AI가 이를 저장하고, KB를 조회해 가장 가까운 상품을 찾습니다. 필터링까지 동일한 SQL 호출에서 수행됩니다.

SELECT aidb.retrieve_key('recom_images', decode('{encoded_img_data}', 'base64'), 5);

하나의 DB 쿼리로 유사도 검색과 필터링을 함께 실행하므로 빠르고 정확합니다.


Step 4: 의도를 이해하는 텍스트 검색

쇼핑객이 “여름용 원피스” 같은 문구를 입력하면, 이는 정확한 키워드가 아니라 의도를 표현한 것입니다. Postgres AI는 쿼리를 언어 모델로 임베딩해 KB와 비교하여 의미적으로 유사한 아이템을 찾습니다. 또한 가격, 사이즈, 재고 여부 등 필터링도 한 번에 가능합니다.

SELECT * FROM aidb.retrieve_text('{text_retriever_name}', '{text_query}', 5);

핵심 요약:

  • 시맨틱 검색이 SQL 함수 호출 하나로 단순화됨
  • 외부 툴 불필요
  • 커스텀 API 불필요
  • 서비스 간 데이터 정리 불필요

즉, 새로운 검색 경험을 빠르게 프로토타입하고, 스택을 다시 설계하지 않고도 확장할 수 있습니다.


Step 5: 리뷰 요약 한 번에 끝내기

AI Database 확장은 벡터 매칭뿐만 아니라, 등록된 LLM을 통한 프롬프트 실행도 지원합니다. 앱에서는 리뷰 텍스트 벽을 요약과 라벨 세트로 변환할 수 있습니다.

SELECT decode_text FROM aidb.decode_text(model_name, context_text);

데이터와 가까운 곳에서 요약을 실행하면 추가 서비스·데이터 전송이 줄어듭니다. 최소한의 엔지니어링 리소스로 명확하고 소화 가능한 인사이트를 제공할 수 있습니다.


Step 6: UI에 통합하기

KB가 반환한 product ID를 프론트엔드에서 표시합니다. 이 빌드에서는 Streamlit 앱이 OpenShift 위에서 백엔드와 함께 실행됩니다. 따라서 UI 업데이트도 동일한 환경에서 배포·확장·관리할 수 있습니다.

# product id 검색
image_kb_query = “SELECT aidb.retrieve_key('recom_images', decode('{encoded_img_data}', 'base64'), 5);”
cur.execute(image_kb_query);
results = cur.fetchall()
product_ids = [row[0].split(',')[0].strip('()') for row in results]

# 이미지 표시
for product_id in product_ids: 
    product = get_product_details_in_category(product_id)
    if product["image_path"]:
        col_img, col_button = st.columns([3, 1])
        with col_img:
            image_name = os.path.basename(product["image_path"])
            display_image_s3(image_name)

백엔드가 무거운 작업을 처리하면, 프론트엔드는 단순히 사용자 친화적인 인터페이스에 집중할 수 있습니다. 이것이 기술적 혁신을 실제 사용자 경험으로 전환하는 방법입니다.


마무리

이 솔루션은 검색을 단순한 키워드 매칭에서 의미 매칭으로 바꿉니다.

  • EDB Postgres AI: OpenShift AI에서 실행되는 모델을 통해 비정형·정형 데이터를 임베딩 벡터로 변환하고 저장·검색 처리
  • OpenShift AI: 모델 실행 담당
  • Python 앱: 이를 결합해 빠르고 인터랙티브한 경험 제공

우리는 패션을 위해 만들었지만, 가구·자동차·레시피 등 ‘보이는 것·느껴지는 것’이 더 중요한 모든 카탈로그에 적용할 수 있습니다.

전체 코드와 배포 지침은 GitHub 저장소에서 확인할 수 있습니다. 직접 실행하고, 수정하고, 의도를 이해하는 검색이 어떻게 경험을 바꾸는지 살펴보세요. 또한 Red Hat Ecosystem Catalog도 확인해 보시기 바랍니다.

본문: AI search with style: Fashion on OpenShift AI with EDB

메일: salesinquiry@enterprisedb.com