개요24.11.12 ~ 24.12.19 동안 LG U+ 유레카에서 Filmeet이라는 영화 리뷰와 소셜 플랫폼 프로젝트를 진행했습니다.15일까지 프로젝트를 진행했고 16 ~ 18일 동안은 팀원들과 프로젝트 API에 대한 부하 테스트를 진행하고 성능 개선 작업을 진행했습니다. 이번 글에서는 성능 테스트 진행 과정에 대한 내용을 이야기하려 합니다.성능 테스트는 어떤 상황에서 왜 하는가?성능 테스트가 필요한 상황요청이 많아지면 서버 부하가 증가합니다. 서버의 자원은 무한하지 않아 많은 요청을 처리하기 위해서는 많은 서버가 필요합니다. 사용자들이 많아졌을 때 사용자들이 발생시키는 트래픽을 감당하기 위해서는 얼마나 많은 서버가 있어야 할지에 대한 고민이 필요합니다. 무턱대고 서버를 필요 이상으로 많이 투입하는 건..
프로젝트/Filmeet
현재 진행하고 있는 프로젝트인 Filmeet에서 사용자 개인에 맞는 영화를 추천하는 기능을 맡았습니다.이번 글에서는 이러한 추천 기능을 구현하면서 어떤식으로 로직을 짜고 구현을 했는지에 대해 이야기 하려 합니다.목표추천 기능을 구현하기 위해 자료를 검색하던 중, 넷플릭스의 영화 추천 알고리즘에 대한 자료를 접하게 되었습니다.해당 자료에 따르면, 넷플릭스는 4개의 주요 추천 알고리즘을 활용한다고 합니다:유사 사용자 기반 알고리즘유사 아이템 기반 알고리즘잠재 모델 기반 알고리즘콘텐츠 기반 알고리즘넷플릭스는 이 4개의 알고리즘을 포함한 여러 알고리즘을 조합해 하이브리드 추천 시스템을 구현했다고 합니다.(출처: 브런치 자료) 이 자료를 참고하며 저 역시 2개의 추천 알고리즘을 결합한 하이브리드 추천 시스템을 설..
개요이번 글에서는 Filmeet 프로젝트에 적용한 redis 분산 락에 대해 글을 작성하려 합니다. 아래는 Movie 엔티티입니다.현재 Filmeet 프로젝트에서는 영화 조회 API가 다양하게 사용되고 있으며, 영화 정보를 조회할 때 좋아요 수, 평균 평점 등의 데이터가 함께 필요한 경우가 많습니다. 하지만, 영화 데이터를 조회할 때마다 매번 해당 영화의 전체 좋아요 수와 평균 평점을 계산하는 쿼리가 발생한다면, DB 부하가 커질 수 있다고 판단했습니다. 이를 해결하기 위해, Movie 엔티티에 좋아요 수, 평점 수, 평균 평점 필드를 추가하는 방식으로 반정규화를 진행했습니다. 이를 통해 조회 성능을 향상하고, 불필요한 쿼리 호출을 최소화하여 시스템의 효율성을 높이고자 했습니다.@Getter@Entity..
개요이번 글에서는 프로젝트 진행 중 겪었던 이슈 중 하나인 @Query에서 "NOT IN"이 빈 리스트 파라미터와 함께 동작하지 않는 문제에 대해 작성하려 합니다. 이 예외 상황을 해결하는 과정과 함께, 유사한 문제 발생 시 참고할 수 있도록 정리해 보았습니다.문제 상황아래는 사용자의 선호 장르의 영화 중에 사용자가 리뷰, 좋아요, 컬렉션, 평점을 남기지 않고 TOP 10에 속하지 않는 영화를 조회하는 로직입니다.@Query("SELECT m " + "FROM Movie m " + "JOIN m.movieGenres mg " + "LEFT JOIN Review r ON r.movie.id = m.id AND r.user.id = :userId " + "L..