반려동물 용품 공동구매 플랫폼 '포잉마켓'🐾
Next.js - page router
=> 커머스는 초기 렌더링 데이터가 많다. 서버 사이드 렌더링(SSR)을 활용해 초기 로딩 속도를 개선했다.
=> 페이지 라우팅 방식이 현업에서 많이 이용되기 때문에 이에 익숙해지기 위해 사용했다. 편하기도 하다.
TypeScript
=> 타입을 명시하면서 에러를 예측하고, 방지할 수 있다.
SCSS + CSS Module
=> 변수, 상속 등을 사용할 수 있어 유지보수, 재사용에 편리하다.
@tanstack-react-query
=> 화면(클라이언트) 단위의 캐싱 처리와 서버 상태를 실시간에 가깝게 동기화 하기 위해 사용했다.
=> NEXT.js SSR에서 새로고침을 하지 않으면 동기화가 되지 않는다.
react-hook-form + yup
=> 비제어 라이브러리를 사용한 이유
- 입력 필드가 변경될 때만 렌더링되므로 성능을 최적화할 수 있다.
- 사용하기 편리하고, form을 관리하기 쉽다.
- 번들 크기가 작다. 빠른 렌더링을 할 수 있다.(React Hook Form 약 8.4KB / Formik 약 22.7KB / Redux Form 약 27.4KB)
=> yup을 함께 사용한 이유
- 각 조건의 에러 메시지를 설정할 수 있다.
- react-hook-form으로만 유효성 검사를 한 것보다 코드 가독성이 좋다.
인증&인가 / 카카오, 구글 OAuth
- accessToken을 쿠키에 저장해 인증했다.
마이 페이지 / 프로필 수정, 주문 내역
const firstButton = (purchaseId: number) => [
{
id: 1,
name: '주문 취소',
disabled: false,
onClick: () => handleCancelPurchase(purchaseId),
},
{ id: 2, name: '교환/환불', disabled: false, onClick: () => handleExchangeOrRefund(purchaseId) },
{ id: 3, name: '교환/환불', disabled: false, onClick: () => handleExchangeOrRefund(purchaseId) },
{ id: 4, name: '배송 조회', disabled: false, onClick: handleCheckDeliver },
];
const secondButton = (purchaseId: number) => [
{ id: 1, name: '배송 조회', disabled: true, onClick: handleCheckDeliver },
{ id: 2, name: '배송 조회', disabled: false, onClick: handleCheckDeliver },
{ id: 3, name: '배송 조회', disabled: false, onClick: handleCheckDeliver },
{ id: 4, name: '교환/환불', disabled: true, onClick: () => handleExchangeOrRefund(purchaseId) },
];
const thirdButton = (purchase: PurchaseData) => [
{
id: 1,
name: '리뷰 쓰기',
disabled: true,
onClick: handleWriteReview(purchase),
},
{ id: 2, name: '리뷰 쓰기', disabled: true, onClick: handleWriteReview(purchase) },
{
id: 3,
name: notReviewableId?.length > 0 && notReviewableId.includes(purchase.id) ? '리뷰 작성 완료' : '리뷰 쓰기',
disabled: notReviewableId?.length > 0 && notReviewableId.includes(purchase.id) ? true : false,
onClick: handleWriteReview(purchase),
},
{ id: 4, name: '리뷰 쓰기', disabled: true, onClick: handleWriteReview(purchase) },
];
BE, Designer와 처음 협업하면서 걱정과 기대가 많이 됐다. 그러나 이는 기우였다. 협업하는 팀원 모두 책임감 넘치고, 소통을 잘해서 원활하게 협업할 수 있었다.
새벽까지 함께 작업하고, 서로 돕는 과정이 정말 따뜻했다. 또, 컴포넌트 하나를 만들더라도 깊게 고민하는 팀원들의 모습에 좋은 개발자의 태도를 배웠다. 팀장님이 처음에 얘기했던 것처럼 3팀 팀원이 다 모여야 팀을 완성할 수 있듯 한 명 한 명이 소중함을 느꼈다. 좋은 동료들을 만난 것 같아 행복하다!
그리고 발표 때 반응이 좋았다. 실제 운영하는 서비스 같다는 평가를 들어서 뿌듯했다. 포트폴리오로 쓸 수 있게 잘 리팩토링 해야겠다.