WATCHAPEDIA, 1차 프로젝트 후기

폐쇄맨·2020년 9월 5일
19

WeCode

목록 보기
20/22
post-thumbnail

🙇🏻‍♂️   시작하기 전에  

엥? 어디서 본 것 같은 글이라구요? 위코드 9기 강솔미님의 닥터마틴 1차 프로젝트 후기를 오마주(?) 하였어요. 여윽시 센빠이 👍 감사합니다!

👩🏻‍🏫   프로젝트 소개  

왓챠피디아(WATCHAPEDIA) 는 영화 평가를 기반으로 사용자의 취향을 분석해주고, 이에 따라 추천까지 해주는 서비스에요. 개인적으로 1000개 이상의 영화를 평가했고, 저만의 영화 컬렉션으로 이용하고 있어요 ❤️! 최근에는 왓챠의 스트리밍 서비스와 함께 TV 프로그램, 도서 까지 서비스를 확장했답니다.

  • 팀원:
wecha = { 
  "frontend": ["김동호", "류상욱", "박주엽"],
  "backend" : ["이충희", "이용민"]
}

🎞   데모 영상  

조금 더 잘할 수 있었을 텐데, 아쉬워요.. 😓

🖥   기술 스택  

개발 도구

  • Django 웹 프레임워크로만 API를 구현했어요.
  • AQueryTool 을 이용하여 데이터베이스 모델링을 했어요.
  • Selenium 을 통해 영화 데이터를 크롤링했어요.
  • 크롤링한 csv 데이터를 MySQL 에 저장해 두었어요.
  • AWS EC2 서버에 RDS 인스턴스를 연결하여 서비스 하였어요.

협업 도구

  • Git / Github 는 개발자의 필수 도구! 💪
  • Trello 로 전체적인 일정 관리와 팀원들의 작업 현황을 파악했어요.
  • Postman 으로 프론트엔드와 백엔드를 연결할때 소통하기 위해 API 문서를 작성하였어요. - 영화 API 문서, 유저 API 문서

🤔   어떤 기능을 클로닝 했나요?  

색깔이 들어간 내용은 직접 구현한 부분입니다!!

백엔드 구현 사항을 말씀드릴게요!

메인 페이지

  • 넷플릭스와 같은 서비스 제공자와 평균 별점으로 영화 랭킹을 제공해요. 서버에서 정렬해서 보내준답니다.
  • 사용자의 평가를 기반으로 장르, 국가, 인물별 영화들을 추천해줘요. 쿼리 스트링 으로 고르면 되요!
  • 사용자들의 영화 컬렉션 리스트를 조회할 수 있어요.
  • 영화 컬렉션의 상세 정보를 조회할 수 있어요. 페이지네이션 을 구현하여 프론트엔드에서 무한 스크롤을 구현할 수 있게 도와줘요.
  • 영화를 검색할 수 있어요. 자동완성 기능이 있답니다.
  • 전체 평가 수를 보여줘요.

로그인 & 회원가입 모달

  • 이메일로 회원가입을 해요. bcrypt 를 사용한 암호화는 필수!
  • JWT 로그인을 구현했어요. 데코레이터를 이용한 Validation은 필수!

영화 상세 페이지

  • 영화 상세 정보를 보여줘요. 평균 별점, 출연진, 리뷰, 이미지 URL, 컬렉션 등을 포함하고 있어요.
  • 로그인된 유저는 평가를 하고 코멘트를 남길 수 있어요.

마이 페이지

  • 간단한 유저 정보를 보여줘요. 유저 이미지, 유저 네임, 설명 등을 포함해요.
  • 유저가 평가한 영화 목록을 보여줘요.

😎   잘한 점  

1. 친해졌다!


처음에 우리팀은 말수가 적은 사람들이 모여있어서 PM인 저로서는 조금 걱정이었어요. 그래서 매일 점심, 저녁 중 한 번은 식사를 꼭 같이해야 한다고 생각을 했어요. 다들 그렇게 생각하셨는지, 밥을 같이 먹으며 프로젝트에 대한 것 뿐만 아니라 개인적인 이야기를 서로 많이 했어요. 어색하게 지내는 사람이 없었다는 것으로 성공적! 😍

2. 목표한 만큼 구현했다!

