
프로젝트 요구 사항 및 기술 컴포넌트 정의
이번 섹션에서는 프로젝트의 주요 요구 사항과 이를 구현하기 위한 기술 컴포넌트에 대해 자세히 살펴보겠습니다. 🤖 프로젝트는 실시간 반응형 추천 시스템을 구축하는 것으로, 사용자의 행동 이력, 관심사, 그리고 위치 정보를 기반으로 추천을 제공하는 것을 목표로 합니다. 이를 위해 다음과 같은 세 가지 주요 요소를 정의합니다.
실시간 행동 이력의 중요성
실시간 행동 이력은 사용자의 관심사를 빠르게 이해하는 데 필수적입니다. 사용자가 무엇을 검색하고 클릭하는지에 대한 데이터를 수집하여, 이는 사용자의 선호도를 간접적으로 반영하는 중요한 피드백으로 작용합니다.

이러한 실시간 행동 이력은 사용자에게 맞춤형 추천을 제공하는 데 중요한 역할을 합니다. 예를 들어, 특정 사용자가 "짜장면"을 검색하면, 시스템은 중식 가게를 추천하기 위해 행동 이력을 분석하여 유사한 가게를 추천해 줍니다.
사용자의 관심사 및 추천 시스템
추천 시스템의 핵심은 사용자의 관심사를 파악하는 것입니다. 이는 사용자의 현재 행동 이력을 활용하여, 관심사가 무엇인지 정확하게 정의하는 과정이 필요합니다. ⭐ 우리는 사용자의 행동 데이터를 분석하여 다음과 같은 두 가지 주요 목표를 설정했습니다:
- 사용자의 현재 관심사 이해하기: 사용자가 최근에 클릭한 가게와 관련된 정보를 수집합니다.
- 관심사에 기반한 추천 제공하기: 이러한 관심사와 비교하여 가장 적합한 가게를 추천합니다.
관심사 기반 추천 시스템은 가게의 임베딩을 생성하고, 이를 통해 유사도를 비교하여 추천을 매기는 방식으로 동작합니다. 이는 사용자에게 더 나은 경험을 제공하는 데 기여합니다.
프로젝트의 위치 기반 추천 알고리즘
프로젝트의 마지막 구성 요소는 위치 기반 추천 알고리즘입니다. 이 알고리즘은 사용자가 추천을 요청하는 시점에 현재 위치를 기반으로 하여 추천 가능한 가게를 필터링합니다. 📍 다음은 이 알고리즘의 작동 방식입니다:
- 좌표 반경 검색: 사용자의 현재 위치를 기반으로 배달 가능한 가게 목록을 최대한 빨리 조회합니다.
- 유사도 계산: 사용자의 관심사와 각 가게의 유사도를 비교하여 순위를 매깁니다.
- 빠른 결과 제공: 최종적으로 추천을 사용자의 관심사와 가까운 순서로 정렬하여 제공합니다.
특히, 이 시스템에서는 "최대한 빨리"라는 조건이 강조되고 있으며, 이는 사용자 경험을 보다 향상시키기 위해 필수적입니다. 🚀
결론적으로, 이 프로젝트는 실시간 행동 이력, 사용자 관심사 분석, 그리고 위치 기반 추천 알고리즘을 통해 사용자에게 최적화된 추천을 제공하는 것을 목표로 하고 있습니다. 이러한 기술의 통합을 통해 사용자는 더 나은 경험을 느낄 수 있을 것입니다.
👉자세한 요구사항 보기벡터 유사도 검색 기술 평가
벡터 유사도 검색 기술은 최근 많은 기업들이 실시간 추천 시스템을 구축하는 데 핵심적인 역할을 하고 있습니다. 이 글에서는 벡터 유사도 검색의 도입과 기술 후보군 선정 과정, 실험 설계 및 결과 분석, 그리고 HNSW와 ANN 알고리즘의 비교에 대해 자세히 살펴보겠습니다.
기술 후보군 선정 과정
벡터 유사도 검색 기술을 도입하기 위해 먼저 프로젝트의 요구 사항을 정립해야 합니다. 프로젝트는 사용자의 실시간 관심사를 최대한 빨리 제공해야 하며, 이를 통해 맞춤형 추천을 생성하는 것이 목표입니다. 이를 실현하기 위해 다음과 같은 기준으로 기술 후보군을 선정했습니다:
- 기존 시스템과의 통합: 이미 사용 중인 시스템 및 인프라와의 호환성
- 확장성: 사용자가 증가함에 따라 확장 가능한 구조
- 운영 가능성: 쉬운 유지 보수 및 오류 대응 프로세스
이 기준을 준수하여 최종 후보군으로 Milvus, Redis Stack, Atlas MongoDB, Opensearch를 선정하였습니다. 각 후보군은 기본적으로 벡터 검색 기능 외에도 하이브리드 검색 조건을 지원할 수 있어야 합니다.
실험 설계 및 결과 분석
후보군 선정 후, 1차 실험에서는 각 후보군의 기능 검증과 시스템 운영 가능성을 평가했습니다. 대표적으로 지원하는 기능과 성능을 비교하기 위해 두 가지 유형의 벡터 검색을 진행했습니다: 순수 벡터 검색과 하이브리드 조건 검색입니다.
1차 실험에서 실시한 테스트 결과는 다음과 같습니다:
위 결과를 바탕으로, 우선 Milvus와 Atlas MongoDB가 높은 성능을 보였습니다. 하지만 각 후보군의 구현복잡성과 운영 가능성도 고려해야 했습니다. 이 과정에서 “당신의 성능 기준은 무엇인가?”라는 질문이 아래와 같이 중요했습니다.
“시대가 변해도, 좋은 기술은 여전히 성능과 효율성을 가져야 한다.”

