기업협업 회고록

KDG·2020년 8월 18일
1


AVA Entertainment는 영화,다큐멘터리,스포츠,애니메이션 수입/배급/유통 뿐만아니라, 바이럴 광고 제작, VR특수 촬영, V커머스 등 다양한 분야의 비즈니스를 하는 기업이다.
여기서 우리는 아조아(AJOA)라는 셀럽의 영상을 선물로 받고, 아이돌, 코미디언, 유튜버, 인플루언서, 모델, 스포츠 스타 등 다양한 분야의 셀럽이 나만을 위한 영상을 만들어주는 사업에 웹을 제작하기로 했다.

  • Front-end 2명, Back-end 3명으로 구성
  • 사용한 기술 : Python, Django, MySQL, Git
  • 기능 구현
    • 메인페이지에 셀럽 리스트 기능 구현
    • 셀럽 전체 리스트와 카테고리 별로 나오는 리스트 기능 구현
    • 셀럽 정보에 관한 디테일 페이지 기능 구현
    • 회원이 셀럽에 구독과 좋아요 할 수 있는 기능 구현
    • 셀럽 검색 기능 구현
    • 베스트 비디오에 댓글 쓰기, 수정, 삭제 기능 구현

기업협업 마무리

7월20일부터 8월 13일까지 약 4주간 진행됐던 기업협업이 마무리가 됐다.
백엔드 나, 종헌님, 나온님 3명. 프론트엔드 동경님, 창수님 2명이 같이 나갔는데 다 실력도 좋으시고 인성도 완전 좋으신분들이어서 4주동안 힘들지 않고 재밌게 일을 했었다.
또 아바 엔터테인먼트 대표님이랑 직원분들이 매일 점심식사를 챙겨주시고, 우리들이 좋은환경에서 일할 수 있도록 새심하게 챙겨주셔서 좋은 분위기 속에서 일을 할 수 있었다.
4주라는 기간이 길다면 긴 시간이고 짧다면 굉장히 짧은 시간이었는데 실무에서는 어떤식으로 운영되고 어떤것들이 필요한 지 배우게 된 좋은 시간이었다.✌️✌️

한 일

1. 모델링

우선 처음으로 모델링을 했다. 기존의 있던 모델을 그냥 쓰려고 했는데 포린키로 엮여있는 것이 하나도 없었고, 한 테이블에 불필요한 필드들이 많았고, 데이터가 이상하게 들어가있었다. 우리가 학원에서 배웠던 방식과는 많이 다르다 생각이 들어서 우리 방식으로 갈아엎기로 했다.
배웠던 방식으로 테이블을 세세하게 나누고 관련있는 테이블은 포린키로 엮었다.
모델 변경을 늦게 시작해서 협업 나간지 2주만에 완성이 됐다. 물론 api를 구현하면서 중간중간에 수정을 해나갔다. 모델은 처음부터 수정했었으면 하는 아쉬움이 크다. 1주를 날린 기분이었다.😢

2. 데이터 넣기

모델을 완성하고 기존 데이터를 우리가 만든 모델 형식에 맞춰 데이터를 넣으려고 했다. 근데 이게 데이터가 생각보다 많고 형식이 많이 달라서 옮기는데 많은 시간이 걸리는 것이었다. 하는 도중에 기능구현하기도 벅찬데 이걸 언제 다 옮기지 하는 생각이 들어서 하던걸 멈추고 몇개의 목데이터만 넣기로 결정했다. 기능을 구현할때 확인할수있는 5~7개의 목데이터만 만들었다.

3. 기능구현

협업 나간지 3주차부터 본격적으로 기능구현을 시작했다. 회원, 주문, 나머지(메인페이지, 베스트영상, 셀럽페이지, 셀럽샵 등등) 이렇게 세 부분으로 나눠 진행했다. 회원부분은 나온님이 주문부분은 종헌님이 나머지는 내가 맡았다.
나머지부분에서 메인페이지 리스트, 셀럽 디테일페이지 이런것들은 prefetch_related를 사용해서 포린키로 엮여있는 부분들을 가져와 get방식으로 데이터를 전송했다. 이 부분들은 쉬워서 금방할 수 있었다.
이러한 기능을 어느정도 구현하고 동경님이랑 맞춰봤는데 역시 맞출때는 한번에 되는 경우가 없다고 오류가 뜨고 데이터 전송이 이상하게 가는 경우가 발생했다. 많은 소통을 통해 문제를 해결해나갔다. 프론트에서 수정할 거, 백에서 수정할거를 계속 소통해서 조금씩 해결했다.
결국에 프론트랑 맞춰서 잘 나오는 것을 확인했다. 다만 시간이 좀 부족해서 원래 하기로했던 기능들을 다 맞춰보진 못했다.(구독, 좋아요, 베스트영상 디테일 등)
그리고 2주동안 아조아 어플의 많은 기능을 다 구현하기에는 힘들었다. 생각보다 많은 기능이 있었고, 처음해보는 기능도 있어서 다 해보지 못했다. 시간이 좀 만 더 있었으면 하는 아쉬움이 있고, 모델 만드는데 시간을 너무 오래잡아서 기능구현을 많이 못한것도 아쉽다.

