Events/Tech Onboarding

[2022 신입 공채] 추천해조 - 스트리밍 사용 이력 분석을 통한 개인화 상품 및 플레이리스트 추천

Tech HR 2022. 2. 10. 10:01
프로젝트명 : 스트리밍 사용 이력 분석을 통한 개인화 상품 및 플레이리스트 추천
팀명 : 추천해조
팀원 :  Sean, East, Rizzle
멘토 : Ted, Bob.fulll

 

안녕하세요, 

저희는 2022 신입 개발자 공채 추천해조의 , 이스트, 리즐입니다. 

 

테크온보딩 기간 동안 진행했던 토이프로젝트 '스트리밍 사용 이력 분석을 통한, 개인화 상품 및 플레이리스트 추천'을 소개하려고 합니다.

 

저희가 팀명을 '추천 해조'를 짓게 된 이유는 사용자의 이력을 바탕으로 상품과 플레이리스트를 추천해주는 것이 저희 서비스의 주제이기 때문에 저희 팀의 서비스를 표현하는 데에 가장 적합하다고 생각되어 추천해조로 팀명을 짓게 되었습니다!

 

저희 프로젝트 상세 내용은 아래와 같습니다.

 

 

 

기술 스택

 

 

저희가 사용한 기술 스택입니다. 프론트엔드 개발은 React, Redux 그리고 Type Script를 사용했습니다.

백엔드 개발은 Java, Spring Boot, 그리고 JPA와 JDBC Template을 활용했습니다.

머신러닝은 Python과 Gensim 라이브러리 그리고 API 제공을 위해 FastAPI를 사용했습니다. 

데이터베이스는 MySQL을 사용했고, Gradle, NPM 그리고 젠킨스와 ArgoCD를 사용해 CI/CD를 구축했습니다.

그리고 이 모든 서비스는 DKOS 클러스터 위에서 운영됩니다.

 

 

 

인프라 구성 

 

🟡 시스템 구성도

 

 

모든 어플리케이션은 DKOS 클러스터 위에서 파드로 동작하고 있으며

외부 요청이 들어오면 Ingress를 통해 요청 도메인과 연결된 서비스에 접근할 수 있습니다.

 

 

🟡 CI/CD 구성

 

 

GitHub에서 Develop 또는 Main 브랜치로 Pull Request가 진행되면 Jenkins 서버에 webhook을 날립니다.

Jenkins에서는 빌드가 진행되고, 빌드가 성공하면 D2HUB에 새로 빌드한 도커 이미지를 저장합니다.

이때 Deploy와 관련된 Manifest 파일 또한 Commit 합니다.

ArgoCD에서는 새롭게 Commit 된 매니페스트 파일을 통해 DKOS 클러스터에 새로운 버전의 컨테이너를 배포합니다

 

 

 

화면 설계 

 

🟡 로그인 화면

  • 로그인 화면에서는 기존에 등록되어 있는 아이디를 등록하여 로그인할 수 있습니다.
  • 추가적으로 멜론 멤버 키를 입력하면 개인에게 맞는 추천 서비스를 받을 수 있습니다.

 

  🟡 로딩 화면

  • 로그인이 성공적으로 완료되면 로딩 화면으로 전환됩니다.
  • 로딩 화면에서는 사용자의 데이터를 불러오고, 이를 바탕으로 사용자에게 맞는 추천 데이터를 불러옵니다.

 

 

  🟡 대시보드 화면

  • 대시보드 화면에서는 추천해조의 전반적인 내용을 보여줍니다.
  • 멜론 상품권에 대한 정보를 확인할 수 있습니다.
  • 사용자의 노래 스트리밍 및 다운로드 이력을 확인할 수 있습니다.

 

 

  🟡 분석 화면

  • 사용자의 분석 결과를 확인할 수 있습니다.
  • 사용자의 노래 스타일 / 선호 장르 / 스트리밍 및 다운로드 이력 비교 등을 확인할 수 있습니다.
  • 스트리밍 분석 결과를 바탕으로 아티스트를 추천해 받을 수 있습니다.
  • 사용자의 데이터를 바탕으로 가장 적합한 이용권을 추천받을 수 있습니다.

 

  🟡 플레이리스트 화면

  • 추천받은 노래 리스트를 확인할 수 있습니다.
  • 추천 받은 노래를 클릭하면 노래에 대한 정보(앨범 이미지 / 가사 / 제목 등..)를 확인할 수 있습니다.

 

 

  🟡 멜론 이용권 화면

  • 멜론 이용권을 모아 볼 수 있습니다.
  • 티켓에 마우스를 올리면 해당 이용권의 상세정보를 확인할 수 있습니다.

 

 

 

시연 영상

 

 

 

 

프로젝트 리뷰 

Sean 🙆🏻‍♂️
ml server를 구축하고 값을 전달하는 데 있어서 쉽지 않구나 느꼈지만 실제 도메인에서 추천 결과가 나왔을 때 너무 기뻐 소리쳤던 기억이 있습니다. 실제 배포를 처음부터 끝까지 한 것은 처음이라 많은 시도 끝에 쿠버네티스와 도커와 그나마 친해질 수 있었던 것 같습니다.

 

East  🙋🏻‍♂️ 

react와 redux, typescript 를 공부하고 이를 활용하며 프로젝트를 할 수 있어 뿌듯했다. 팀원들과 역할을 분배하고 하나의 결과물을 만들어 갈 수 있어서 성취감을 얻을 수 있었습니다.

디자인을 하느라 리팩토링에 시간을 할애하지 못한 점이 조금 아쉬웠다.(디자인 너무 어렵..)

 

Rizzle 🤷🏻‍♂️
그동안 이론으로만 접했던 개발 지식을 프로젝트를 진행하며 직접 적용하는 과정이 힘들지만 정말 재밌었습니다. 프로젝트를 진행하면서 몇몇 어플리케이션이 클러스터 자원을 제대로 할당받지 못해 낮은 성능을 보여준 경우가 있었는데 쿠버네티스 QoS를 통해 문제를 해결했을 때의 성취감이 가장 기억에 남습니다.


이스트, 리즐, 션