AWS 기술 블로그
Amazon Bedrock과 Amazon OpenSearch를 활용한 hy 프레딧의 생성형 AI 기반 검색 서비스 구현 여정
에치와이(hy) & Fredit Mall 소개
1969년 창립한 ‘한국 야쿠르트 유업’은 2021년 사명을 에치와이(hy)로 변경하며 유통전문기업으로 도약했습니다. 창립 55주년을 맞은 에치와이는 국민 발효유 ‘야쿠르트’를 시작으로 발효유 시장을 선도해 왔습니다.
건강기능식품 시장에서 꾸준히 성장해온 에치와이는 2020년 12월 자사몰 ‘프레딧'(Fredit)을 론칭하며 온라인 채널을 본격적으로 강화했습니다. 프레딧은 프로바이오틱스 제품뿐 아니라 신선간편식, 건강기능식품, 뷰티, 생활용품 등 다양한 상품을 제공하고 있습니다.
프레딧 론칭 이후 월평균 매출과 정기구독 고객 수는 각각 102%, 152% 증가했습니다. 이러한 성장에 힘입어 2024년에는 론칭 3년 5개월 만에 회원 200만 명을 돌파했습니다. 에치와이는 온라인 판매 채널 강화와 상품군 다각화를 통해 지속 가능한 성장동력을 확보해 나가고 있습니다.
Generative AI 기반 검색 서비스 구축 배경
- 프레딧 성장에 따른 검색 중요성 대두
프레딧의 급격한 성장으로 취급 상품 종류와 검색량이 빠르게 증가했습니다. 기존의 키워드 기반 검색 시스템으로는 이러한 변화에 대응하기 어려워졌습니다. 상품군 다양화에 따라 사용자 경험 향상과 높은 검색 전환율을 위해 검색엔진의 정확도 개선이 필요했습니다. 특히 최근 주목받는 Generative AI 기술을 활용한 ‘시맨틱 검색'(Semantic Search)에 주목했습니다. 시맨틱 검색은 사용자의 검색 의도와 맥락을 이해해 더욱 관련성 높은 결과를 제공할 수 있기 때문입니다. - 검색 성공률 한계
전통적인 키워드 기반 검색은 문맥이나 의도의 미세한 차이로 인해 정확한 결과를 제공하는 데 한계가 있었습니다. 때로는 검색 결과가 전혀 나오지 않는 경우도 있었습니다. 프레딧은 발효유, 프로바이오틱스 함유 신선간편식, 뷰티, 생활용품 등 다양한 상품을 취급합니다. 특히 한 상품에서 파생된 여러 관련 상품들로 인해 검색어를 조금만 다르게 입력해도 결과가 크게 달라질 수 있었습니다. 예를 들어, 마시는 발효유 상품과 함께 발효유 상품 캐릭터가 그려진 생활용품도 판매하고 있어 검색 결과의 정확성이 떨어질 수 있었습니다. - 고객 불만족 비율 증가
고객 만족도 조사 결과, 검색 기능이 불만족 요인 2위로 나타났습니다. 상품 수 증가로 고객들이 원하는 상품을 찾기 어려워졌고, 이는 전반적인 검색 경험 저하로 이어졌습니다.
이와 같이, 프레딧의 급성장에 따른 상품군 다양화와 검색 수요 증가, 기존 검색 시스템의 한계, 그리고 시맨틱 검색 도입을 통한 고객 경험 혁신 필요성이 새로운 검색 서비스 구축의 핵심 배경이 되었습니다.
프레딧의 Generative AI 기반 검색 서비스 아키텍처
Generative AI를 활용한 시맨틱 검색은 사용자의 질문이나 검색 의도를 더욱 심층적으로 이해하고, 그에 맞는 의미 있는 결과를 생성하는 것을 목표로 합니다. 이를 위해 자연어 처리, 지식 표현, 추론 등의 기술을 활용하여 검색어의 문맥과 의미를 파악합니다. 전통적인 키워드 기반 검색(Lexical Search)의 한계를 극복하고자 Amazon OpenSearch Service에서 제공하는 기능인 하이브리드 쿼리 방식을 도입했습니다. 이는 Lexical Search와 K-NN 기반 Vector검색 방식인 Semantic Search를 결합하여 검색 관련성을 개선하는 방식입니다. 검색어를 분석하여 단순 키워드 검색일 경우 Lexical Search만 실행하고, 더 복잡한 의미 파악이 필요한 경우 하이브리드 검색을 실행합니다.
프레딧은 AWS 클라우드 환경에서 운영되고 있으며, 데이터베이스는 Amazon RDS for PostgreSQL을 사용하여 상품 정보와 고객 정보 등을 관리하고 있습니다. 그리고 검색 서비스의 확장을 위하여 아래와 같이 고려하여 인프라를 추가 구성하였습니다.
- Amazon Transit Gateway 및 용도별 API 서버 분리
검색 서비스를 위한 인프라는 별도의 VPC를 구축하여 Amazon Transit Gateway를 통해 연결하였습니다. 검색 서비스를 위한 API 서버는 두 가지 기능으로 분리되어 있습니다. 하나는 자연어 검색을 처리하는 시맨틱 검색 API이고, 다른 하나는 검색 결과의 스코어링을 보정하고 Re-랭킹을 하는 검색 랭킹 API입니다. 또한 , Amazon OpenSearch Service의 lexical 검색 기능을 별도로 호출하여 트래픽을 분산시켰습니다. 이를 통해 검색어 처리와 랭킹 계산을 독립적으로 수행할 수 있어 시스템의 확장성과 안정성을 높일 수 있었습니다. - Amazon Bedrock 보안 강화
자연어 검색 기능은 버지니아 리전과 오리건 리전에 각각 구축된 별도의 VPC에서 처리됩니다. 기본적으로 오리건 리전에서는 Amazon Bedrock의 Claude 3 Haiku 언어 모델을, 버지니아 리전에서는 Amazon Titan Text Embeddings G1 모델을 호출합니다. 추가적으로 자연어 검색량이 높을 경우 버지니아 리전에서도 Claude 3 Haiku 언어 모델을 호출하여 대량의 검색 트래픽 수용할 수 있도록 구성하였습니다.
각 리전 간 VPC Peering 연결과 VPC 엔드포인트를 구성하여 Amazon Bedrock 서비스에 대한 안전한 접근을 보장했습니다. 이를 통해 검색 서비스의 보안 수준을 한층 강화할 수 있었습니다. 특히 VPC 피어링을 통해 네트워크 격리를 유지하고, VPC 엔드포인트를 통해 Amazon Bedrock 서비스에 대한 직접적인 접근을 제한함으로써 보안성을 높였습니다.
1. 데이터 전처리 및 텍스트 임베딩 과정
위 그림과 같이 벡터 데이터베이스를 구성하기 위한 단계는 다음과 같습니다.
- 프레딧 몰의 기존 RDBMS 데이터를 Amazon OpenSearch Service 인덱스 구조에 맞게 가공합니다. 제품 ID, 제품명 등의 핵심 메타데이터를 추출하여 통합 인덱스를 구축하였습니다. 이 파이프라인은 AWS Glue를 통해 자동 또는 수동적으로 동기화됩니다.
- Amazon Titan Text Embeddings G1 모델을 사용하여 검색에 필요한 전처리된 필드를 벡터화하고, Amazon OpenSearch Service의 벡터 인덱스에 저장합니다.
a. OpenSearch 인덱스 설계 및 전처리 과정
위 그림은 상품 정보를 저장하는 데이터베이스 스키마 구조를 보여 줍니다. 사용자 질의와 관련된 제품 데이터를 효율적으로 조회하고 필요한 정보를 추출하기 위해 기존 데이터의 가공이 필요했습니다.
- 먼저, 제품 ID, 제품명 등 유의미한 메타데이터 컬럼을 선정했습니다. 다음으로, 해당 제품과 연관된 개별 상품 또는 번들 상품의 ID와 제품명이 함께 조회되도록 데이터를 재 구조화 했습니다.
- 이를 위해 계층형 데이터 모델 다이어그램의 부모-자식 관계를 활용했습니다. 부모 제품의 ID를 기준으로 하위에 연결된 자식 항목들의 ID와 이름을 함께 인덱스로 구성했습니다. 이로써 제품 메타데이터와 관련 개별/번들 상품 정보를 한 번에 조회할 수 있게 되어, 사용자 질의에 대한 데이터 접근과 가공이 용이해 졌습니다.
- 또한, 벡터 임베딩을 위한 데이터는 의미 있는 컬럼 내용들을 종합하여 필드를 구성했습니다. 이 데이터를 기반으로 Amazon Titan Text Embedding G1 모델을 통해 벡터 임베딩을 수행하여 벡터값을 동일 인덱스에 저장했습니다. 추가적으로 초성 검색과 영문 검색을 위해 자모 및 영문자를 추출하여 함께 적재했습니다.
다음 그림은 Amazon OpenSearch Service인덱스 설계 과정에서 구성된 인덱스에 데이터를 저장하는 Glue 코드를 나타냅니다.
settings
속성에서는 분석기를 정의합니다.- 동의어 사전을 적용하는
syn_analyzer
와 검색어에 대한 형태소 분석을 위한nori_analyzer
를 선언합니다. mappings
속성에는 인덱스 문서의 필드를 정의합니다. 각 필드는 이후 설명할 1차 검색과 2차 검색에 사용될 상품 메타 정보입니다.- 초성 검색을 위한
CHOSUNG
필드, 영문 검색을 위한ENG_TYPO
필드, 벡터 검색을 위한EMBEDDING
필드 등을 정의합니다. EMBEDDING
필드에는knn_vector
타입과 코사인 유사도를 설정합니다.
b. Amazon Bedrock Titan Embedding v1 모델을 활용한 벡터 임베딩
2. 검색 서비스 호출 과정
위 그림은 프레딧의 검색 호출 과정을 나타내는 아키텍처입니다.
- 기존 프레딧에서 검색 API를 호출합니다.
- API 서버는 사용자의 검색 질의를 Amazon Titan Text Embedding G1 모델을 통해 벡터화합니다.
- 하이브리드 검색을 통해 사용자의 검색어(Query)를 Amazon OpenSearch Service에 전달합니다.
- Amazon OpenSearch Service는 하이브리드 쿼리를 수행하여 검색 결과를 API에 반환합니다.
- 반환된 검색된 결과는 API에서 정규화를 통해 스코어를 보정하고, Rank API를 통해 검색 결과의 우선순위를 재 정렬합니다.
- 최종적으로 정렬된 검색 결과는 Claude 3 Haiku 모델을 통해 답변을 생성합니다.
- 사용자의 검색 질의는 S3에 로그로 저장되어, 지속적으로 키워드 품질 개선, 오타 보정 등을 위한 사전과 용어집을 업데이트하는 데 활용됩니다.
이러한 프래팃의 검색 과정을 논리적으로 표현하면 다음 그림과 같은 흐름으로 수행됩니다.
프레딧의 검색 검색 서비스는 다음과 같은 특징을 가지고 있습니다.
- Text Match 분기
- Amazon Bedrock용 가드레일
- Amazon OpenSearch Service의 하이브리드 검색
- AI Comment 생성
- 오타/동의어 사전과 Custom Rule
a. Text Match 분기
사용자가 검색어를 입력하면 우선 검색어와 100% 일치하는 상품 데이터를 조회합니다. 일치하는 상품 데이터가 있으면 사용자가 특정 상품정보를 검색한 것으로 판단하여 키워드 검색으로 분류합니다. 조회 결과를 바탕으로 AI 추천 Comment 생성에 필요한 LLM Context를 생성하고 키워드 검색 결과와 AI 추천 Comment를 함께 응답합니다. 상품 조회 API와 AI 추천 Comment API 호출을 분리하여 검색 속도를 최적화합니다.
b. Amazon Bedrock 가드레일
개인정보나 욕설 등 부적절한 검색어와 주제를 필터링하는 것은 보안과 서비스 윤리 측면에서 중요한 기능입니다. Amazon Bedrock 가드레일(Guardrails) 기능을 활용하여 필터링할 주제와 키워드를 추가할 수 있습니다. 가드레일을 업데이트할 때마다 백업 파일을 남겨 지속적인 버전 관리가 가능하며, 이를 통해 안정적인 AI 활용이 가능합니다.
위 그림은 Amazon Bedrock 가드레일의 설정 예시입니다. 콘텐츠 필터, 거부할 주제, 단어나 구문 필터, 개인식별정보 필터 등을 각각 설정할 수 있습니다. 이를 통해 검색어의 적합성을 필터링하고 민감한 정보나 부적절한 주제에 대해 답변하지 않도록 설정할 수 있습니다.
필터링을 통해 적합하다고 판단된 검색어에 대해 Amazon Bedrock API를 사용하여 검색어의 자연어 여부, 정렬 의도, 식품 여부를 판단합니다. 사전에 정의된 Claude 3 Haiku 모델 프롬프트에 few shot 영역을 설정합니다. Few shot 학습을 활용하면 적은 수의 예제로도 Claude 3 Haiku 모델이 정확한 답변을 생성할 수 있도록 유도할 수 있습니다.
텍스트 검색에서 결과를 얻지 못했을 때, Claude 3 Haiku 모델이 검색어의 적합성을 판단합니다. 검색어에서 자연어와 키워드를 구분하는 기본 Rule을 프롬프트에 작성하고, 몇 가지 예시(few shot)를 추가하여 Claude 3 Haiku 모델이 정확한 판단을 내리도록 합니다. 예를 들어, “위에 좋은”이라는 검색어를 자연어로 분류하고 싶다면, S3에 저장된 프롬프트의 few shot 영역에 이 예시를 추가합니다. 이후 검색 시마다 이 few shot이 포함된 프롬프트가 전달되어 검색 응답률을 지속적으로 개선할 수 있습니다.
c. 하이브리드 검색
Amazon OpenSearch Service에 전달한 검색어를 자연어로 분류하면 2차 검색을 실행합니다. 2차 검색의 Text Search는 1차 검색과 달리, 사전에 적재한 키워드 필드에 일치하는 단어가 하나 이상인 상품 데이터를 조회합니다.
- Vector Search는 검색어 벡터와 사전에 적재된 상품의 벡터를 코사인 유사도로 비교하여 가장 가까운 순으로 상품 데이터를 조회합니다.
- 조회 시 정렬 기준과 식품 여부를 적용합니다. 찾는 상품이 식품인 경우, 비식품 상품이 상위에 랭크되지 않도록 합니다. 예를 들어, 발효유 ‘야쿠르트’를 검색할 때 ‘야쿠르트 굿즈’가 상위에 오르지 않도록 조정하여 검색 품질을 높입니다. 또한 ‘저렴한’ 등의 정렬 의도가 있는 검색어라고 판단하면, 구매순으로 자동 정렬합니다.
이 두 가지 검색 결과를 바탕으로 순위를 매깁니다. 키워드(KWRD) 필드에서 검색어와 일치하는 단어 수가 많은 상품 데이터가 높은 순위를 받습니다. 상위 상품군에 대해 AI 코멘트 생성을 위한 LLM 컨텍스트를 정의하고 응답을 반환합니다. 이를 통해 상품 메타 정보를 바탕으로 검색어 맥락에 맞는 적절한 검색 결과를 제공할 수 있습니다. 또한, 식품 여부나 정렬 의도 등을 파악하여 사용자의 불필요한 재검색을 줄일 수 있습니다.
d. AI Comment 생성
LLM Context를 기반으로 Amazon Bedrock의 Claude 3 Haiku 모델을 호출하여 AI Comment를 생성합니다. 이때 Amazon Bedrock의 리전은 앞서 검색어 분류 및 하이브리드 검색에서 사용한 Bedrock API 리전과 다르게 설정합니다. 이는 Bedrock API의 분당 사용량 제한을 고려하여 호출을 분산하기 위함입니다.
LLM Context에는 검색결과 상위 n개 상품군의 메타정보가 포함되어 있습니다. Claude 3 Haiku 모델은 검색어, 메타정보, few shot 등을 활용하여 적합한 추천 Comment를 생성합니다. 마지막으로, 검색 속도 최적화를 위해 1차 검색과 2차 검색 결과가 반환된 후에 추천 Comment 생성을 위한 Bedrock API를 호출합니다.
e. 오타/동의어 사전 및 Custom Rule
- 오타/동의어 사전 업데이트
Glue crawler로 검색 실패 로그를 수집합니다. 관리자는 이 로그를 바탕으로 적절한 오타 사전을 작성하여 지정된 S3 경로에 파일을 업로드합니다. Glue ETL job을 실행하여 오타 사전을 최신화합니다. - Custom Rule
상품 데이터에는 고유 명사가 많아 기존 형태소 분석기로 명확하게 분리되지 않는 경우가 있습니다. 이를 보완하기 위해 Custom Rule을 추가로 적용합니다. 상품 메타 정보에서 특수문자(|)를 기준으로 각 단어를 분리하여 필드에 저장합니다. 이 Rule을 Nori 형태소 분석기에 적용하여 검색 시 Custom Rule에 따라 형태소가 분리됩니다. 분석된 형태소는 하이브리드 검색에서 검색어와 상품 메타 정보의 일치 여부를 확인할 때 사용됩니다.
프레딧의 검색 서비스 구현 화면
위 그림은 프러딧에서 Generative AI 기반 검색을 수행하고, 그 결과를 기반으로 AI가 답변을 제공하는 과정을 보여 줍니다.
- 먼저 왼쪽 상단의 텍스트 입력창에 검색어를 입력합니다.
- 입력된 텍스트는 중앙의 Amazon Bedrock Titan GI Text Embedding 모델을 통해 벡터화됩니다.
- 벡터화된 데이터는 Amazon OpenSearch 엔진에 저장되어 있는 대규모 데이터베이스에서 유사한 벡터를 찾게 됩니다.
- 검색어와 의미적으로 관련이 높은 이미지, 텍스트 등의 멀티미디어 데이터들이 유사도 순으로 정렬되어 표시됩니다.
- Claude 3 Haiku 모델을 통해 검색된 결과를 기반으로 AI 답변을 제공하여 검색 결과에 대한 정보를 제공합니다.
아래 그림은 시맨틱 검색의 일부 다른 예시입니다.
- 상품명과 일치하지 않는 검색어인 ‘다이어트에 좋은 것들’을 검색 했을 때 하이브리드 검색에 의해 적합한 상품 응답을 반환하는 것을 확인할 수 있습니다.
- ‘별점이 높은 유산균 상품’을 검색하면 Claude 3 Haiku 모델이 정렬의도가 있다고 판단하여, 평점순으로 결과를 반환합니다.
- 영문 검색 시, Amazon OpenSearch Service의 사전에 적재해둔 영문자와 검색어가 일치하는 상품을 찾아 응답합니다.
프레딧의 Generative AI 기반 검색 서비스 구축 효과
온라인 쇼핑몰에서 제품을 찾는 것은 사용자 경험의 핵심 요소입니다. 이를 개선하기 위해 Generative AI기반의 검색 서비스를 구축 했고, 다음과 같은 효과를 얻었습니다:
- 사용자 경험 개선
기존의 키워드 검색 뿐만 아니라 사용자의 의도와 맥락을 파악하여 맞춤형 검색 결과를 제공합니다. 또한, Generative AI 답변을 도입하여 유용한 정보를 제공함으로써 사용자 경험을 한층 더 향상시켰습니다. 상품과 관련 없는 질문에 대한 답변은 가드레일을 통해 제거하여 검색 결과의 질을 높였습니다. 이로 인해 사용자는 원하는 정보에 더욱 쉽게 접근할 수 있게 되었습니다. - 검색 정확도 향상
구축 전 대비 42% 상승하여 현재 95%의 검색 정확도를 보이고 있습니다. 이를 통해 사용자는 더욱 정확한 검색 결과를 얻을 수 있게 되었습니다. - 클릭률 증가
검색된 상품을 클릭하는 비율이 구축 전 대비 29% 증가하여 현재 약 70% 이상의 클릭률을 보이고 있습니다. 이는 사용자가 원하는 상품을 쉽게 찾을 수 있음을 의미합니다. - 검색 건수 증가
검색 건수 또한 구축 전 대비 20% 이상 증가했습니다. 이는 개선된 검색 경험으로 인해 사용자들이 더 자주 검색을 하게 되었음을 보여 줍니다. - 자연어 검색 비율 상승
지난 1개월간 자연어 검색 비율이 6배 이상 증가했으며, 지속적으로 상승 중입니다. 이는 사용자들이 자연어 기반 검색에 익숙해지고 있음을 의미합니다.
마무리
AWS 클라우드와 Generative AI 기술이 만나 프레딧의 검색 서비스를 혁신적으로 변화시켰습니다. 프레딧은 AWS 인프라와 Amazon Bedrock, Amazon OpenSearch 등의 서비스를 적극 활용하여 사용자 중심의 스마트하고 정확한 검색 경험을 구현했습니다. Generative AI 기술을 통해 단순한 키워드 검색을 넘어 사용자의 의도와 맥락을 깊이 있게 이해하고 관련성 높은 결과를 제공할 수 있게 되었습니다. 이를 통해 고객 만족도가 크게 향상되었고, 검색 전환율과 매출 증가로 이어지는 성과를 거두었습니다.
AI 기술은 끊임없이 진화하고 있으며, 이에 따라 검색 성능 또한 지속적으로 향상될 전망입니다. 특히 에치와이만의 독창적인 아이디어와 혁신적인 접근 방식이 더 해진다면, 검색 경험은 더욱 획기적으로 발전할 것입니다. 이를 통해 프레딧은 고객의 니즈(Needs)를 보다 효과적으로 충족시키고, 온라인 쇼핑 시장에서의 경쟁력을 더욱 강화해 나갈 수 있을 것입니다.
|