
프로젝트 요구 사항 및 정의
실시간 반응형 추천 시스템을 구축하기 위해, 여러 가지 요구 사항이 정의되었습니다. 이 섹션에서는 사용자 행동 이력 반영, 실시간 관심사 파악, 배달 가능한 추천 가게 목록 생성이라는 세 가지 핵심 요소를 중점적으로 살펴보겠습니다.
사용자 행동 이력 반영
사용자 행동 이력 반영은 실시간 추천 시스템에서 중요한 역할을 합니다. 서비스 사용자가 이전에 클릭한 가게 и 검색한 키워드들은 사용자의 취향을 간접적으로 표현하는 데이터로 작용합니다. 이 데이터를 활용하여, 시스템은 사용자의 현재 관심사를 빠르게 이해하고 이를 기반으로 맞춤형 추천을 수행할 수 있습니다.
"서비스에서 요구한 내용을 기술적인 문제로 환원하고, 이를 잘 풀어내는 것이 엔지니어의 업무다."

실시간 관심사 파악
실시간으로 사용자의 현재 관심사를 파악하는 것은 추천 시스템의 핵심입니다. 사용자 행동 이력 분석을 통해, 사용자가 어떤 음식을 좋아하고 있는지 파악할 수 있습니다. 특히, 사용자의 검색어와 클릭한 항목들은 implicit feedback로 취급되어, 강력한 추천의 기초 자료가 됩니다.
예를 들어, 사용자가 "짜장면"이라는 키워드를 검색하면, 이를 기반으로 중식 가게를 추천하고, "아이스 아메리카노"에 대한 관심이 있다면 카페 추천으로 이어질 수 있습니다. 이러한 방식으로, 시스템은 사용자의 관심사를 즉각적으로 분석하여, 보다 직관적인 추천을 제공합니다.
배달 가능한 추천 가게 목록 생성
단순히 사용자의 관심사와 가게의 데이터를 가깝게 연관짓는 것 뿐만 아니라, 배달 가능한 가게 목록을 생성하는 것도 중요합니다. 고객이 추천을 요청한 시점에 사용자의 현재 위치를 고려하여, 그 위치 근처에 있는 가게 중에서 추천 목록을 형성해야 합니다.
이 과정에서는 다음과 같은 세 가지 요구 사항이 추가적으로 필요합니다:
이와 같은 구조를 통해, 배달 가능한 가게 목록을 실시간으로 제안하는 시스템이 완성됩니다. 시스템의 디자인은 사용자 만족도를 극대화하는 방향으로 나아가야 하며, 이를 통해 사용자는 최고의 서비스 경험을 누릴 수 있습니다.
👉프로젝트 요구사항 확인하기기술 컴포넌트 도입 과정
현대의 데이터 기반 서비스에서는 기술 컴포넌트의 도입이 필수적입니다. 이에 따라 시스템 요구 사항을 충족시키기 위해 적절한 기술을 검토하여 도입하는 과정이 필요합니다. 아래에서는 벡터 유사도 검색 기술의 검토부터 도입 후보 선정 및 평가, 실험 설계 및 결과 분석에 이르는 과정을 자세히 살펴보겠습니다.
벡터 유사도 검색 기술 검토
벡터 유사도 검색(Vector Similarity Search, VSS)은 머신러닝 및 인공지능 기반 추천 시스템에서 가장 중요한 기술 중 하나입니다. 이 기술은 사용자의 요청에 따라 실시간으로 유사한 아이템을 찾아주는 기능을 제공합니다. 사용자의 현재 행동을 반영하여 추천을 하려면 사용자의 행동 이력을 기반으로 생성된 임베딩을 빠르게 검색하고 유사성을 계산해야 합니다.
"기술의 선택은 문제 해결의 열쇠가 된다."

