커뮤니티형 체육시설 양도 시스템의 불편함을 해소하기 위한
구장 양도 플랫폼 Field-Passer
- 비회원일 경우 게시글 검색 및 조회, 게시글 작성자의 전체 게시글 보기를 할 수 있습니다.
- 회원의 경우 양도글 작성 및 댓글 작성, 양도글 찜하기, 고객센터 문의를 할 수 있습니다.
- 관리자의 경우 게시글 삭제 및 블라인드, 고객센터 문의 답변, 회원 관리를 할 수 있습니다.
메인페이지 헤더, 푸터, 사이드바 게시글 작성 및 수정 타임셀렉터 공용 모달 |
로그인 관련(토큰관리, 소셜 로그인) 회원 관련(가입, 메일인증, 정보수정 등) PrivateRoute 설정 |
회원 게시글, 댓글 조회 관리자 게시글 관리 및 고객센터 답변 |
검색 게시글 목록, 게시글 상세 댓글 |
- 로컬 환경에 프로젝트 복사본 생성
git clone
- 프로젝트 폴더로 이동
cd newFieldPasser-FE
- 프로젝트 종속성 설치
npm install
- 프로젝트 실행
npm run dev
.
└── src/
├── api/
├── components/
├── constants/
├── hooks/
├── pages/
├── routes/
├── storage/
├── store/
├── utils/
├── App.tsx
├── globalStyles.tsx
├── main.tsx
└── vite-env.d.ts
- GITHUB
- ISSUE, PR 컨벤션 활용
- SLACK
- 백엔드, UX/UI 디자이너와 소통
- github 봇을 활용하여 이슈 및 pr 확인
- FIGMA
- 디자인 확인 및 UX/UI 디자이너와 소통
- API 작성 방법
api 호출 시 공통적으로 사용되는 baseURL, 로그인 유무 등을 axios interceptor로 작성하였습니다. 로그인 정보가 필요한 api는 private, 로그인 정보가 필요 없는 api는 public으로 나누어 api를 주고받습니다.src > api
폴더엔 각 기능에 맞는 api들을 나누어 코드들을 작성하였고, api를 사용하는 페이지에서try-catch-finally
를 사용하여 에러 처리 및 기능 구현을 하였습니다. - custom hooks
useAxiosInterceptor
: axios interceptor를 활용하여 작성한 훅입니다. api 호출 에러 시 modal hook을 활용하기 위해 axios interceptor를 커스텀 훅스로 작성하게 되었습니다.useScreenHook
: 스크린 사이즈에 따른 반응형 웹을 구현하기 위해 작성한 훅입니다.useModal
,useSidebar
: 모달, 사이드바의 열고 닫힘을 구현하기 위해 작성한 훅입니다.useInfinityScroll
: 무한 스크롤 기능을 구현하기 위해 작성한 훅입니다.useInputHook
: input에 작성한 값의 유효성을 검사하기 위해 작성한 훅입니다.useLoginState
: 로그인 상태를 확인하기 위해 작성한 훅입니다.
- private route
로그인 상태 시 접근할 수 있는 페이지를privateRoute
컴포넌트로 감싸 주어 권한을 확인하였습니다.
맡은 기능을 오류 없이 구현하고 재사용 가능한 코드를 작성하는 것을 목표로 프로젝트를 시작했는데, 기능구현을 끝낸 후 살펴보니 전체적으로 중복코드, 반응형 구현을 위해 지나치게 길게 작성된 코드, 통일성 없는 코드가 많아 리팩토링을 진행하게 되었습니다. 먼저 공통적으로 사용되는 기능(모달, 무한스크롤 등)을 커스텀 훅으로 묶어 중복코드를 줄이고, 여러 기능을 하고 있는 함수를 분리하고, 컴포넌트 구조를 변경해 불필요하게 사용되고 있던 상태를 정리하여 코드 가독성을 높였습니다. 이런 과정을 통해 클린코드를 고민하고 작성할 수 있는 능력을 키울 수 있었습니다. 또한 이전까지의 프로젝트에서는 해보지 못했던 SEO 설정과 로딩속도 개선을 위한 이미지 최적화 등 새로운 시도를 해보며 개발 지식을 쌓을 수 있었습니다. 개발 기간이 계획한 기간보다 너무 길어져 아쉬웠지만 개인적으로 역량이 많이 발전했음을 느낀 프로젝트였습니다. |
|
✨ 프로젝트를 진행하면서 중요하게 생각한 것
✨ 프로젝트 후기
|
|
✨ 프로젝트를 진행하면서 중요하게 생각한 것
✨ 프로젝트 후기 프로젝트를 진행하면서 아쉬운 몇 가지를 꼽아 보자면 첫째, 둘째, 공통으로 사용할 수 있는 디자인 관련 컴포넌트를 정하자입니다. uxui 분들이 주신 디자인을 보면서 최대한 공통으로 사용할 수 있는 건 컴포넌트로 빼서 작성을 하긴 했지만 다른 팀원이 편하게 사용하기 위해 작성하는 것은 꽤나 견고한 설계가 필요하다는 것을 느낄 수 있었습니다. 이런 아쉬운 점들이 있지만 프로젝트를 진행하면서 더 성장할 수 있었던 것도 있습니다. 첫째, 반응형 웹 페이지 코드를 작성하는 게 조금은 익숙해졌다는 점입니다. 그 전 프로젝트를 진행할 때는 둘째, 오류에 대체하는 법입니다. 셋째, 팀 프로젝트라서 제가 놓친 부분들을 더 신경 쓸 수 있었다는 점입니다. 완성을 하는 것에 급급한 저와 달리 웹 최적화에 대한 부분이나, 다른 분들이 구현한 기능에 대해 설명을 들으면서 다른 분이 구현한 기능과 연계되는 기능을 개발할 땐 조금 더 이해를 한 상태에서 구현을 할 수 있었던 점이 좋았습니다. |
|
평소 생각하지 않았던 디테일들을 팀원들이 구현하는 방식을 통해 알게되었고, 기술적인 면에서 새로운 시도를 해볼 수 있어서 좋았습니다. type interface를 vite-env.d 파일에 모아 import없이 사용한다던지. globalStyles에 css 변수를 생성해 활용한다던지. svg icon을 함수 형태로 활용한다던지 하는 다양한 시도들을 해볼 수 있어서 좋았으며, custom hooks. redux 등 잘 모르고 사용하던 개념이나 도구들에 이해도를 좀 더 가져갈 수 있었던 것 같습니다. 리팩터링 기간을 통해 현재의 코드를 개인적으로 리뷰해 볼 수 있었으며, 그 활동을 통해 어떻게 하면 효율적으로 코드를 작성할지, 클린코드는 어떤건지에 관련한 고민을 해볼 수 있었습니다. |