[Wecode] 1차 프로젝트 후기

rang-dev·2020년 7월 5일
0
post-thumbnail

👩🏻‍💻프로젝트 소개

  • 위코드 1차 프로젝트로 닥터마틴 홈페이지 클론을 하게 되었다. 우리 팀은 백엔드 3명, 프론트 3명이었고 나는 백엔드를 담당했다.
  • 개발기간 : 2020.06.22 ~ 2020.07.03(약 2주)
  • Backend Github

클론한 사이트

< 닥터마틴(DR.MARTENS) >
닥터마틴은 은 군인의 발을 편하게 만들기 위해 시작했지만 지금은 뮤지션, 패션피플, 모델 등의 사랑을 받는 상징적인 부츠 아이템으로 성장하며 한국뿐 아니라 전 세계에서 사랑을 받는 영국 브랜드이다.

▼ 영상보기(Click!)

✍🏻 적용 기술

  • Python
  • Django
  • Beautifulsoup, Selenium
  • Bcrypt
  • JWT
  • MySQL
  • CORS headers
  • Git, Github

😎 프로젝트에서 수행한 역할

  • 데이터 모델링
  • MySQL DB 구축
  • 홈페이지 리뷰 크롤링
  • 데이터 업로더 작성
  • 상품 상세 페이지 뷰
  • 상품 검색 뷰
  • 마이페이지 뷰

👏🏻 잘한점

모델링은 함께
프로젝트를 진행하면 할수록 모델링이 어떻게 되어있는지, 왜 그렇게 관계를 설정했었는지에 대해서 모든 팀원이 제대로 알고 있는 것이 크롤링을 할때도, 뷰를 짤때도 매우 중요하다는 것을 느꼈다. 또한 이후에 모델링을 수정할 일이 생겨서 회의할때도 의사소통이 잘 이루어졌기 때문에 매우 잘한일이라고 생각했다.

팀워크
맡은 일이 빨리 끝나면 다른 팀원이 어려워하는 것을 알려주거나 함께 코드를 짜기도 했다. 상품 리스트 뷰를 맡은 팀원이 힘들어하고 있어서 내가 상품 디테일 뷰를 짜면서 알게된 내용들을 공유하고 하나씩 같이 풀어나갔다. 함께 해결해나가면서 prefectch_related, select_related에 대해서 많이 알게 되었다.

related_name session을 들었을때는 멘붕이 와버려서 다같이 7층으로 달려가 멘토님께 설명을 듣고온 기억이 난다. 어려운 것들을 다같이 해결해나가며 2주동안 함께 나아가고 있다는 느낌이 들었다. 프로젝트가 2주차에 접어들어 지치고 힘들었을때는 분위기 메이커 🌟동건님🌟이 우리를 아주 빵빵 터트려주셨다. 썸네일인 발표자료도 해병대 출신 동건님 작품😎! 만들면서도 배아프게 웃었다.

성장
프로젝트에 들어가기전만 해도 장고에 갓 걸음마를 뗀 👶🏻와 같았다. 모든 것이 생소했고 회원가입, 로그인을 구현해보는 간단한 실습에도 수 많은 에러와 마주했었다. 크롤링도 너무 어려워서 일요일까지 겨우겨우 하다가 결국 데이터베이스에도 못넣어보고 csv만 만들어보고 부랴부랴 프로젝트에 들어갔었다.

하지만 이번 프로젝트를 수행하면서 어렵게만 느껴졌던 크롤링도 (Selenium으로 접힌 리뷰를 하나하나 열어가면서) 리뷰를 긁어왔고, 크롤링에 밀려 실습도 못하고 들어온 DB 업로더도 몇백줄이나 만들어냈다. 스타벅스 음료 모델링도 테이블이 너무 많다고 생각했는데 그것의 몇배가 되는 23개의 테이블들을 모델링했다. 또한 수 많은 테이블들을 거쳐서(foreignkey를 타고타고타고🚙 or 역참조?😉) 데이터를 가져올수도 있게 되었다.

😓 아쉬운점

피할수 없었던 모델링 수정
크롤링 하거나 뷰를 짜면서 모델링이 제대로 이루어지지 않은 것들이 하나씩 눈에 보이기 시작했다. 작게는 필드를 추가하거나 크게는 관계를 수정해야하는 경우가 생기기도 했다. 닥터마틴은 카테고리를 3중으로 분류했는데(우리는 Menu-Category-SubCategory라고 칭했다) 여기서 문제가 발생했다. 우리가 겪었던 문제는 Menu가 달라지면 상품도 달라져야 하는데 어떤 메뉴를 선택하든지 모든 상품이 불러와지는 것이였다. 처음에 모델링을 설정할때도 이 세 카테고리들과 상품을 어떻게 엮어야할지 감이 안왔었는데 결국 설계를 잘못해버린 것이다. 그래도 하루를 매달려서 발표 전에 수정할 수 있었다.

프론트엔드와의 소통
처음에는 프론트가 쓰고있는 더미데이터 형식을 보내주어서 그 형식에만 맞춰서 보내주면 된다고 생각했었는데 그 이외에도 url이나 body에 어떤 형식으로 데이터를 요청해야하는지 등 소통할 부분들이 더 많았지만 제대로 고려를 하지 못했다.

Tool 활용 능력
기능을 구현해내는데 바빠서 Trello를 제대로 사용하지 못했다. 전반적인 진행상황을 트렐로를 통해서 공유했어야했는데 그냥 맡은 기능 구현이 끝나면 processing에서 done으로 바꿔넣는 정도로밖에 사용하지 못했다.

