위코드 2차 프로젝트 | 마이리얼트립 클론

jacoblee19·2021년 1월 17일
5

TIL x Wecode

목록 보기
5/8
post-thumbnail

📆 프로젝트 기간

  • 기간: 2020.12.28 ~ 2021.01.08 (11일)

🛠 기술 스택

  • Front-end: React.js, React(CRA), React-router, Styled-Components, Hooks
  • Back-end: Django, Python, Cors Header, MySQL, PyjWT, Bcrypt, AWS, Docker, AqueryTool
  • Communication: Git, Trello, Slack

🎥 프로젝트 영상

✏️ 기술 소개

프로젝트 협업

1차 때도 활용하였던 Trello를 활용하였다.
이번엔 특히나 에어비앤비에 숙박하며 프로젝트를 진행하였기 때문에, 다들 너무나 소통하기에 가까이 있었지만, 그래도 연습하는셈 치고 각자의 작업하고 있는 부분을 공유하고, 또 매일 아침의 스탠드업 미팅 내용을 간단히 카드에 적어주었다 (스탠드업 미팅은 점심 메뉴를 위해 존재하는지도...🤣)

모델링

개인적으로 너무 좋아하는 모델링이다.
다른 백엔드 동기들에게는 모델링이 기능 구현을 하기 위해 꼭 거쳐가야 하는, 결과를 위해 꼭 해야만하는 일이라고 생각할 수도 있겠지만, 나는 모델링이 너무 좋다!

마치 모델링은 나에게 여행을 떠나기전 계획을 세우고 짐을 싸는 과정인 것 같다.
두 번째 프로젝트라 그런지, 이제 모델링을 짠다는건 정말 시작이란 것을 나에게 새겨주는 과정이고, 전체적인 프로젝트의 청사진을 그리는 과정이다.

여담이 길었지만😌.. 모델링을 통해서 내가 클론할 웹사이트의 구조를 더 알아갈 수 있는 것 같아서 나는 모델링이 참 재밌다..흐흐

이번 2차 프로젝트 모델링은 직관적이면서도 숙박, 항공권을 다루는 웹사이트라 그런지 many-to-many 관계를 가진 테이블들이 많았다.
솔직히 말해 두 카테고리가 navbar가 다르다면 서로 다른 웹사이트라고 볼 수 있을 정도로 결제 시스템도 달랐고 어떤 특정한 theme을 공유하는 듯한 느낌은 아니였다.

항공권 결제는 외국 항공권 웹사이트처럼 어떤 결제처의 API도 이용하지 않고, 그저 카드사, 카드번호 등 기본 정보만 입력하는 시스템이였기에, 예약 정보까지 포함하면 상당히 많은 dropdown 형식의 input이 많았다.
질문드린 멘토님과 모델링 리뷰를 해주신 멘토님이 달라서, 처음엔 드롭다운의 모든 input들을 테이블로 구성해야겠다 생각했지만, 결국 프론트측에서 하드코딩하는게 더 쉬울 것이라는 조언을 듣고 테이블은 간략하게 구성하였다.

예약 정보까지 프로젝트를 구현하지는 못했지만, 그래도 모델링은 넓은 시야를 가지고 구현해야 한다는 생각을 가지고 완성해서 그런지, 부족한 점이 많겠지만은 넓게 보는 연습을 한 것 같아 개인적으로 좋았던 모델링 시간이다.

🛒 담고 싶은 코드

> 내가 구현한 기능들

  • 정규표현식 사용 회원가입 validation
  • user authorization 데코레이터 작성
  • 카카오 소셜 로그인 / 이메일 인증 회원가입, activation
  • Bcrypt를 사용한 솔팅, 암호화 해쉬 패스워드 구현
  • PyJWT를 사용해 토큰 인증 구현
  • 항공권 sorting / filtering RESTful API 구현
  • 모든 API 유닛 테스크 구현
  • AWS, Docker를 사용한 배포

> Module import해서 정규표현식 사용

원래는 SignUpView에서 사용한 정규표현식을 데코레이터가 있는 utils.py에서 같이 관리하면 좋겠다라는 리뷰를 받고.. 읭? 했었는데 생각해보니 생각보다 간단한 해결이라 코드를 옮겨 적어주고 기존에 있었던 함수의 self 사용 부분들을 손봐주고 테스트하니 잘 작동 되었다.

간단하지만 파이썬의 모듈 관리, 사용법에 대해 한층 알게되는 시간이였다.

> 다중 filtering, sorting, offset/limit 구현

1차에서도 신박하다며 활용한 query string을 2차에서는 많은 필터링에 활용했어야 했다.
조건문을 활용해 q객체를 필터링 해주었지만, 마이리얼트립 웹사이트처럼 이미 검색하면에서 많은 필터링이 적용되어있는 상태로 정보를 보내줘야하는 상황이였다.

구글링해보니 getlist로 필터링하는 대상의 많은 객체를 가져올 수 있다는 것을 확인하고, 사용해보니 같은 쿼리스트링을 가졌지만 다른 아이디를 가진 객체들을 모두 불러올 수 있었다.예를 들어 get을 사용했을 땐, 항공사 중 대한항공 밖에 쿼리스트링으로 선택을 못했는데, getlist를 사용하니 대한항공, 아시아나, 진에어 등 여러 항공사들을 불러올 수 있었다. 물론 전체리스트는 'airline=' 같이 아이디 넣는 부분을 비어두면 전체를 볼 수 있는 것을 확인했다.