HNSW와 ANN 알고리즘 비교
HNSW (Hierarchical Navigable Small World)와 ANN (Approximate Nearest Neighbor) 알고리즘의 성능 비교는 벡터 유사도 검색에서 중요한 이슈입니다. HNSW는 대규모 데이터셋에서 보다 높은 성능을 제공하면서도 빠른 검색 속도를 자랑합니다. 반면 ANN은 성능에 비해 사용이 간편하고, 높은 재현율을 지원하여 효율적인 검색이 가능합니다.
HNSW는 다음과 같은 장점을 가지지만 단점도 존재합니다:
- 장점
- 높은 검색 속도
- 복잡한 데이터 구조를 가진 환경에서도 효과적
- 단점
- 인덱스 빌드 및 관리의 복잡성
반면 ANN은 사용이 비교적 간편하지만, 성능 측면에서는 약간의 희생이 있을 수 있습니다.
결론적으로, 각 알고리즘의 선택은 사용자의 상황과 요구 사항에 의해 달라질 수 있으며, 시나리오에 따라서 적절한 알고리즘을 선택하여야 합니다.
이러한 평가 과정을 통해 '실시간 반응형 추천 시스템'의 성과 설정과 기술적 요구 사항이 잘 충족될 수 있었습니다. 기술적 평가와 리뷰 과정은 성공적인 시스템 구축의 필수 요소입니다.
👉기술 평가 결과 보기부하 테스트와 최적화
부하 테스트와 최적화는 실시간 반응형 추천 시스템의 성능을 극대화하기 위해 필수적인 요소입니다. 이를 통해 시스템의 안정성과 효율성을 검증하고, 실제 사용자 요구에 적합하게 서비스를 제공할 수 있습니다. 여기서는 비부하 및 부하 테스트 세부사항, RDS의 성능 우수성, 그리고 응답 시간 최적화를 위한 노력을 중심으로 다루어 보겠습니다.
비부하 및 부하 테스트 세부사항
비부하 테스트는 시스템의 기본적인 성능을 평가하는 과정이며, 결과를 바탕으로 부하 테스트를 실행합니다. 부하 테스트는 실질적인 사용자 요청을 시뮬레이션하여 시스템이 늘어나는 트래픽을 어떻게 처리하는지를 확인하는 단계입니다. 이를 위해 우리는 Locust와 같은 도구를 사용했습니다. 위치 기반 추천을 위한 API를 구축하고, 실제 트래픽을 발생시켜 시스템의 처리량(RPS)과 응답 시간을 모니터링했습니다.
“응답 시간이 중요한 만큼, 우리는 최대한의 성능을 끌어내기 위한 실험을 반복했습니다.”
아래는 비부하 및 부하 테스트에서 얻은 결과의 요약입니다.
이 표는 시스템 성능을 명확히 보여 주며, 필요한 개선 사항을 파악하는 데 도움을 줍니다.
RDS의 성능 우수성
Amazon RDS는 부하 테스트 결과에서 뛰어난 성능을 보여줍니다. RDS는 서버 관리의 부담 없이 자동으로 스케일링이 가능하고, 고가용성을 유지하는 특성 덕분에 많은 요청을 효과적으로 처리할 수 있습니다. 부하 테스트에서 RDS는 초당 요청량이 가장 높았고, 다른 시스템에 비해 실패 요청이 없었습니다. 이러한 성능은 RDS의 특히 좋은 구조 덕분에 가능했습니다.
예를 들어, RDS에서 수행한 벡터 유사도 검색 쿼리는 다음과 같은 방식으로 작성됩니다:
이 SQL 쿼리는 사용자의 지역 정보를 기반으로 최적의 가게를 추천하는 데 사용되었습니다.
응답 시간 최적화를 위한 노력
응답 시간 최적화는 플랫폼의 전반적인 사용자 경험에 직접적인 영향을 미칩니다. 우리는 여러 가지 최적화 작업을 병행했습니다. 그 중 일부는 다음과 같습니다:
- 쿼리 최적화: 쿼리의 성능을 극대화 위해 적절한 인덱스를 사용하고, 쿼리 구조를 단순화했습니다.
- Batch Processing: 여러 개의 쿼리를 하나의 요청으로 묶어 실행함으로써 DB 요청 횟수를 줄였습니다. 예를 들어, 아래와 같이 여러 Query를 하나의 Batch로 묶어 처리했습니다.
- 캐싱: 자주 조회되는 데이터를 캐싱하여 DB 접근을 최소화했습니다. 이를 통해 응답 시간을 획기적으로 단축시킬 수 있었습니다.
이러한 노력을 통해 우리는 응답 시간을 정확하고 효율적으로 감소시킬 수 있었으며, 사용자 경험을 향상시킬 수 있었습니다. 결론적으로, 최적화는 지속적인 모니터링과 데이터 분석을 통해 이루어져야 하며, 단순히 기술적인 문제를 넘어서 사용자 만족도를 높이기 위한 중요한 과정임을 명심해야 합니다.
👉부하 테스트 결과 보기