VSS는 두 가지 주요 접근 방식인 Exact-KNN과 Approximate-NN(ANN)으로 나뉩니다. Exact-KNN은 실제 좌표를 기반으로 정확한 거리를 계산하고, ANN은 성능을 높이기 위해 재현율을 일부 희생합니다. 각 기술의 장단점을 평가하며, 시스템의 요구 사항 및 특성에 맞는 방법을 선택해야 합니다.
이러한 검토를 통해 우리의 프로젝트에 적합한 벡터 유사도 검색 기술을 선정할 수 있습니다.
도입 후보 선정 및 평가
도입 후보 선정 과정에서는 다양한 기술 스택을 조사하고, 각각의 장단점을 비교해야 합니다. 특히, 실시간 반응형 추천 시스템에서 요구하는 반응 속도와 확장성을 고려해야 합니다.
- 후보 기술군 조사: 이전 도입 사례와 문서를 통해 사용 가능한 데이터 저장소나 벡터 검색 솔루션들을 모색합니다.
- 기술 평가 기준 설정: 개발 생산성, 확장성, 운영 가능성이 중요합니다. 프로젝트 팀은 각 후보의 적합성을 평가할 단기적인 테스트와 장기적인 운영 가능성을 고려합니다.
- 테스트 진행: 다양한 벡터 유사도 검색 기술을 시험하여 성능을 측정하고, 예상 작업 부하에 맞게 얼마나 잘 동작하는지를 평가합니다.
각 후보군의 성능 평가가 완료되면, 이를 기반으로 최종 기술 선택을 할 수 있습니다.
실험 설계 및 결과 분석
실험은 가장 중요한 과정으로, 선택한 기술이 실제 환경에서 어떻게 동작하는지를 검토하는 단계입니다.
- 비부하 테스트: 초반에 시스템이 없는 상태에서 비부하 테스트를 통해 기본 성능을 측정합니다.
- 부하 테스트: 실시간 시나리오를 고려하여 다수의 요청을 주고 성능을 분석합니다. 이 단계에서는 응답 시간, 요청 처리량 및 시스템의 성능을 면밀히 측정합니다.
- 결과 분석: 실험 결과를 통해 각 기술의 장단점을 정리하고, 구체적인 개선 사항을 도출합니다. 예를 들어, 특정 기술이 높은 요청량을 처리하는 데 유리하다면, 그 기술을 메인 기술로 선정할 수 있습니다.
이번 과정은 우리 시스템의 성능을 극대화하고, 실시간으로 변동하는 사용자 요구 사항에 대한 적절한 대응력을 확보하는 데 기여하게 됩니다.
이와 같이, 기술 컴포넌트의 도입 과정은 요구사항을 명확히 하고, 적합한 기술을 선택하여 효율적인 시스템을 구축하는 중요한 단계입니다. 🚀
👉기술 도입 과정 알아보기성능 최적화 및 결론
효율적인 서비스를 제공하기 위해서는 성능 최적화가 필수적입니다. 이 섹션에서는 부하 테스트 결과와 서버 성능 개선 방법, 나아가 미래 기술 도입에 관해 이야기해 보겠습니다. 💡
부하 테스트 결과
부하 테스트는 시스템의 성능을 분석하는 중요한 단계입니다. 해당 테스트의 결과는 아래와 같은 통계로 요약할 수 있습니다.
위와 같이 RDS(PostgreSQL) 시스템이 가장 높은 초당 요청량을 기록하며, 응답 시간도 빠르고 실패율이 전혀 없었습니다. 반면, Atlas MongoDB와 OpenSearch는 각각 응답 시간이 늘어남에 따라 실패율도 증가하는 경향을 보였습니다. 이러한 결과는 향후 서비스 구축에 있어 중요한 의사결정 기반이 될 것입니다.
"성능 최적화는 단순한 선택이 아닌, 지속적인 관리와 함께하는 과정이다."
서버 성능 개선 방법
서버 성능 개선을 위한 몇 가지 방법은 다음과 같습니다:
- 쿼리 최적화: 여러 번의 쿼리를 단일 쿼리로 통합하여 데이터베이스의 부하를 줄이고 응답 속도를 높일 수 있습니다. 예를 들어, 여러 임베딩을 사용하여 하나의 UNION 쿼리로 처리하면, 요청 횟수를 줄일 수 있습니다.
- 인덱스 조정: 자주 조회되는 항목에 대한 인덱스를 최적화해 빠른 검색 성능을 확보할 수 있습니다. 예를 들어, 필터링 조건에 따라 인덱스의 구성 방식도 달라질 수 있습니다.
- 부하 분산: 트래픽이 많을 때, 여러 서버로 부하를 분산하여 각 서버의 부담을 줄일 수 있습니다. 이를 통해 전반적인 응답 속도를 향상시킬 수 있습니다.
- 캐싱: 자주 사용하는 데이터는 캐시 메모리에 저장하여 데이터베이스에서 직접 가져오는 루틴을 줄일 수 있습니다. Redis와 같은 메모리 캐시를 이용하면 성능을 크게 향상시킬 수 있습니다.
미래 기술 도입 참고사항
미래 기술을 도입할 때는 몇 가지 중요한 점에 주의해야 합니다:
- 비용-편익 분석: 새로운 기술이 도입될 때 비용이 얼마나 드는지, 그에 따른 이익이 얼마나 될지를 따져보아야 합니다.
- 유지 관리 가능성: 도입한 기술의 유지 관리가 용이한지 여부를 확인해야 합니다.
- 생산성 및 확장성: 새로운 기술은 기존의 개발 생산성을 향상시키고, 향후 확장에 대한 대비가 되어야 합니다.
이러한 요소들은 기술 도입 결정을 내리기 전 신중하게 검토해야 하며, 기술 선택 시 위험 부담이 적은 방향으로 접근하는 것이 중요합니다. 🌟
결론적으로, 이번 프로젝트를 통해 서버 성능을 최적화하고, 부하 테스트로 확인된 내용을 바탕으로 실질적인 개선 방안을 마련할 수 있었습니다. 그리고 미래에는 이러한 경험을 바탕으로 더욱 발전된 기술들을 효율적으로 도입할 수 있을 것으로 기대합니다.
👉최적화 방법 확인하기