본문 바로가기
Projects/회고

[프로젝트 회고] 감정 기반 영화 추천 서비스 'MoodInside'

by roh.mantique 2022. 6. 21.

SSAFY의 마지막 관통 프로젝트인 영화 추천 서비스를 개발했다. 

온라인 롤링 페이퍼 서비스를 사이드 프로젝트로 진행한 뒤였다. 어려움이 덜할 줄 알았으나 API 활용, 추천 알고리즘 생성 등 처음 시도해보는 작업에서 진땀을 많이 뺐다. 5일이라는 짧은 개발 기간 역시 복병이었다.

 

어려웠던 점

API를 형식에 맞게 불러오는 일에서 시간을 많이 썼다. 파라미터의 조건을 잘 확인하고 데이터 전처리 과정에서 오류를 끊임없이 수정해주는 과정이 생각보다 까다로웠다. 영화 모델에서 각 필드마다 null 처리를 해줘야 하는지, 중복되는 데이터는 없는지, 있다면 원인은 무엇인지, 그 원인을 해결하기 위해 어떤 조건을 걸어주어야 하는지, 받아볼 데이터의 언어는 영어인지 한글인지, 어떤 지역의 데이터인지 등등. 고작 하나의 API로 데이터를 불러와 DB에 저장하는 단순한 작업이었지만 생각보다 고려해야할 사항들은 많았다. 출처나 형식이 다른 데이터들을 다양하게 활용해보고 싶은데, 제한된 짧은 시간과 역량 부족으로 그 부분을 시도해보지 못한 게 아쉽다. 실제로 팀원은 현재 상영 영화 및 리뷰 데이터를 웹 크롤링을 통해 준비했으나 그 데이터들은 활용해보지 못했다. 

 

 

잘한 점

 

백엔드에 막중한 책임감을 가지고 임했고, 결과적으로 많은 오류를 스스로 해결해 성장했다. 프로젝트에 애착을 가지고 밤낮없이 개발에 매진한 결과였다. 영화별 북마크, 댓글, 리뷰 등의 데이터를 ORM을 통해 다양한 조건으로 뽑아볼 수 있었다. 이론적으로 학습한 내용을 직접 내가 기획한 콘셉트와 플로우에 맞게 조작해볼 수 있었던 기회였다. 개인적으로 기획력을 갖춘 개발자가 되고 싶은 목표가 강해서인지 명세에 있는 그대로 구현만 해내던 이론 학습과는 달리 확실히 이번 프로젝트에서 나의 능동성을 발휘할 수 있어서 뿌듯했다. 

 

아쉬운 점

역할 분배에서 아쉬움이 있다. 내가 너무 내 업무에만 치중해 있느라 추천 알고리즘과 같은 중요한 부분에서 나의 역할을 다하지 못했다. 추천해줄 데이터 리스트를 각각 API를 통해 저장한 인기 영화 100개, 내가 저장한 보관함 이 2개로 분류했다. 그 안에서 각각 추천되지 않은 영화를 인기 영화 추천 리스트, 내가 저장한 리스트에 넣는 단순한 조건의 반복문을 활용했다. while문 대신 for문만 활용했고, 단순 조건 비교이기 때문에 if문을 활용했다. 협업 필터링이라는 알고리즘 개념을 활용하지 않고 우리 팀 기획에 맞게 조정한 것이다. 왜 while문을 쓰지 않고 for문을 사용했는지, 더 정교한 추천 방식은 없었는지, 왜 리스트에 저장될 영화가 n개인지 등등. 더 고려해야 할 사항이 없었는지, 더 정교한 설계를 할 수는 없었는지 아쉬움이 많이 남는다. 결정적으로 내가 전담해도 모자랄 기능이었는데 팀원이 더 많은 부분을 구현하게 한 점이 미안하고 반성하는 마음 뿐이다. 

 

'1함수 1기능' 원칙을 초반에 고수하지 못한 점이 아쉽다. 결과적으로는 이 원칙이 적용된 프로젝트가 되었지만 오류를 대거 맞이한 후에 코드를 수정했으니 짚고 넘어가야 할 지점이다. 댓글을 보여주면서 동시에 댓글 작성이 가능하게 함수를 구현하다보니 이런 실수를 범했다. 이 역시 이론상으로는 머리로는 무수히 익힌 사실이지만 실전에서 개발하다보면 민망한 실수가 생기기도 한다는 것.. 하지만 이 정도 레벨의 실수라면 웃고 넘어갈 수 있다.

 

보완할 점

1. 개발 기간에 맞는 기획:

턱없이 부족한 개발 기간이었지만 규격에 맞는 개발 일정을 조정하는 것도 실력이라고 본다. 우리 팀은 너무 욕심을 낸 나머지 유저 팔로잉 및 팔로우 기능, 소셜 로그인 기능, 내가 쓴 리뷰, 댓글 우선 출력 등. 초기에 목표했던 기능을 과감히 포기하기로 했다. 유연하게 사고하고 결단력 있게 행동한 점은 스스로 칭찬하나 애초에 이런 일이 발생하지 않도록 초기 기획을 꼼꼼히 하는 것이 중요하다고 생각한다.

 

2. 역할 분배:

백엔드면 제대로 백엔드가 할 수 있는 모든 역할을 다 커버할 줄 알아야 한다. 

 

3. API 호출 및 DB 저장시 더욱 원활한 처리 능력:

아직 데이터 처리 경험이 부족한 것 같으니 앞으로 경험을 더 쌓아서 익숙해지도록 하자.