백엔드와 처음 협업해보는
미니 프로젝트이지만 대작전임. 아무튼 대작전임🚀
금융 상품(대출) 쇼핑몰 만들기 !
✨과제 기간 : 2023. 02. 08 ~ 2023. 02. 26
✨기술 스택 : vite, axios, typescript, react, react-router, redux, tailwid, daisyui
이번 프로젝트는 백엔드 4명, 프론트엔드 4명이 협업하는 프로젝트였는데, 그 중 프론트엔드 역할 분담은 아래와 같이 나누었다. 여태까지 로그인, 회원가입 구현을 해본 적이 없어서 꼭 해보고 싶었는데 맡게 되어서 좋았다.
팀원1 :: 팀장
- 마이 페이지
팀원2
- 관심 상품 / 장바구니 페이지
팀원3
- 메인 페이지
나
- 로그인 / 회원가입
- 상품 상세 페이지
gather town : 비대면 회의는 개더타운에서 진행

notion : 백엔드와 함께 사용하는 노션 페이지에 일정, 회의록을 공유했다.
피그마, api명세서 등 백엔드에서 필요한 부분들도 언제든지 볼 수 있도록 공유해 놓았다.



구현할 기능을 나누고 각자가 피그마로 먼저 디자인 해보기로 했다. 늘 써보고 싶었던 마음만 가지고 실천은 못하고 있었는데, 실제로 사용해보니 생각보다 훨씬 재밌었다.
프로젝트를 처음 시작할 때 가장 어려운 것은 조 이름 정하기, 프로젝트 이름 정하기가 아닐까싶다. 앱 이름을 생각해봤는데 무려 내가 제안한 미왕론이 백엔드/프론트엔드 만장일치로 선택되는 쾌거를 이뤘다.. (아마 앱에서 사용하는 캐릭터 이름을 미왕이로 민 것이 큰 힘이 되었지 않나 싶다😁) 제법 무서운 대부업체 같지만 그런 점이 마음에 든달까..

여태까지는 강사님이 만들어주신 명세서만 사용했는데 이제는 백엔드에게 이렇게 해주세요! 하고 요청해야했다. 백엔드에서 준 자료를 바탕으로 우리가 어떤 값을 필요로 하는지 정리했다.
이번 과제에서 요구하는 필수 조건을 충족시키면서 만들어야 했다.
git hub 의 이슈 작성으로 현재 내가 어떤 작업을 하고 있는지 팀원들 간 소통이 가능했다.
PR을 올릴 때에는 양식에 맞추어 작성했고, pull request template, issue template도 미리 만들어두어 내용도 통일되게 작성하려고 했다.
마일스톤 기능은 처음 써봤는데, 어느 기능을 언제까지 해야한다는 것이 확실히 보여서 일정 관리에 도움이 되었다.
📦src
┣ 📂api
┃ ┣ 📂core
┃ ┃ ┗ 📜api.ts
┃ ┗ 📜axios.ts
┣ 📂app
┃ ┣ 📜hooks.ts
┃ ┗ 📜store.ts
┣ 📂assets
┃ ┣ 📂loading
┃ ┃ ┣ 📜loading-bg.jpg
┃ ┃ ┣ 📜loading-bg.png
┃ ┃ ┣ 📜loading1.svg
┃ ┃ ┣ 📜loading2.svg
┃ ┃ ┣ 📜loading3.svg
┃ ┃ ┗ 📜loading4.svg
┃ ┣ 📜008.png
┃ ┣ 📜index.css
┃ ┣ 📜meewang3.png
┃ ┣ 📜paging.css
┃ ┣ 📜react.svg
┃ ┗ 📜Vector.svg
┣ 📂components
┃ ┣ 📂CartNLikePage
┃ ┃ ┣ 📜CarList.tsx
┃ ┃ ┗ 📜CartItem.tsx
┃ ┣ 📂MainPage
┃ ┃ ┣ 📂ToggleMenu
┃ ┃ ┃ ┣ 📜Agency.tsx
┃ ┃ ┃ ┣ 📜Location.tsx
┃ ┃ ┃ ┣ 📜Target.tsx
┃ ┃ ┃ ┣ 📜ToggleBody.tsx
┃ ┃ ┃ ┣ 📜ToggleHeader.tsx
┃ ┃ ┃ ┗ 📜Using.tsx
┃ ┃ ┣ 📜GoodsList.tsx
┃ ┃ ┣ 📜ListBox.tsx
┃ ┃ ┗ 📜RecommendList.tsx
┃ ┣ 📂MyPage
┃ ┃ ┣ 📜LikeBox.tsx
┃ ┃ ┗ 📜LoanBox.tsx
┃ ┣ 📂ProductDetail
┃ ┃ ┣ 📜Etc.tsx
┃ ┃ ┣ 📜Loan.tsx
┃ ┃ ┗ 📜Target.tsx
┃ ┣ 📂UserInfoPage
┃ ┃ ┣ 📜UserDetail.tsx
┃ ┃ ┗ 📜UserInfo.tsx
┃ ┣ 📂UserLoan
┃ ┃ ┣ 📜AccountDetail.tsx
┃ ┃ ┗ 📜AccountHistory.tsx
┃ ┣ 📜Header.tsx
┃ ┣ 📜InfoSelect.tsx
┃ ┗ 📜MenuBar.tsx
┣ 📂features
┃ ┣ 📜authSlice.ts
┃ ┗ 📜cartSlice.ts
┣ 📂hooks
┃ ┣ 📜useAddCart.ts
┃ ┗ 📜useUserInfo.ts
┣ 📂pages
┃ ┣ 📂allProduct
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂CartNLikesPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂CategoryPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂LoadingPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂MainPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂MyPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂NotFound
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂ProductDetail
┃ ┃ ┣ 📜const.ts
┃ ┃ ┣ 📜index.tsx
┃ ┃ ┗ 📜interface.ts
┃ ┣ 📂SearchPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂SignInPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂SignUpPage
┃ ┃ ┗ 📜index.tsx
┃ ┣ 📂UserInfoPage
┃ ┃ ┣ 📜index.tsx
┃ ┃ ┗ 📜PasswordCheck.tsx
┃ ┗ 📂UserLoanPage
┃ ┃ ┗ 📜index.tsx
┣ 📂slider
┃ ┣ 📜slick.tsx
┃ ┗ 📜SlickItem.tsx
┣ 📂utils
┃ ┣ 📜cookieFn.ts
┃ ┣ 📜infoData.ts
┃ ┗ 📜toasstify.ts
┣ 📜App.tsx
┣ 📜index.css
┗ 📜main.tsx

