육류 판매 전문 인커머스 사이트인 정육각 페이지의 모든 기능을 직접 구현하는 프로젝트입니다.
정육각 페이지는 기본에 충실한 구성을 갖고 있어 그동안 배운 내용을 복습하기에 좋은 사이트라고 생각해 선택했습니다.
링크 첨부
Front End
HTML / CSS
JavaScrip
React.js
CRA
React Router
axios
Font Awesome
SASS
Back End
Node.js
Express.js
serve-statc
Bcrypt
My SQL
Communication
Slack
Notion
Zep
1) Header css - 메뉴 아이콘 눌렀을 때 햄버거 메뉴가 나타나도록 구현했습니다. 호버효과를 사용해 마우스가 아이콘 위로 올라갔을 때 색상이 변하도록 구현했습니다.
2) Header 조건부 렌더링
로그인
과 회원가입
이 보이고 로그인 후에는 그 자리에 마이페이지
와 로그아웃
이 보일 수 있도록 구현했습니다.로그아웃
을 누르면 다시 로그인
과 회원가입
이 나타나도록 구현했습니다.3) Header 로그아웃 - 로그아웃
을 누르면 로그인할 때 local storage
에 저장했던 인증 토큰을 다시 삭제시켜 로그아웃 상태가 될 수 있도록 구현했습니다.
1) 동적 엔드포인트: 사용자의 아이디를 엔드포인트에 넣어 사용자의 장바구니데이터만 받아올 수 있도록 했습니다.
2) 수량 및 가격 변경 기능: +버튼을 누르면 수량이 증가, - 버튼을 누르면 수량이 감소하도록 했고 수량 변화에 따라 가격들(품목별 및 최종가격)도 같이 변동하도록 구현했습니다.
3) 장바구니 삭제: 삭제 버튼을 누르면 해당 상품을 장바구니 목록에서 사라지도록 구현했습니다.
4) 서버 통신: 위의 모든 과정을 서버 통신을 통해 프론트엔드에서 뿐만 아니라 DB에서 변화가 일어날 수 있도록 구현했습니다.
5) 에러 처리: 백엔드에서 던져주는 에러 및 알림들 (결제가 완료되었습니다. 포인트가 부족합니다 등등)을 팝업 으로 나타날 수 있도록 구현했습니다.
1) 동적 엔드포인트: 사용자의 아이디를 엔드포인트에 넣어 사용자의 장바구니데이터만 받아올 수 있도록 했습니다.
2) 수량 및 가격 변경 기능: +버튼을 누르면 수량이 증가, - 버튼을 누르면 수량이 감소하도록 했고 수량 변화에 따라 가격들(품목별 및 최종가격)도 같이 변동하도록 구현했습니다.
3) 장바구니 삭제: 삭제 버튼을 누르면 해당 상품을 장바구니 목록에서 사라지도록 구현했습니다.
4) 서버 통신: 위의 모든 과정을 서버 통신을 통해 프론트엔드에서 뿐만 아니라 DB에서 변화가 일어날 수 있도록 구현했습니다.
5) 에러 처리: 백엔드에서 던져주는 에러 및 알림들 (결제가 완료되었습니다. 포인트가 부족합니다 등등)을 팝업 으로 나타날 수 있도록 구현했습니다.
저를 가장 힘들게 했던 장바구니 수량 및 가격 변경 코드입니다.
+,- 버튼을 눌렀을 때 해당 품목의 수량과 가격을 변동시키는 것이 어려웠는데
e.target과 map 함수의 인덱스 인자를 활용해 버튼에 배열의 인덱스를 부여하여 문제를 해결할 수 있었습니다.
두번째 난관은 서버에 요청을 보낼 때 엔드포인트가 동적으로 변해야한다는 점이었습니다.
엔드포인트에 userId를 넣어야하는데 로그인하는 회원에 따라 id가 변경되기 때문에 로그인할 때 토큰과 userId를 local storage에 저장하고 이를 엔드포인트에 넣는 방법으로 해결했습니다.
그리고 통신에서 정말 많은 에러들을 맞닥뜨렸는데 처음에는 무슨 에러인지 조차 파악하기 어려워서 힘들었습니다. 그래서 고안한 방법이 에러 메세지를 보다 세세하게 처리해서 console에 찍어보는 것이었습니다. 이를 통해 문제를 보다 빠르게 파악할 수 있었습니다.
부족한 시간과 체력 때문에 서로 예민해질 수 도 있었는데 힘들 수 록 웃음이 많아지는(?) 팀원들 덕분에 끝까지 열정적으로 프로젝트에 임할 수 있었습니다. 모든게 처음이라 부족한 점이 많았지만 그만큼 애착이 가는 프로젝트인것 같습니다.
협업의 중요성에 대해 느낄 수 있었고 Git 공부가 필요하다는 생각이 들었습니다. 현업에서는 어떤 방식으로 협업을 진행하는지 궁금해졌습니다.
이번 프로젝트는 기능 구현에 중점을 두었지만 다음 프로젝트에서는 컨벤션과 코드 재사용성을 높여 보다 효율적이고 가독성 좋게 작업을 진행해보고 싶습니다.