두 번째 프로젝트 회고(feat. MyRealTrip)

박민하·2022년 7월 16일
0

회고록

목록 보기
2/2
post-thumbnail

🚀 프로젝트 소개

  • 마이리얼트립 클론 사이트
  • 국내 숙소 카테고리를 한정으로 검색, 조건별 필터링, 예약 기능 구현
  • 메인페이지, 검색페이지, 상품페이지, 예약페이지로 구성
  • Kakao Rest API를 사용한 로그인/회원가입
  • 데모영상

✔ 개발 기간

2022-07-04 ~ 2022-07-15 (12일)

✔ 팀 구성

  • BE(2명): 박민하, 정진관
  • FE(4명): 김인태, 장류광, 정현준, 조예지

✔ 협업 툴

✔ 역할

👩‍💻 박민하

  • ERD 모델링
  • 메인페이지(Product List) API
    • GET
    • 숙소리스트 조건별 필터링
  • 검색페이지(Product List) API
    • GET
    • 지역, 숙소이름, 기간, 인원별 검색에 대한 필터링
    • 숙소 종류, 금액 범위, 시설 다중 체크박스 필터링
    • 만실인 경우 자동 필터링

🧑🏻‍💻 정진관

  • ERD 모델링
  • 웹 서버 구축(AWS)
  • 회원가입/로그인(Signup/Signin)
    • Kakao Rest API
  • 상품페이지(Product) API
    • GET
    • 숙소에 대한 방 정보, 리뷰 조회 가능
  • 리뷰 기능(Review)
    • POST, GET
    • S3 기능을 사용한 이미지 업로드
  • 예약 기능(Reservation)
    • POST
    • 예약자 정보 변경 기능 포함

✔ Backend 기술 스택

LanguageFramworkDatabaseEnvironmentHTTPDeploy

🚀 프로젝트 구조

✔ 모델링


👏 후기 👏

  두 번째 프로젝트도 순식간에 끝났다. 새로운 팀원과 협업을 하니 1차때와 느낌이 아주 달랐다. 프로젝트 진행 방식, 협업 과정, 소통 방법의 차이가 주는 신선함이 기억에 남아, 이번 회고록은 전체적인 과정에 대한 감상이 주가 될 것 같다.

✍️ 기억에 남는 코드 및 협업 과정

1. 역할 분담

  • 1차 프로젝트 회고록에서 핵심 기능을 구현해보지 못해서 아쉽다고 한 바가 있다.
  • 같은 아쉬움을 안고 끝내고 싶지 않았기에, 프로젝트 시작부터 BE 동료에게 의견을 피력했다.

    🙇‍♀️ "웹 페이지 API를 혼자서 구현해보지 못한게 한입니다. 이번에는 꼭 해보고싶습니다!"
    🙆‍♂️ "알겠습니다. 그럼 역할을 이렇게 나눠보죠."

  • 메인페이지, 상세페이지 API를 맡으면서 해당 페이지를 맡은 FE와 개별적으로 컨택을 하면서 프로젝트가 진행됐다.
  • 처음부터 맡은 역할이 분명해지자 FE와는 언제 컨택을 하고, 무엇을 언제까지 할지에 대한 계획이 뚜렷해졌다.

