반려소반 쇼핑몰을 클론하는 프로젝트 팀인 '캣코독'팀의 백엔드 팀원으로 위코드 1차 프로젝트를 끝낸 후기이다.
시연 영상
개발인원 및 기간
2022년 5월 23일 월요일 ~ 6월 3일 금요일
백엔드 팀원
강세영, 박준형
프론트엔드 팀원
안성주, 남하임, 정재성, 윤경연, 김철회
구현한 백엔드 기능과 각자 담당한 부분
- 전체 데이터 모델링 (공통)
- 회원가입 (박준형)
- 로그인, JWT 인증, JWT 인가 (박준형)
- 주어진 조건에 따라(카테고리, 검색, 정렬 등) 제품 목록 조회 (강세영)
- 제품 상세조회 (박준형)
- 장바구니 조회, 제품 추가, 제품 수량 변경, 삭제 기능 (강세영)
데이터베이스 ERD
프로젝트를 진행하며 아쉬웠던 부분
- 초기 기획단계에서 어떤 부분을 어디까지 어떻게 개발할지에 대해 명확하게 정하지 않아 프로젝트 기간 중반까지 혼란스러운 부분이 있었다.
- 초반에 트렐로를 제대로 활용하지 못했다.
- 데이터 모델링을 너무 웹페이지 UI 위주로 단순하게 생각하여 간과한 부분이 많았다.
- API 개발 속도가 너무 느렸다. 로그인과 회원가입 외에는 처음 만들어보는 API라 적응하고 공부하는데 시간이 오래걸렸다.
- API 명세서를 만들긴 했지만 나의 설명이 부족하여 다른 팀원들이 충분히 활용하지 못한 것 같다.
- 프론트엔드 팀원들과 충분한 소통이 이루어지지 않았다. 서로의 데이터 key값이 맞지 않아 마지막까지 고생했는데 나중에 알고보니 별 것 아닌 문제였지만 내가 충분히 도와주지 못했다. 다음 프로젝트 할때는 프론트 팀원이 mock data를 완성하는 시점부터 key를 맞춰 놓는게 좋을 것 같다.
- 프론트 팀원과 어느 부분까지 데이터를 출력해줄지에 대한 논의가 없어서 혼선이 있었다.
- 다른 팀원들이 막힌 부분이 있으면 같이 고민하고 도와줘야 했는데 이 부분을 잘 못한 것 같다.
프로젝트를 진행하며 잘 한 부분
- 반려소반 쇼핑몰에서 강아지와 고양이 카테고리는 겹치는 제품이 많아서 제품과 카테고리를 다대다 관계로 설정한 것
- 장고 models 파일을 코딩하면서 필드의 종류와 옵션을 충분히 고민하며 설정하였고, 모든 foreignkey나 manytomany 필드에서 related_name을 적절한 이름으로 넣어줬다. 덕분에 나중에 마이그레이션을 다시 할 필요가 없었다.
- 제품관련 테이블들간 관계가 다소 복잡하게 됐는데 그에 대한 참조나 색인(lookup)처리는 나름 잘 된것 같다. 참조를 위한 점(.)과 더블 언더스코어(__)를 잘 활용했다.
- ORM 최적화를 위한 select_related와 prefetch_related를 활용했다.
- 포스트맨 API 명세서를 만들었다. 캣코독 API 명세서 링크
- MySQL 워크벤치 프로그램을 잘 활용했다. csv 데이터 임포트와 데이터 덤프까지 활용했다.
- 내가 할 수 있는 범위 내에서 적절한 리팩토링을 했다.
- 프론트엔드와 토큰을 저장하고 헤더에 보내는 방법과 키값 맞추는 방법에 대해 조금 배웠다.
기억에 남는 코드
- 제품 목록을 조회할 때 리뷰많은순 또는 판매량순으로 정렬하기 위한 코드이다.
- annotate를 한개만 쓰면 문제없이 조회됐지만 두 개 이상 쓰면 조회가 제대로 되지 않고 잘못된 결과가 나왔다.
- distinct()와 distinct=True, annotate와 filter 순서 바꾸기 등을 다 해봤지만 소용없어서 구글링을 통해 stackoverflow 사이트에서 정보를 찾아서 적용한 코드인데 아직도 왜 되는지는 잘 모르겠어서 공부해봐야 겠다.
- 아마 따로 annotate 변수를 만들고 거기서 필요한 값만 뽑아내서 적용하는 코드이기 때문에 계산이 잘 된것 같다. 원래는 Subquery등을 활용하는 더 복잡한 코드였는데 테스트해보니 Subquery문이 필요없어서 줄였다.
카트에서 주문금액에 따라 배송비 정보를 출력하게 했는데, 대단한 건 아니지만 삼항연산자를 활용하여 코드를 줄였다.