사용자가 자동완성 결과를 클릭하여 선택하면(전체 완성) 이걸 로그로 기록할 예정임

이유는 부분 텍스트보다 전체 완성이 사용자의 관심을 더 보이는거니


ML 데이터 파이프라인을

클릭 로그 수집 -> 데이터 클리닝 워커 -> 모델 훈련 워커 -> 모델 오브젝트 스토어 로 구축 할 것 같고


로지스틱 회귀로 입력은 후보 검색 결과의 피처 + 사용자 프로필 피처를 사용할거임

피처 스토어로는 아이템(검색 결과) 피처 스토어, 사용자 피처 스토어(사용자ID) 로 쓸거고


OLTP 캐시 버전 (서빙용,빠른조회) , OLAP 버전 (훈련용,대량 배치 읽기)로 분리할 예정


후보수는 20~30개로 할거고 랭킹으로 상위 10개를 필터링 할 것 같고

Redis로 더 적은 키에 더 긴 결과 리스트를 저장할 것 같음


그럼 여기서 모델 배포 방법이 3가지 정도가 생기는데


서비스 내 배포, 별도 랭킹 서비스 , SageMaker(Ato ML) 이 있음


서비스 내 배포로 한다면 -> 배포 시 모델도 함께 Pull 하고 머신에 직접 호스팅 할 것 같음. 모델을 역직렬화해서 RAM에 올릴 것

(장점은 추가 네트워크 홉이 없고 단점은 Go나 C++ 환경에서 pickle 호스팅이 어려울 수 있음)


별도 랭킹 서비스 -> Python Flask 등 별도 서비스에 모델 호스팅 상위 결과를 전달하면 10번의 모델 호출 수행 후 랭킹 반환

(장점은 코드 분리가 깔끔하고 단점은 추가 네트워크 홉이 발생함)


SagaMaker -> 훈련 데이터를 SageMaker에 제공 -> 자체적으로 모델 생성`호스팅 하는 것

(장점은 자체 데이터 인력 불필요하고 PoC에 유용함. 단점은 10개의 별도 API  호출 필요할 수 있고 고성능용은 아님)


일단 서비스 내 배포로 빠르게 검증하고 복잡도가 올라가면 별도의 랭킹 서비스로 분리하는게 맞는건가?

현업에서는 보통 어떻게 하는지 궁금함