MEGABOX(메가박스)’는 ‘엄청나게 큰, 거대한'이라는 뜻의 MEGA와 ‘상자'를 뜻하는 BOX의 결합으로,
큰 육면체 형태의 영화관을 영상화함과 동시에 고객들에게 크고 다양한 즐거움과 만족을 선사하고자 하는 의미가 담겨 있는 국내 영화 예매 사이트 입니다.
2021.10.18 ~ 2021.10.29
추가 구현 사항까지 Back-end의 API 구현은 모두 완료할 수 있었다. 생각보다 여유롭게 작업되어 10/28일에 배포까지 완료!
Aquery Tools를 도훈님과 결제해서 사용했다. 지난 프로젝트때는 무료인 툴을 사용했는데 역시 유료가 편한맛이 있는 듯 하다😅 공동작업이 가능하고 사용하기 편리했다.
사용자가 카카오로 로그인을 하면 카카오에서 프론트 서버로 카카오 토큰을 보내주고, 그 토큰을 백엔드로 전달해 백엔드는 다시 카카오로 토큰을 전달해 유저의 정보를 보내준다.
해당 유저가 이미 존재하면 새로운 로그인 액세스 토큰(not kakao token)을 보내주고 존재하지 않는 유저면 카카오에서 보내준 정보를 저장하고 로그인 액세스 토큰을 발행한다.
이번 2차 프로젝트의 핵심은 unit test였던 것 같다.
일반 API는 작성이 수월했지만 외부 API를 쓰는 경우 유닛 테스트 작성이 살짝 까다롭다.
실제 해당 API를 호출 할 수 없으니 mocking한다.
@patch
데코레이터를 사용하면 특정 범위 내에서만 mocking이 가능하도록 해주고 mock객체를 테스트 메서드의 인자로 추가하게 된다.
@patch('users.views.requests')
이 부분은 프론트 구현이 안돼서 실제 사용은 못해봤다..(아쉬움)
영화 실 관람평은 다음을 기준으로 로직을 구성했다.
이 로직을 짜면서 알게된것은 datetime은 int형과 비교할 수 없다는 것이다.
time_diff = review.created_at - booking.movie_theater.screen_time
if time_diff <= datetime.timedelta(days=7):
user.point += 50
user.save()
이 부분에서 원래 7일 이내인지 비교하는 곳을 그냥 단순히 7로 비교하면 되겠다 싶었는데 에러를 반환했다. 멘토님의 도움을 받고 timedelta
메소드를 이용해 로직을 구성할 수 있었다. 이때 사용한 timedelta는 다른 로직을 구성할때도 유용하게 쓰였다.
참 길다..
Q객체를 사용해서 query string으로 들어온 필터링 조건을 검사하고 데이터베이스에서 필요한 데이터를 필터링해서 보내준다.
movie나 theater은 여러개 들어올 수 있으니 getlist로 받는다.
여기서 아쉬운점이 있다면..
이점은 비로그인 구현을 해보려고 했는데 멘토님들이 로그인은 소셜로그인 하나만 구현하고 다른 기능이나 인프라에 집중해보는게 어떻냐고 하셔서 일단은 이렇게 구현했다. 나중에 시간이 남으면 수정해볼 생각이다.
theaters = request.GET.getlist('theater_id', list(user_like_theaters.values_list('theater_id', flat=True)))
⬆️ 실제 메가박스 화면
위에 gif를 보다보면 선호극장을 선택 해제 했음에도 옆에 데이터가 남아있는 모습을 볼 수 있다. query string에 값이 들어오지 않으면 default값을 사용하므로 저렇게 된 것.. 이 부분도 수정이 필요함을 느꼈다.
이번에는 1차 프로젝트보다 난이도가 상승했지만 왜인지 모르게 1차보다는 훨씬 수월하게 끝났다. 물론 100%완벽하고 마음에 드는 결과물은 아니겠지만 내 스스로 성장했다고 느낀다.
기간 내에 원하는 기능을 소개할만큼 모두 구현했고 프로젝트 마무리 날 전에는 배포까지 했다. 배포 이후에 수정사항이 생겨서 배포 이후에 코드를 수정하는 hotfix도 경험해 볼 수 있었다.
멘토님이 Application Load Balancer도 알려주셔서 ec2컨테이너는 1개지만 Load Balancer도 붙여보는 경험을 해 볼 수 있었다.
내일부터는 원티드 프리온보딩 백엔드 코스를 한달동안 듣게된다. 더 더 성장할 수 있는 계기가 될거같아 힘들겠지만 벌써 기대가 된다😌 하면 할수록 재미있는 일을(물론 힘든것도 많지만) 할 수 있다는건 참 행복한 일인것 같다.