[Project] motemote clone project

백선호·2021년 8월 15일
0

4주간의 foundation 기간이 끝나고 팀을 이뤄서 서로가 소통하고 공유하는 개발자로서 인생 첫 프로젝트가 성공적으로 마무리하였다. 아쉬움은 있었지만 밤늦게까지 고생해 주신 팀원들과 함께여서 시간 가는 줄 모르고 프로젝트를 진행했다. 이번에는 무엇을 배웠나가 아니라 개발자로서 나의 첫 프로젝트를 회고하면서 구체적으로 기록해보겠다.

MoteMote Clone Project

1차 Sprint

팀 배정을 받고 사이트에 회원가입을 해서 어떤 기능이 있는지 알아보았다. 디테일하게 기능을 나뉘었지만 멘토님께서 커머스 사이트의 필수 기능들을 구현한 다음에 추가 기능 구현에 시도해 보라는 조언을 얻어 계획을 세웠다.

필수 구현 사항

  • 로그인/회원가입
  • 메인/메뉴 페이지
  • 상품 상세 페이지
  • 장바구니
  • 상품 구매
  • 상품 결제

Modeling

필수 구현 사항을 토대로 전체적인 계획을 세우고 모델링을 시작하였다. 기존에 저는 모델을 다루면서 데이터베이트가 conflict 되는 경우가 잦았고 프로젝트를 시작하면 모델링은 정말 탄탄하게 짜야겠다고 생갔했다. 백앤드 파트너인 종성님과 몇번의 수정을 거쳐서 만들었지만 프로젝트 사실 프로젝트 중간에도 column이 늘어나기고 했고 테이블 다른 앱으로 옮기기도 하였다. 모델을 토대로 프로젝트 내에 앱을 users, products, orders 3개로 분류하였다.

FindMember & NewPassword View

Bcrypt 암호화와 해서 회원가입을 해주었고 JWT를 이용해 인증/인가를 해주었다. 그 후 사용자의 아이디와 비밀번호를 찾는 기능을 추가해 보았다. 가입된 이메일과 이름을 통해서 아이디를 찾고 가입된 아이디와 이메일과 이름을 통해서 비밀번호를 찾는데 문자와 숫자가 시간에 따라 변하는 python의 기본 모듈 UUID를 사용하여 비밀번호를 초기화해서 사용자에게 보여주었다.

메뉴 페이지와 메인 페이지를 하나의 class를 이용했다. 처음에는 각 class를 나누었지만 멘토님께서 하나의 class를 붙여 보라는 조언을 토대로 삼 항 연산과 QueryParameter를 이용하여 완성하였다. 꾀 많은 부분을 찾아보고 생각해 보았던 부분이었다.

Purchase View


상품의 구매를 함과 동시에 구매할 때 보유했던 포인트가 감소해야 하고 상품의 재고량이 주문량만큼 감소해야 하고 판매량도 증가되어야 하며, 사용자의 장바구니에 담기 물건 모두가 사라지고 주문의 상태와 주문된 아이템의 상태가 변화해야 한다. 이때 잘못된 입력으로 상위 프로세스는 저장되었지만 하위 프로세스는 저장이 되지 않아 오류를 반환하여 고민하고 멘토님의 조언으로 transaction을 사용하여 해결하였다.

2차 Sprint

- 필수 구현 사항

  • 로그인/회원가입
  • 메인/메뉴 페이지
  • 상품 상세 페이지
  • 장바구니
  • 상품 구매
  • 상품 결제
    - 추가 기능 구현
  • 상품리뷰

1차 스프린터에서 속도를 내서 기능을 빨리 구현하였지만 여전히 할 일이 많았다. 2차 스프린터를 시작하면서 백 앤드 파트너 종성님과 좀 더 탄탄한 코드를 만들자고 하였다.

Cart C.R.U.D


