Kim-DaHam / Portfolly

Portfolly 프로젝트 리팩토링
1 stars 0 forks source link

Portfolly

portfolly_thumnail



⚙️ Stacks


🖼️ 프로젝트 배경

포트폴리오 플랫폼 ‘ArtStation’과 ‘크몽’은 각각 포트폴리오 전시 혹은 외주 중 1개에 집중된 서비스만을 제공합니다.

포트폴리오 전시 홈페이지 ‘ArtStation’는 작가와 연락하기 위해 별도의 소통 창구를 이용해야 하는 불편함이 존재합니다.

외주 홈페이지 ‘크몽’은 상업적인 포트폴리오만 게시되어 작품의 다양성이 부족합니다.

‘Portfolly’는 작품의 다양성 & 간편한 연락 시스템이라는 2가지 장점을 결합한 포트폴리오 전시·중개 홈페이지입니다.


📖 프로젝트 내용

‘Portfolly’는 전문가 & 클라이언트 두 가지 회원으로 구성됩니다.

전문가는 판매 목적에 상관없이 자유롭게 포트폴리오를 전시하고, 클라이언트는 마음에 드는 포트폴리오가 있을 경우 채팅 서비스를 통해 외주를 문의합니다.

의견이 상호 합의되면 ‘Portfolly’가 제공하는 중개 서비스를 통해 외주를 진행합니다.


💼 주요 업무 및 상세 역할

<포트폴리오 상세 보기/등록/수정 페이지 UI 및 기능 구현>

<styled-components를 활용한 재사용 컴포넌트 구현>

<메서드 추출 리팩토링으로 클린 코드 유지>

<현재까지 Firebase 배포를 목표로 리팩토링 진행 중>


😀 리팩토링 결과

→ react-query의 useInfiniteQuery 훅을 사용해 구현. 1페이지당 100개 데이터를 불러온 뒤, 10개씩 끊어서 로드.

→ react-query로 데이터를 캐싱해 5개 카테고리를 1번씩 불러온 뒤에는 추가 요청하지 않음.

→ react-query 낙관적 업데이트로 미리 화면을 바꾼 뒤, 요청 결과에 따라 다시 출력하는 사용자 중점 UI 구현.

→ react-error-boundary로 GlobalErrorBoundary와 ApiErrorBoundary를 분리

→ GlobalErrorBoundary는 네트워크 에러, 서비스 점검 등 페이지 전체를 막는 에러 관리.

→ ApiErrorBoundary는 비동기 데이터를 불러오는 컴포넌트 바깥을 감싼 뒤 불러오지 못한 특정 부분에만 에러 메세지 출력.

→ api 에러 발생 시 컴포넌트 단위로 에러 메시지 및 재요청 버튼 추가.

→ 페이지 전체를 불러오지 못 할 정도의 데이터 통신 에러의 경우 스켈레톤 UI로 페이지 형태는 보여주되, 경고 모달을 띄워 뒤로가게 만듦.

→ Firebase Realtime Database로 현재 채팅 시스템 추가 구현 중.

→ 전문가와 클라이언트는 마이페이지 '구매관리/판매관리' 탭에서 자신이 진행한 의뢰 별도 관리 가능.

→ 클라이언트 리뷰 작성 기능 추가 개발.

→ 홈페이지 내 존재하는 모든 POST 요청에 대해 유효성 검증 및 성공/실패 결과 Toast 알림.

Suspense, lazy를 활용해 Lazy Loading 구현


🎁 프로젝트 결과물


인트로 페이지


인트로 페이지


메인 페이지


메인 페이지


포트폴리오 상세보기 페이지

포트폴리오 상세보기 페이지


포트폴리오 등록 페이지

포트폴리오 등록 페이지


전문가 마이페이지

전문가 마이페이지


마이페이지 - 판매 관리 / 구매 관리 탭

판매관리 페이지


의뢰 폼 모달

의뢰 폼 모달


메세지 페이지

메세지 페이지

api 통신 에러가 발생할 경우 화면 모습

에러 화면


시연 영상

Video