[Wecode] 2차 프로젝트 - 에어비엔비 클론 프로젝트 후기

rang-dev·2020년 7월 18일
2
post-thumbnail

👩🏻‍💻프로젝트 소개

세계 최대의 숙박 공유 서비스이며 2초당 한 건 씩 예약이 이뤄지고 있는 Airbnb의 웹사이트 클론 프로젝트를 다음과 같이 진행했다. 팀 구성은 프론트 3명, 백엔드 3명이었고 나는 백엔드를 맡았다.

▼ 영상 보기(Click!)

✍🏻 적용 기술

  • Python
  • Django
  • Beautifulsoup, Selenium
  • Bcrypt
  • JWT
  • Unittest
  • MySQL
  • CORS headers
  • Git, Github
  • AWS EC2, RDS
  • Docker

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

  • 데이터 모델링
  • MySQL DB 구축
  • Django 초기세팅
  • 카카오 소셜 로그인/회원가입 기능
  • 로그인 데코레이터 구현
  • 숙소 예약 기능
  • 위시리스트 기능
  • 구현한 기능의 Unittest
  • AWS EC2, RDS 구축

👏🏻 잘한점

프론트엔드와의 소통
1차 프로젝트 후기에서 아쉬웠던 점 중의 하나가 프론트엔드와의 소통이었다. 이번에는 이 문제를 겪지 않기 위해서 API를 완성하면 해당 API에 대한 정보를 Postman으로 문서화해서 공유했다. 어떤 엔드포인트를 사용하는지, 포함해야 하는 header나 body가 있는지, 어떤 형식으로 데이터를 보내주는지를 한번에 공유할 수 있어서 주고받는 데이터에 대한 혼란이 생기지 않았다.

Git
1차에 비해서 git과 더 친해졌다. 2차에서는 add나 commit, push 외에도 rebase, stash 등 더 다양한 기능을 사용했다. 또한 처음에 git을 사용할때는 remote, local, branch와 같은 개념을 이해하지 못해서 파일을 날리는 경우가 종종 있었는데 이번에는 branch를 제대로 이해하고 왜 branch마다 존재하는 파일들이 다를 수 있는지 왜 파일을 날리게되는건지 확실히 이해하게 되었다.(사실 아직 무서워서 copy본을 상시 만들어두긴 했었다는건 비밀🤫)

Unit test
이번 프로젝트의 가장 복병(?)이었던 유닛테스트... 사실 나는 udacity 수업을 들을때 unit test를 해본 적이 있었기 때문에 안일하게 생각하고있었다. 하지만 내가 경험해봤던 unit test는 setup도 안썼었고 teardown도 안썼던 아주 기초 중의 기초였을 뿐이었다... 카카오 로그인의 unit test에서는 카카오 API를 사용해서 request.get으로 가져오는 회원정보를 mock데이터로 만들어야했다. 이 과정에서 patch가 굉장히 어렵게 다가와서 카카오 로그인 유니테스트를 짤때 고생했던 기억이 난다.

뷰 만들어내기도 벅찬데 유닛테스트까지 굳이 해야하나하는 내적 갈등이 생겼었지만 일단 모든 뷰의 유닛테스트를 작성했고 유닛테스트의 진가는 나중에 코드를 수정할때 발휘되었다. 코드를 수정하고 굳이 postman에 들어가서 돌려보지 않아도 test만 run하면 제대로 돌아가는지, 오류가 난다면 어떤 오류가 발생하는지 바로 확인할 수 있어서 매우 편했다. 또한 로그인 데코레이터가 있는 기능들은 postman에서 유효한 토큰이 없으면 테스트하기 어려웠는데 unit test에서는 그냥 토큰을 임의로 만들어서 테스트를 진행할 수 있어서 좋았다.

😫 아쉬운점

Standup Meeting
1차 프로젝트에서는 매일 스탠드업 미팅을 했던 반면 이번 프로젝트에서는 그렇게 하지 못했다. 시간을 딱 정해놓지 않으니 까먹을때도 있었고 또한 갑자기 하려고하니 팀원이 자리에 없는 경우도 있었다. 2주차때는 더 바빠지면서 스탠드업 미팅을 많이 못하게 된 것 같다. 앞으로 스탠드업 미팅은 시간을 딱 정해서 그 시간에는 모든 팀원이 미팅 할 준비가 될 수 있도록 해야할 것 같다.