상품 상세 페이지에서 Add Cart 버튼을 통해서만 사용자 장바구니에 상품이 담긴다. 이미 장바구니에 상품이 존재할 경우 변경할 수량으로 변경하고 장바구니 페이지에서 상품의 id를 받아 해당 상품만 삭제가 가능하다. 실제 motemote 사이트는 장바구니에 담을 때 이미 상품이 존재할 경우 "장바구니에 이미 존재합니다. 수량을 추가하겠습니까?"라는 모달이 나와서 알려준다. 당연히 clone 프로젝트이기 때문에 로직을 동일하게 프로트 엔드 모달이 나와서 경고 창을 알려줄 것이라고 생각했다. 그런데 소통 없이 기능만 구현한 백엔드와 프로트 엔드와 통신이 될 리가 없었다. 이때 이래서 소통이 필요한 부분이구나 생각하게 되었다.

Review

사실 review.views는 다른 class로 분리하여 메서드를 만들었다. 그런데 생각해 보니 review를 볼 수 있는 부분은 상품의 상세 페이지에서만 볼 수 있다. 따라서 여기서도 상세페이지 class에 review를 같이 보여줄 수 있게 합쳤다. 또 아마 이 부분이 가장 골머리 아팠던 부분인 것 같다. 평소 json 형식의 request만 다뤄봤지 다른 파일을 다뤄보지 않았다. 그런데 프런트 엔드에서 요청을 보낼 때마다 데이터를 받을 수도 읽을 수도 없었다. 멘토님께서 데이터를 form 데이터로 받아야 하는데 json 형식으로 받는다는 조언을 받고 이것저것 찾아보아서 결국 django의 static을 이용해서 데이터를 받아 파일을 저장하고 데이터 베이스에 경로를 저장해 프런트엔드가 get 메 서드를 요청했을 때 사진을 읽어올 수 있게 구현하였다. 아마 이때가 잠자면서 코드 생각할 때인 것 같다.

첫 프로젝트를 마치며


8월의 시작과 함께 프로젝트를 시작했고 어느덧 입추를 지나 선릉에서의 선선한 선릉의 밤공기를 마시며 귀가하기 시작했다. 걱정이 앞섰던 프로젝트였지만 팀원을 잘 만나서 성공적으로 마무리하였다. 매일 아침 10시 코드 카타를 하면서 하루를 시작하였고 11시에 스탠드 업 미팅을 통해 각자의 역할을 서로 공유해 가면서 하루의 계획을 세웠고 팀원 모두 적극적으로 참여해 주었다. 특히 백 앤드 파트너 종성님과는 새로운 인연이 되었을 만큼 도움이 많이 되었다. 서로 고민하고 공유하면서 코드를 작성하고 알고리즘을 생각했다. 제가 불같이 프로젝트를 이끌어 갔다면 종성님은 그 불에 물을 부어서 보안해 주셨다. 오류를 마주했을 때 차근차근 체크해 주면서 저를 안심시켜 주셨다. 반면 프런트와 미리미리 소통을 하지 못해 프로젝트 마지막 날에 구현했던 코드를 사용하지 못할까 봐 조금 조마조마했었던 부분이 아쉽다. git의 사용면에서도 아쉬움이 남는다. wecode에서는 hig hub의 repository를 멘토님의 코드 리뷰 후 merge를 시켜주시는데 merge 전에 다른 기능을 먼저 구현해 코드가 conflict 되는 경우가 많았다. 2차 프로젝트에는 연습용 프로젝트, 데이터베이스, git hub repository를 만들어서 충돌 없이 진행해 봐야겠다. 2주간 하루가 어떻게 지나갔는지 모를 정도로 몰두했었던 것 같다. 이 자리를 빌려 저희 팀원들에게 감사의 인사를 드리고 우리 23기 동기들에게도 고생했다는 말을 해드리고 싶습니다. 어렸을 적 운동을 했었던 저는 존경하는 선수가 한 분 계셨다. 그 선수는 대회 막바지 선수들에게 이런 말을 했습니다. "지치시죠? 여러분 모두 지치지 말고 미치시기 바랍니다." 저도 여러분께 "지치지 말고 미치시기 바랍니다"라고 감히 말씀드립니다!

profile
baik9261@gmail.com

0개의 댓글