applause
10일이라는 짧은 기간 동안 우리팀은 각자가 맡은 필수구현 사항을 모두 구현했어요! 처음에 "이게 잘될까? 🤔" 의구심이 들었지만 시간이 지날수록 "오~ 왠지 다 할 수 있겠는걸?" 라는 생각으로 바뀌었어요. 특히 프론트 상욱님께서 무언가 구현할 때 마다 팀원들에게 자랑하는 모습을 보면서 정말로 흐뭇했어요. 한편, 백엔드인 저는 만든걸 보여줘도 팀원들은 시큰둥~ ㅋㅋㅋㅋㅋㅋㅋ 🤣

😔   아쉬운 점  

잘한게 있으면 그렇지 못한것도 있는게 인생이라지만, 이번 프로젝트는 아쉬운 점이 정말 많았어요. 하지만 어쩌겠어요! 앞으로 잘하면 되는걸요 😊!

1. 문서화의 부족


프로젝트 시작할 때, 사이트 분석을 오랜 시간 두고 버튼 하나하나 클릭을 해보면서 했어야 했는데... 😢 이런것들을 문서화 하지 않고 노트에 대충 적어 놓으니 까먹기도 하고 중간에 "충희님, 이런 기능도 있어요!!" 소리를 몇 번 듣기도 했어요. 2차 프로젝트 때는 하루를 모두 써도 좋으니 꼭 문서화를 해야겠어요!!

2. 나는 왜 이리도 침착하지 못했나

so complex
코드가 길어지고 중복될 것 같다 싶으면 모듈화하고 함수를 만들고 이런 것들을 머리로 모두 알고 있지만, 막상 실제 코딩할 때는 지키지 못했던 것이 사실이에요. 멘토님에게 코드 리뷰를 받아, 가이드를 따라서 코드가 예뻐지긴 했지만, 처음에 작성한 코드를 생각하면 어휴... 😓 다음번에는 수정 요청 없이 바로 Merge되는 Pull Request 날리기 도-----전!

🥳   보여주고 싶은 코드   🥳

1. 재사용 가능한 함수 작성

이번 프로젝트에는 GET 요청 API를 많이 작성하다 보니 JSON 바디가 굉~~~~장히 길어지고 중복되는 경우가 많았어요. 그래서 아래와 같이 많은 수의 함수를 만들어두고 여러번 재사용 했답니다. 리스트 컴프리헨션 사용 마스터는 덤! 😎
코드1

위의 코드는 이곳에서 확인이 가능해요!

2. DB Hit를 줄이기 위한 노력!

우리 백엔둥이들에게는 데이터베이스에 쿼리를 한번 더 날리냐 덜 날리느냐가 굉장히 중요해요! 장고에서는 select_related(), prefetch_related()와 같은 메서드를 이용하면 된답니다.

select_related() 의 공식 문서 번역이 저의 블로그 에 있어요!

코드2

위의 코드 또한 이곳에서 확인이 가능해요!

컬렉션에 담긴 영화 정보를 알고 싶은데 prefetch_related()가 없었다면 아마도 아래와 같은 코드를 작성했을거에요 😭. Oh là là..

collections = Collection.objects.all().order_by('?')[:limit]
for collection in collections:
    film_collections = FilmCollection.objects.filter(collection=collection)
    for film_collection in film_collections:
        print(film_collection.film.korean_title)

👋   마무으리  

먼저 부족한 PM을 커버해준 우리 팀원들에게 고맙다는 말을 해주고 싶어요. 그리고 항상 힘을 주는 위코드 동기들, 멘토님들이 있어서 다행이에요. 혼자였다면, View 하나 만들고 포기했을거에요...ㅋㅋㅋㅋㅋㅋ. 함께해서 WeCode!

엥?? 3개월이요? 저는 이미 개발자입니다만?

profile
폐쇄맨

8개의 댓글

comment-user-thumbnail
2020년 9월 6일

충....희.... 크
1차 플젝 진짜 진짜 고생 많으셨어요!
솔미님 내일 출근할때 힘나라고 월요일날 9기방에 링크 공유해야겠어요 ㅋㅋㅋ

1개의 답글
comment-user-thumbnail
2020년 9월 6일

역시 충...희.....

1개의 답글
comment-user-thumbnail
2020년 9월 6일

충............희
지금 진행중인 2차도 쓰실 시간이 다가오고 있습니다??

1개의 답글
comment-user-thumbnail
2020년 9월 23일

브랜디도 잘 작성해주세요

답글 달기
comment-user-thumbnail
2021년 10월 13일
답글 달기