2주라는 제한된 시간
이건 1차에도 적었던 거지만 2주동안 해당 사이트의 모든 기능을 구현할 수 없다보니 구현하지 못한 기능에 대한 아쉬움이 남는다. 시간이 여유있었다면 가장 구현해보고 싶었던 기능은 게스트와 호스트가 채팅을 할 수 있는 메시지 보내기 기능이었다.

발표
프로젝트 2주차 금요일에 마지막으로 프론트, 백 각각 프로젝트에 대한 발표를 5분정도 하게 된다. 평소에 발표 공포증이 있는데다가 발표 준비를 충분히 하지 못해서 팀원들의 노고와 성취를 제대로 발표하지 못한 것 같아 미안함과 아쉬움이 들었다😭 (p.s. 같이 발표해준 9기(+우리팀) 마스코트 찰스님에게 감사를🙇🏻‍♀️)

⭐️ 기록하고 싶은 Code

► Kakao 소셜 로그인 unit test

처음 들을때 도대체 무슨말이야...했던 mock데이터 만들기.
원래는 kakao API에서 지정한 url로 request를 해서 user 정보를 받아와야한다. 하지만 테스트에서는 patch를 사용하여 원래 받는 데이터의 형식과 동일하게 만들어줄 수 있다.

view에서는 .json()으로 받은 json response를 파싱해주는데 이 과정을 위해 unit test에서는 클래스를 만들고 json이라는 메소드를 만들어주는 것도 신기했다.


► 여러 필드를 함께 unique 설정하기

위시리스트에서는 한 사용자가 한 숙소의 하트를 여러번 누른다고 해서 그 숙소가 여러번 저장되면 안된다. 그렇다고 user나 stay를 하나만 unique 설정해버리면 다른 숙소들을 찜할 수 없다. 그래서 unique_together를 통해서 stay, user 조합이 unique하도록 설정할 수 있었고 wishlist의 중복 문제를 해결할 수 있었다.


► Enum

처음에는 Enum을 사용하지 않고 그냥 order staus가 1,2와 같이 숫자로 표기되어 있었다. 하지만 PR 코멘트로 가독성을 위해서 코드만 보고 어떤 상태인지 알수 있도록 Enum을 정의해주는것이 좋을 것 같다는 피드백을 받고 수정하게 되었다. 처음에는 이게 가능해...?하며 반신반의하며 짰는데 실제로 실행되는것을 보니 신기했다🤭


► Django ORM

매번 create만 사용하고 있었는데 get_or_create, exists등 다른 django ORM을 써보면서 다양한 ORM을 사용하여 코드를 더 간결하게 해야겠다는 생각이 들었다.

👋🏻 마치며...

에어비엔비는 내가 프로젝트 아이디어로 제시했던 웹사이트였다. 에어비앤비를 선택했던 가장 큰 이유는 사용 경험이 많았던 에어비앤비가 어떤 구조와 어떤 기능으로 만들어졌는지 궁금해서 뜯어보고 싶었고, 또한 사용한 경험이 있는 만큼 더 프로젝트에 더 애정을 가지고 할 수 있을거라고 생각했기 때문에다. 감사하게도 9기 분들의 투표로 2차 프로젝트로 선정될 수 있었고 내가 동경해왔던 에어비앤비라는 멋진 사이트를 실제로 구현해볼 수 있었다.

프로젝트의 가장 큰 장점 중 하나는 많이 못친해졌던 분들과 가까워질 수 있는 계기가 된다는 것이다. 사실 친했던 분들과는 1차, 2차 모두 같은 팀이 되지 않았었다. 하지만 1차 프로젝트로 좋은 분들을 만나고나니 말을 많이 나눠보지 못했던 분들과 같은 팀이 되어도 전혀 걱정이 되지 않았다. 오히려 위코드가 끝나기 전에 가까워질 수 있는 계기가 되어 좋았다. 이번 팀원분들도 함께 즐겁게 코딩할 수 있는 분들이어서 정말 행복했다(🌸100프로 진심🌸)

1차 프로젝트 - 닥터마틴 클론 후기

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

4개의 댓글

comment-user-thumbnail
2020년 7월 19일

발표 재밌었어요ㅋㅋㅋㅋ
2차도 고생많으셨습니다 기업협업나가서도 화이팅하세요!!💪🏻💪🏻

1개의 답글
comment-user-thumbnail
2020년 10월 19일

오.. 이거 글 작성 노션으로 하신건가요? 아니면 velog에 이런기능이 있나요? 오른쪽 목록도 그렇구

1개의 답글