인풋 창에 클릭하자마자 에러 메세지를 띄우는 것이 이질적이라고 생각해서 제출이 될 때에 유효성 검사를 하도록 했다.
이번에는 yup을 사용했는데 다음에는 타입스크립트와 궁합이 더 잘 맞는다는 zod를 사용해볼 예정이다.

동일한 아이디가 있을 때에는 토스트로 에러를 나타내주었다. 만들고 보니 유효성 검사의 메세지도 토스트로 띄워줄 걸 그랬나 하는 생각이 든다.

로그인 역시 유효성 검사를 진행한 후 제출 가능하도록 했다. 제출이 되면 백엔드에서 아이디와 비밀번호가 있는지 찾아주고 일치하지 않으면 토스트를 띄웠다.

로그인을 하면 바로 쿠키에 accessToken이 담긴다. 로그아웃과 동시에 비워준다.

상세정보에는 데이터를 담아서 내보내주는데, 애초에 데이터에 없는 값들이 있었다. (Null으로 표시) 처음에는 옵셔널 체이닝과 삼항 연산자로 프론트 쪽에서 처리를 했는데, 백엔드 분들께서 기본값을 -로 바꾸어 주셨다.
상품 요건 | 지원 대상 요건 | 기타 상품 정보
탭을 이동하면서 바뀌는 정보를 어떻게 보여주는지 고민이 됐다.
탭 마다 컴포넌트를 만들어주고 배열에 넣은 뒤, 인덱싱을 하는 방법을 사용했는데 코드가 많이 짧아지고 제법 읽기에 괜찮아서 마음에 들었다.
position = absolute 를 잘 사용하지 않아 애를 먹었지만 여차저차 내가 원하는 곳에 배치하게 됐다.
이번 협업을 하면서 내가 앞으로 어떤 것을 더 공부해야 하는지 많은 생각이 들었다.
아무래도 이번 프로젝트 기간 동안 가장 어려웠던 점이 아니었을까 생각된다. 코드를 쓰려고 하면 득달같이 표시되는 빨간줄 덕분에 왜 안되는지 한참을 고민했던 때가 많다. 타입스크립트 공부를 더 해야겠다고 다짐했다.
axios사용법을 너무 모른다는 생각이 들었다. axios interceptor 도 잘 사용하면 편리한 점이 많다고 하는데 능력부족으로 그러지 못했다. 공부할 것!
http https가 다르다는 것은 강의시간에 배운 적이 있었는데 백엔드 분들이 말씀해주시기 전까지 별다른 인지를 못하고 있었다.
짱이자나~~ 🥰