다른사람과 함께 git을 사용한 것이 처음이었고 또한 add, commit, push이 외의 다양한 기능을 써본 것도 처음이여서 처음에 실수가 많았다. 멘토님이 우리 팀이 git과 고군분투 하는것을 보고 git탐험대라고 하셨던..ㅋㅋㅋ 이리저리 실수도하고 탐험도 해보면서 전보다는 git과 친해진 것 같다. 이번에는 에라 모르겠다, 그냥 일단 해보자!!라는 마음으로 git을 사용했다면 다음에는 git을 더 이해하면서 사용해보고 싶다.

구현해볼 수 있는 기능의 한계
2주라는 시간의 제약때문에 해보고 싶었던 지도를 직접 구현해보지 못한 것과 상품 디테일 뷰 이외에 다른 메인 기능들을 경험해보지 못했던 것이 아쉬웠지만 2차에서 이번에 하지 못했던 기능을들 경험할 수 있을 것이기 때문에 크게 아쉽지는 않다.

🤓 해결/개선방법

빠른 인정, 빠른 수정
일을 진행하다가 어? 이거 이상한거 같은데? 생각이 들면 다같이 살펴보고 잘못했구나 싶으면 바로 수정했다. 수정을 해야하는 상황에서도 불편한 내색이 없으니 실수나 잘못된 점을 발견했을때 바로 말하고 빠르게 수정할 수 있었던 것 같다.

문제는 다함께 해결
마감 마지막날 위에서 언급했던 상품들이 Menu에 제대로 걸러지지 않는 문제가 발생했었다. 쿼리를 잘못짜서 그런줄 알고 몇시간을 매달리다가 결국 집에 갔다. 그리고 집에가는길 내내 고민을 하다가 이건 모델링이 문제다라는 결론을 내리고 다음날 아침에 바로 가서 문제상황을 공유하고 내 생각을 말했다. 팀원들 모두 함께 고민하고 결정된 모델링 수정안대로 수정을 진행했다. Aquery수정, models.py수정, 업로더 만들기까지 각각 분배해서 빠르게 진행할 수 있었고 문제를 해결할 수 있었다.

Postman을 애용하자
이번 프로젝트에서는 제대로 이용하지 못했던 postman의 API Documentation이다. 프로젝트 중간에 이에 대한 세션이 진행되었지만 해야지 해야지하다가 한켠으로 미뤄두었었다. 발표를 위해 만들고보니 미리 만들었으면 프론트가 더 편하게 데이터를 받을 수 있었겠구나하는 미안함과 아쉬움이 남았다. 그래서 2차때는 무조건 사용할 것이다!

⭐️ 기록하고 싶은 Code

▶︎ 포린키 타고가요~🚙

맨 처음 들었을 때 정말 와닿지 않았던 select_relatedprefetched_related였지만 프로젝트 말미에는 나름 능수능란하게 쓰고 있는 나를 발견했다. material와 country에 대한 코드에서는 ,로 구분했는데 이것은 material, country끼리는 서로 관계되지 않았고 모두 Product에 직접 연결되어있기 때문이었다. 이런 경우에는 컴마를 사용해서 한번에 쓸 수 있다는 것을 알게되었다.

또한 처음 알게되었을때 신세계를 발견한 것 같았던 __로 포린키(or _set)타고가기! 이렇게 prefech_related를 한번에 쓸 수 있을뿐만 아니라 filter에서도 동일한 방식으로 아주 멀리있는 테이블의 기준으로 필터링이 가능하다.👍🏻

▶︎ Django Aggregation

리뷰의 평균 별점을 계산할때 Avg를 사용하게 되었다. 처음에는 for문을 돌리면서 review 별점을 다 더하고 리뷰 갯수로 나눠서 평균을 계산 했었는데 ZeroDivisionError까지 예외처리를 하면서 코드가 늘어났었다. 이후 aggregation이 가능하면 사용해보라는 피드백을 받고 한번 도전해보았다. 생각보다 훨씬 간단했고 더 다양한 기능들이 있어서 2차때 더 다양하게 사용해보고 싶다.


▶︎ List Comprehension이 이렇게 좋은거였어..?

for문 전에 빈 list를 만들고, for문 시작할때 빈 딕셔너리 만들고 for문 다 돌면 리스트에 해당 딕셔너리를 추가하고...그렇게 길어졌던 코드가 list comprehension 하나로 이렇게 깔끔해져버렸다. 간단한 list comprehension은 써봤었는데 이렇게 딕셔너리도 list comprehension을 사용해서 추가할 수 있다는 것은 이번에 처음 알게 되었다. 자주 애용해야지!

👋🏻 마치며...

위코드에 오기전부터 그렇게나 기대(+걱정)했었던 첫 프로젝트가 끝났다. 위코드를 시작하고 시간이 빠르게 흐르긴 했지만 이번 2주는 정말 믿을수 없이 빠르게 지나갔다. 프로젝트를 시작하며 '우리는 이제부터 막차타고 가야되니까 닥터막차야ㅋㅋㅋ'라고 자조섞인 농담으로 시작된 팀명처럼 다들 자기 자리를 지키면서 열심히 했다. 밤에 인사하고 떠날때 남아있던 팀원들이 아침에 항상 그대로 앉아있는 것을 보고 정말 대단하다는 생각이 들었다. 힘든 기간이었지만 팀원들 덕분에 힘내서 재밌게 해낼 수 있었다.👬👭👭

2차 프로젝트 - Airbnb 클론 후기

profile
지금 있는 곳에서, 내가 가진 것으로, 할 수 있는 일을 하기 🐢

2개의 댓글

comment-user-thumbnail
2020년 7월 5일

어제 하루종일기다렸는데 드디어 올라왔네요ㅋㅋㅋ😁

1개의 답글