기억하고싶은 코드

1. 리스트 컴프리헨션 조건문

리스트 컴프리헨션을 사용했는데 그 안에 내용에다가 조건문을 걸어줘야 할 필요성이 생겼다. 처음에는 이게 되는지 모르고 한참을 헤맸다. 그러다 나온님한테 물어봤는데 나온님이 쓰는 형식을 알려줬다. 그러더니 바로 문제가 해결됐다. 그때 좀 허탈했다. 찾아도 안나왔는데 10분도 안걸려서 해결됐으니....ㅠㅠ 내 검색실력에 문제가 있었겠지... 검색하는 방법도 길러야겠다고 느꼈다.
어쨌든 이런 방식으로 사용해도 되는구나 하고 알게되었고, 나중에 잘 기억해뒀다가 응용해서 써먹어야겠다고 느꼈다.
ex)

[{'VideoMemberNickname' : reply.member_idx.member_nickname if reply.member_idx != None else None,}]

2. 시간표시

모델에서 시간을 저장할 때 datetimefield로 지정하고 auto_now_add로 설정했다. 그러고 이 시간 데이터를 불러왔는데 2020.08.18T21:42:00:000 이렇게 밀리세컨드까지 나오는 것이었다. 우리는 2020.08.18 21:42:00의 형식이 필요해서 검색을 통해 찾았다.
.strftime("%Y-%m-%d %H:%M:%S")이 부분을 뒤에 추가해주니 2020.08.18 21:42:00로 깔끔하게 나왔다. 이 부분도 찾는데 좀 걸렸는데 저 형식으로 쓰고 테스트를 해본 결과 시간이 깔끔하게 나와서 기분이 굉장히 좋았고, 자주 써먹어야겠다고 생각했다.

3. 구독, 좋아요

구독, 좋아요 기능은 이번에 처음 해보는 기능이었다. 그래서 처음 어떻게 짜야할지 막막했다. 검색을 좀 해보고 로직 구현을 어떻게 할 지 생각을 해봤다.
우리는 구독을 subscribe_yn이라는 필드를 만들고 거기서 Y면 구독을 한 사람이라고 표시했다.
그래도 다행인건 서로 구독하는 시스템이 아니고 일반회원이 셀럽을 구독하는 시스템이라서 생각보단 쉬웠다.
로직을 짤 때 경우의 수를 세가지로 나누고 짰다. 첫 번째는 구독을 아예 안한사람이다. 이 경우 create를 사용해서 Y를 추가해줬다. 두 번째는 구독을 했다가 취소하는 사람이다. 이 경우는 이미 데이터가 저장되어있기 때문에 해당 데이터를 찾아 Y를 N으로 update해준다. 세번째는 구독을 취소했다가 다시 한 사람이다. 이 경우도 두번째와 마찬가지로 N을 Y로 update해주는 식으로 로직을 구성했다.
좋아요도 구독과 마찬가지로 구성했다. 이 기능들은 프론트와 맞춰보지는 못했지만 포스트맨으로 확인할 때 잘 되는것을 보니까 재밌었다.

4. 필터로 걸러주기

1,2차 프로젝트를 진행할 때는 회원상태(회원이 활동하고 있는지 안하는지의 상태), 회원탈퇴 등의 세부적인 것들을 고려안하고 모델을 만들었기 때문에 수월했다. 그러나 실제 서비스에서는 저런 세부적인 것들이 필수적인 것이기때문에 로직을 짤때 저런 것들도 고려하면서 짜야했다.
예를들어 셀럽 리스트를 보여준다고 하면 활동중인 셀럽만을 보여줘야하고 탈퇴하거나 활동중이지 않는 셀럽은 보여주면 안된다. 그래서 필터로 활동중인 셀럽만 찾아서 걸러줘야했다.
이 부분은 안해보기도 했고, 당연하다고 생각해서 쉬울줄 알았는데 은근히 어려웠고, 나도 모르게 몇개 빼먹는 경우가 종종 있었다. 필수적인 것이니 매번 잘 확인해서 작성해야겠다고 느꼈다.

5. 평균 구하기

