[Project] Lacoste 클론 프로젝트

[Ted's Log] 테드로그·2021년 9월 14일
1

Project Driven Study

목록 보기
5/6
post-thumbnail

👋   Prologue

  그동안 공부하며 갈고 닦은 것을 바탕으로 첫 번째 팀 프로젝트를 진행했다. 이번 포스팅은 지난 2주간 진행했던 프로젝트에 대한 회고 포스팅이다. 웹 개발 프로젝트는 처음으로 하다 보니 많은 시행착오와 함께 의미 있는 시간이었다. 백엔드 개발자로서 나의 첫 프로젝트를 간략히 소개해보겠다.

Git Repository
Demo Video


🔍   Project Overview (Team LaFesta)

레퍼런스 사이트

커머셜 웹 사이트 클론이 이번 프로젝트의 테마였다. 여러 사이트 중에서 레이아웃 구성이 인상 깊었던 라코스테를 추천했던 프론트 팀원의 의견으로 라코스테를 선정하게 되었다.

작업 기간

2021.08.30 - 09.10 (14 Days)

구성원

F/E 3명, B/E 3명의 황금 비율로 구성된 팀원들과 함께했다.

주요 기능

하나의 커머셜 사이트가 작동하기 위한 필수 로직 API를 구현하는 것을 목표로 했다.

  • 로그인, 회원가입
  • 상품 목록 페이지 (Filter & Search & Pagination)
  • 상품 상세 페이지
  • 장바구니 CRUD

기술 스택

  • Git & Github
  • Python, Django
  • MySQL

🧩   ERD - AQuery Tool

  레퍼런스 사이트를 보면서 가장 먼저 진행했던 것이 데이터 모델링의 구조를 작성하는 것이었다. 프로젝트가 다 끝난 시점에서 되돌아보자면 ERD를 작성하는 것이 모든 작업의 기반이 되는 중요한 작업이었다. API들이 데이터 모델을 바탕으로 작성되기 때문에 나중에 새롭게 추가되거나 수정이 필요했던 부분들이 많았다.
 라페스타 백엔드 프로젝트는 User, Product, Order의 총 3가지 Application으로 구성이 되었으며, 다음과 같은 데이터 구조를 가졌다.


  ERD에서 가장 고민을 많이 했던 부분은 Order 앱의 데이터를 어떻게 구조화할 것인가에 대한 문제였다. 한 유저가 제품의 상세 페이지에서 장바구니에 상품을 담고 구매로 이어지는 과정을 데이터의 관계로 표현했어야 했다. 우리가 선택했던 방식은 Cart 테이블을 따로 두지 않고, OrderOrder_product 테이블과 각각의 상태 테이블을 통해서 현재 상품의 주문 상태에 따라 로직을 구현했다.


😎   Impressive Function

  아래의 코드는 상세 페이지에서 장바구니에 상품을 추가했을 때 호출되는 POST API이다. 이번 프로젝트를 진행하면서 그동안 자주 쓰지 않았던 Django ORM을 사용했는데 그 중 하나가 get_or_create이다. 리펙토링을 하기 전에는 모델 객체가 있는지 확인하는 과정을 거쳐 없다면 새로 생성하는 로직이어서 조건문과 QuerySet API가 반복적으로 나와서 가독성이 좋지 않은 함수 로직이었다. 그 후에 get_or_create 함수를 사용하는 방식을 코드 리뷰 과정에서 피드백을 받았고, 적용 시켰더니 직관적인 코드를 작성할 수 있었다.
   두 번째로 인상깊었던 코드는 Django에서 지원하는 transaction 모듈을 사용했던 코드이다. 라페스타 페이지의 사용자가 장바구니에 담긴 상품들을 주문하기 위해서는 카트 보기 버튼을 통해 장바구니 상세 페이지로 이동하게 된다. 장바구니 상세 페이지에서는 상품의 수량을 수정할 수 있고, 상품을 삭제할 수 있다. 상품을 삭제했을 때는 따로 구현되어 있는 Delete API를 호출하지만, 수량 변경에 대한 부분은 따로 백엔드 API 호출을 하지 않았다. 대신 주문 화면으로 넘어갈 때 변경된 수량에 대한 정보를 한 번에 백엔드 데이터 서버와 통신하는 로직을 구현했다. 함수 로직 흐름상 이전에 담긴 장바구니 상품 정보를 모두 지우고 새롭게 POST로 들어온 데이터에 따라 다시 상품을 장바구니에 담았는데, 이 때 사용자의 장바구니 정보가 의도치 않게 소실되는 것을 방지하기 위해서 transaction 모듈을 사용하게 되었다. 함수 로직이 마무리 되지 않았는데 통신 상의 오류로 알맞은 상품이 다시 장바구니에 생성되지 않았다면 rollback 시킬 수 있기 때문이다.


✂️   Things to Improve

  이번 프로젝트를 통해서 나 자신에 대해서 많은 것을 알 수 있었다. 내가 어떤 성향을 가지고 있는지, 누구와 함께할 때 편안함을 느끼는지에 대한 부분 등.
 내가 나 자신의 성향에 대해 생각한 메타 인지를 조금 나열해보겠다. 나는 성격이 급한 편이다. 또 어떠한 부분이 마음에 들지 않거나, 문제에 직면해서 해결해야 하는 상황이 있다면 꼭 그 부분을 해결하고 다음 단계로 나아가야 직성이 풀린다. 또한 회사에서 업무를 진행하거나 프로젝트와 같은 과제가 주어진다면 성격이 진지해져서 말투가 조금은 차갑거나 딱딱하다고 상대방이 느끼는 경우가 많았다. 이번 프로젝트에서도 나의 이러한 부분 때문에 조금은 팀원들에게 부담감을 주었을 것이라는 생각에 미안하고 아쉬운 생각이 든다.
 이제 1차 프로젝트를 마무리하고, 2차 프로젝트를 준비해야 한다. 1차에서 느꼈던 보완해야 할 부분을 잘 준비해서 결과와 과정 모두 만족스러운 프로젝트가 되었으면 한다.

profile
성장하는 개발자가 되기 위한 발자취 🧑🏻‍💻

0개의 댓글