2. 지금은 안돌아가더라도 마지막 날에는 꼭 돌아가야한다

  • 책임감과 부담감이 훨씬 강해졌다.
  • 1차 프로젝트 때는 내가 구현하지 못해도 BE동료가 해결해내면 됐지만, 이번에는 맡은 바가 확실하기 때문에 전적으로 내 책임이었다.
  • 하지만 바로 그게 내 아쉬움이었기에 오히려 좋았다!

    💁‍♀️ "FE님! 드디어 이 부분 구현해냈습니다!"
    🤷 "수고하셨어요~ 그런데 데이터가 중복으로 나오네요...?"
    🤦‍♀️ "..."
    .
    .
    .
    💁‍♀️ "FE님! 해결했습니다~ 테스트해보세요!"
    🤷 "수고하셨어요~ 어... 그런데 필터링이 이상하게 되네요...?"
    🤦‍♀️ "..."

  • 수정 마지막 날까지 이 패턴의 반복이었고, 어떻게든 해결 방법을 찾기 위해 이리저리 뛰어다니면서 자문을 구하고 구글링을 해봐도 적용이 안되는 방법 뿐이었다.
    • 특정 기간에 만실인 숙소도 반환되어 for문으로 만실 유무을 구했지만, 한 방만 만실이어도 숙소가 제외된다.
    • 심지어 숙소의 최소값을 구하는데도 만실 여부를 알아야 했다.
    • getlist() 메서드로 시설 체크박스에 체크된 데이터를 받을 수는 있었지만, or 조건으로 필터링이 됐다.
    • class 기준으로 다중조건을 반환할 수 있었지만, 필터링한 인스턴스에서 다중조건을 만족해야 했기 때문에 사용할 수 없는 방법이었다.
    • 어찌저찌 구현은 해도 필터링이 안되고 None값을 반환했다.
  • 그래서 해결을 못했느냐?

3. 문제의 코드

  • 결과적으로 구현은 했다.
  • 하지만 어떻게든 구현이라도 해보려고 코드 최적화를 포기했다.
  • 함수와 if문과 filter 메서드를 범벅하면서 이게 최선인가... 많이 고민했다.
  • 몇 시간동안 같은 문제에 머리 싸매다가 '코드가 더러운게 문젠가, 필수 구현 사항인데 이게 안되면 프로젝트 망한다' 는 생각이 들면서, 그 때부터 구글링을 버려두고 함수를 짰다.
  • 이 코드를 보면 어떻게든 해냈다는 뿌듯함과, 이렇게밖에 할 수 없었나 하는 창피함과, 메모리를 많이 잡아먹는 코드를 최적화하지 못한 아쉬움이 느껴진다.

🌟 프로젝트 기간 중 새롭게 배운 내용

  • Django
    • 모듈: pandas, datetime
    • 함수: Coalesce(), IntegerField()
    • ORM: getlist(), distinct(), items(), __contains, __in
  • MySQL
    • dump
    • INSERT, UPDATE, DELETE, LIKE, %
  • 협업 툴
    • postman: API 명세서 작성

🍻 프로젝트를 마치고

  그렇다!! 사실 위의 코드가 2주동안 한 것의 전부다!!

  왜 저것밖에 못했는가? 라고 묻는다면 대답해 드리는게 인지상정... 저것만 주구장창해도 시간이 모자랐다. 사실 프로젝트 기간 중에는 '저것밖에'라는 생각을 할 수가 없었다. 구현을 하든 해야 다른걸 해보지, 까딱했다가는 팀원들 앞에서 얼굴도 못 들 뻔했다.

  이번 프로젝트로 내 역량을 알게 됐다. 내가 느리다는걸 인정하고, 이에 대해 스트레스 받지 말자고 다짐했다.

  아쉬움이 아예 없다면 거짓말이지만 최선을 다했으니 만족하기로 했다. 여기서 아쉽다고 하는건 나 자신을 과대평가 하는 것이고, 이후에 내 역량에 맞지 않는 업무량을 받아버리는 대참사를 부른다는 것을 알게 됐다. 2주간 새롭게 배운 부분에 감사하고, 완벽하게 내 것으로 만드는 것으로 충분하다(누군가가 질문하면 완벽히 설명은 할 줄은 아니).

  구현하지 못한 부분은 언젠가 할 줄 알게 될 것이고, 그러니 조급해하지 않기로 했다. 뼈를 아주 아프게 맞은 프로젝트지만 앞으로 계속될 개발자 인생에 좋은 밑거름이 되어 기쁘다.

profile
backend developer 🐌

0개의 댓글