기능중에 영상에 평점을 매기는 것이 있고 그 평점들의 평균을 셀럽 디테일 창에 띄워야하는 경우가 생겼다. 그래서 프론트랑 얘기했는데 백에서 평점들을 모아 평균값을 보내달라고 했다.
평균을 어떻게 내면 좋을까 찾아보다가 from statistics import mean을 임포트해서 사용하면 된다고 했다.

star_list = []
        for star in celeb_detail_all.orderreview_set.all():
            star_list.append(star.review_star)
mean(star_list)

평점들을 리스트에 추가하고 마지막에 mean함수를 사용하면 자동으로 평균값을 계산해준다.
이 부분도 처음써보는 기능인데 쉽고 간편해서 기억에 남는다.

느낀점

1. 잘한점

  • 실제 실무에서 사용하는 방식으로 진행한 점이다. 전에 프로젝트를 진행할 때 최소한의 필요한 기능들만 구현했다면 이번에는 로그아웃, 공지사항, 회원탈퇴 등등의 세부적이지만 꼭 필수적인 기능들에 대해서 알아보고 그 기능을 구현해봤다는 것에서 큰 의의를 두고있다.

  • 팀원과의 의사소통을 잘한점이다. 기업협업을 굉장히 좋으신 분들과 함께 나가서 의사소통을 잘했고, 수정사항이나 필요한 부분을 바로바로 소통해서 해결해나갔다. 정말 약 4주동안 한번의 트러블도 없었고 매일 웃으면서 일을 했던것같다.

  • 실무 경험을 해봤다는 점. 알바로는 회사생활을 몇번 해봤지만 개발자 인턴으로 가본건 처음이라 뜻깊은 경험이었던것같다. 회사가 어떤식으로 운영되고, 대표님과 직원분들과 일주일동안 한 일을 회의하고 발표하는 경험 등을 처음해봤기 때문에 좋은 경험이 된 것 같다.

  • 당연한 얘기지만 지각을 한번도 안한점이다. 이건 회사생활이 아니더라도 인간 대 인간의 약속이면 꼭 지켜야할 것이라고 생각한다. 그래서 나는 약 4주동안 지각을 한번도 안했다. 출근시간이 9시 30분인데 대부분 10분이나 15분전에 도착해서 할일을 준비했다.

2. 아쉬운점

  • 모델 만드는데 너무 오랜시간이 걸린 것. 모델을 처음부터 갈아엎고 시작했으면 훨씬 더 많은 기능을 구현했을 것이고, 많은 기능을 프론트와 맞춰봤을것이다. 그래도 최대한 빠른시간안에 많은 기능을 구현했지만 좀 아쉬운부분이 있긴하다.

  • 새로운 기술을 적용하지 못 한점이다. 처음에는 앱을 만드려고 해서 DRF라는 기술을 공부했다. 그런데 웹으로 변경하고 구현해야 할 기능들이 산더미처럼 쌓여서 결국에는 DRF를 포기하고 기본 장고로 기능을 구현했다. DRF는 실무에서도 많이 사용하고 배워두면 무조건 좋은데 사용하지 못한것이 많이 아쉽다.

  • 시간에 대해 여유를 부린점. 저번 프로젝트 할때보다 2주 가량이 더 늘었다. 2주나 길어져서 초반 1,2주에 여유를 좀 부렸다. 아직 시간 많이 남았네하고 생각을 했던것이다. 그러다 시간이 생각보다 매우 빠르게 갔고 금방 3,4주차가 됐다. 초반에 모델짜는데 시간을 잡아먹은것도 있지만 여유를 너무 부린것도 한 몫했다.

  • 코드를 봐줄 사람이 없던 것. 처음해보는 기능이 많았던 것 만큼 내가 작성한 코드가 좋은코드인지 좋지않은 코드인지 확인해줄 사람이 없었던 것이 좀 아쉬웠다. 그리고 리팩토링할때도 최대한 검색해보면서 하긴했지만 내가 확인한거라 잘 된건지 확인하지 못한점이 아쉽다.

마무리

4주동안 지내면서 아쉬웠던 점. 시간을 잘 사용하지 못한점에대해 반성하고 시간을 잘 사용하도록 계획을 잘 짜서 일을 진행하고, 나중에 기술을 배워야할때 두려워하지말고 시간이 부족하다면 시간을 낭비하지않고 더 투자해서 기술을 배워야겠다.
기업협업은 끝이났고 위코드도 끝이났다. 이제는 나 혼자 스스로 준비하고 나아가야한다. 겁먹지 말고, 두려워하지말고 취업할 수 있도록 열심히 노력할 것이다. 화이팅!!!!!!!

0개의 댓글