정렬 부분은 아래에서 보이는 코드와 같이 간단히 딕셔너리 형식으로 값을 부여해주고 프론트와 소통해서 알려주기만 하면 되는 부분이라 간단히 구현할 수 있었다.

**offset/limit**은 프로젝트에서 사용한 부분은 아니지만 연습해보려고 작성해주었다.
오프셋과 리밋을 설명해놓은 블로그를 찾기가 힘든데, 간단히 설명해보면 offset을 0으로, limit을 15로 지정해 두었다고 가정하고 필터링해주는 부분에 **[offset:offset+limit]**이라고 정의해두면 첫 시작점은 0이되고, 첫 시작점은 0이기 때문에 첫 offset+limit은 15가 된다.
그리고 다음 페이지로 넘어가는 pagination으로 구현했다고 가정했을시 (프론트와 소통이 필요하다), 다음 오프셋은 15가되고, 리밋은 offset+limit이기때문에 15+15, 즉, 30이 되어서 계속 adding 되는 형식이다.
정확한 구현을 위해서 프론트와의 협업이 필요하지만 저런식으로 간단한 페이지네이션을 구현할 수 있다.

아! 그리고 search 부분은 검색 부분을 두 프로젝트 기간동안 사용해본적이 없어 혼자 사용해보려고 구현해본 부분이라 넘어가도 됩니다😌

> Git Rebase

이번 프로젝트에서는 rebase를 활용해서 무조건 커밋이 1개였어야 리뷰도 진행해주셨는데, 세션을 듣고나서 엄청난 컨플릭트가 발생할 수도 있다라는 말에 두려움에 벌벌 떨었지만... 우리팀은 단 한번도 리베이스로 고통받은 적이 없어 정말 다행이였다는 생각이 든다.

개인적으로는 rebase란 기능이 너무 좋아서 계속 활용했던 것 같다.
user, flight 이 두가지 브랜치를 관리하다보니 (merge는 안되었고..) 항상 브랜치를 이동할 때 마다 커밋해주는게 처음엔 너무 싫었는데 (rebase를 몰라 여러 커밋과 함께 push를 해야하니..) rebase란 개념을 익히고 나서부터는 버릴 커밋메시지와 함께 커밋하고 나중에 완성된 commit message만 써주면 되니 개인적으로는 너무 편리한 기능이였다!

🚥 프로젝트 후기

> 협업

같이 2주동안 에어비앤비에서 숙박하며 지냈었는데, 돌이켜보니 작은 불화라던지 다툼도 없었어서 다행이였다.
가까운 친구랑도 여행을 가게되면 싸우기 마련인데, 물론 여행도 아니고, 서로 더 조심을 했겠지만 무사히, 프로젝트에 온전히 집중해서 다들 서로를 배려하며 지냈던 것 같다.
점심과 저녁 메뉴를 고르는 일이 제일 어려웠던 것 만큼, 프로젝트 부분에서는 잘 소통하고 협업한 것 같아서 다행이였던 프로젝트였다!

> 좋았던 점

우선 신축 오피스텔이란 너무 깨끗하고 좋은 환경에서 2주 동안 숙박하며 온전히 개발에만 집중할 수 있다는 환경이 좋았다.

1차 때는 오피스로 출근하며, 매일 출퇴근하는게 힘들어 결국 마지막엔 호텔을 잡고 지냈었는데, 이번엔 비용면에서도 그렇고 출퇴근을 안해도 된다는게 체력적으로도, 공부면에서도 너무 만족스러웠다!

다시 한번 환경이 정말 중요하고, 앞으로 취업을 준비할 때에도 좋은 환경을 가진 회사가 중요할 수 밖에 없다는 것을 (+ 좋은 사람들) 깨닫는 시간이였다.

> 아쉬운 점

멘토님들이 에어비앤비에 방문했었을 때, 2차는 1차 때보다 기술적으로 완벽하게 하기 어렵다는 말을 들었는데, 프론트도 백엔드도 세션이 많았어서 새로운 기술을 적용하는게 쉽지 않았고, 또 백엔드는 유닛 테스트란.....그 높고도 먼 산을 통과해야 리뷰를 받을 수 있었어서 중간에 많이 정체됬던 것 같다.

개인적으로는 유닛 테스트라는 개념을 2주차쯤에 배워서 마무리하는 느낌으로 공부하며 작성했으면 좋을 것 같은데.. 뭔가 한참 달리고 있을 때 딱 막힌 느낌이라, 그런 부분이 아쉬웠다.

코로나 때문인지, 많은 세션 때문인지, 개인적으로는 2차 분위기가 조금 루즈했다고 생각이 들어 약간은 아쉬웠다!

> 팀원들에게 🥰

지금쯤 다들 기업협업으로 두들겨 맞고 있을 팀원들.. 다들 잘 지내나요? 😁
우선 부족한 저와 함께 해주셔서 너무 감사하고, 여러분과 같은 팀으로 한 공간에서 너무 즐겁게 지내다가서 기분 좋은 프로젝트였습니다~~!

잘 알지 못하는 백엔드라.. 전반적인 부분에서 리드해주지 못해 많이 아쉬웠는데, 그래도 잘 소통해주고 따라와주셔서 감사합니다!!

우리 기업협업 잘 마무리하고.. 동기에서 멋진 개발자로 만날 수 있도록 마지막까지 힘냅시다💪

profile
Back-end developer to DevOps

관심 있을 만한 포스트

2개의 댓글

comment-user-thumbnail
2021년 1월 30일

잘 보고 갑니다 제이콥!!!!!!!!!

1개의 답글