프론트엔드 개발 포트폴리오 | 비대면 재능 매칭 플랫폼
내일배움캠프 4기 웹 개발 과정 React 트랙 수료생 최종 프로젝트 ‘이음’을 소개합니다.
Aug 16, 2023
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fea72e9e5-8313-4a5e-8e6b-86d6cba93ea3%252FFrame_36_(1).png%3Ftable%3Dblock%26id%3D16cbf872-75c9-44ab-ad08-a40182a3b51c%26cache%3Dv2&w=3840&q=75)
아키텍쳐
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F03cea366-939d-48f6-a55c-b64080af9110%252Fimage.png%3Ftable%3Dblock%26id%3De4c5f814-6299-45f8-be1e-dde62c6f5d2c%26cache%3Dv2&w=3840&q=75)
기술적 의사결정
선택한 기술 | 이 기술을 선택한 이유 |
React | 1. Virtual DOM, CSR 방식으로 페이지 내에 변경된 부분만을 감지해서 필요한 부분만 렌더링 할 수 있습니다.
2. 커뮤니티가 많습니다. |
TypeScript | 1. Type을 미리 지정하여 Type에 맞지않는 부분들을 RunTime 이전에 에러로서 확인할 수 있어 RunTime 이 후에 일어날 수 있는 버그,에러들을 사전에 방지 할 수 있습니다.
2. 작성한 코드가 나중에 보았을 때 어떤 Type의 코드인지 명확히 알 수 있습니다. (가독성) |
Recoil | 1. 컴포넌트의 상태를 자동으로 추적하여 Context API와 다르게 필요한 상태만 렌더링하고 성능을 최적화 할 수 있습니다.
2. 저희 프로젝트는 많이 복잡한 편이 아니기에 BoilerPlate가 적은 Recoil을 선택하였습니다.
3. React를 개발한 Facebook에서 개발하여 React와 상성이 좋으며 Facebook의 대규모 애플리케이션에서 테스트하고 사용되었기 때문에 안정성,성능면 에서 뛰어나다 평가되고 있어 선택하였습니다. |
React-Query v4 | 1. 데이터를 캐싱하고 최신 데이터를 가져와서 자동으로 UI가 업데이트 되도록 할 수 있어 불필요한 API호출을 줄이고 성능을 향상시킬 수 있습니다.
2. 코드가 짧아 가독성이 좋습니다.
3. 다양한 옵션으로 편리합니다. |
Firebase | 1. 회원정보를 AuthService를 통해 보안성을 향상시키기 위해 선택하였습니다.
2. 간편한 소셜 로그인을 지원하기 위해 사용하였습니다. |
성능 개선
저희는 최적화된 사이트를 만들기 위해 지속적인 성능 개선을 실시 하였습니다.
최초 성능 검증 (23.02.23)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fa8b05b12-c97b-4552-96a2-9ab79d1e1942%252FUntitled.png%3Ftable%3Dblock%26id%3Dc9919ea3-44ff-4b35-ac82-cb013298ad5b%26cache%3Dv2&w=3840&q=75)
1차 성능 개선 (23.02.23)
- 불필요한 자바스크립트 제거 및 불분명한 코드 type수정
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F6e7ab12d-9033-4594-81ff-1c8928617e00%252FUntitled.png%3Ftable%3Dblock%26id%3D84d12917-f36d-46e8-b5de-49b6af1ec555%26cache%3Dv2&w=3840&q=75)
2차 성능 개선 (23.02.25)
- 반복되는 component 축소, styled 동일 요소 제거
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F4e546c0e-ceba-4c1c-a1b1-a4cdcc0c669d%252FUntitled.png%3Ftable%3Dblock%26id%3Dd077f3aa-f614-4799-8f39-fb32a68054fa%26cache%3Dv2&w=3840&q=75)
3차 성능 개선 (23.03.05)
- API분리하여 따로 관리 진행을 하였으며, JSX에 코드 중에서 중복되거나 합칠 수 있는 코드들은 모두 한번에 불러서 진행할 수 있도록 하였습니다.
- 불필요한 이미지 파일 또는 사이즈 조절이 되지 않는 ITEM들 모두 수정하였습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F8fa1db3a-b99f-4e87-bb05-9601911292a3%252FUntitled.png%3Ftable%3Dblock%26id%3Dd2eca54e-3629-4877-8ac0-a7357b7710d8%26cache%3Dv2&w=3840&q=75)
4차 성능 개선 (23.03.07)
- Loader적용하여 사용자 입장에서 대기하는 시간을 알려주는 방향을 잡았으며, 팀원들 전체 라이브 코딩을 진행하며, 팀 의사소통으로 찾지 못하거나 발견하지 못했던 부분을 찾아 자바스크립트를 축소화하고 나머지 접근성 부분을 관련 코드를 추가했습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fe5273234-0c5e-42c0-b987-977969024119%252F%2525E1%252584%252589%2525E1%252585%2525B3%2525E1%252584%25258F%2525E1%252585%2525B3%2525E1%252584%252585%2525E1%252585%2525B5%2525E1%252586%2525AB%2525E1%252584%252589%2525E1%252585%2525A3%2525E1%252586%2525BA_2023-03-07_%2525E1%252584%25258B%2525E1%252585%2525A9%2525E1%252584%252592%2525E1%252585%2525AE_2.58.27.png%3Ftable%3Dblock%26id%3De7ab1550-c9cb-4fde-9fd9-51ba79c26a8f%26cache%3Dv2&w=3840&q=75)
트러블 슈팅
회원가입 → 로딩 → 홈화면 까지 이동시간이 너무 긴 문제
문제점
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fd8f1978a-fbc7-4e6d-8c54-0a515a870c3b%252F%2525E1%252584%252589%2525E1%252585%2525B3%2525E1%252584%25258F%2525E1%252585%2525B3%2525E1%252584%252585%2525E1%252585%2525B5%2525E1%252586%2525AB%2525E1%252584%252589%2525E1%252585%2525A3%2525E1%252586%2525BA_2023-03-07_%2525E1%252584%25258B%2525E1%252585%2525A9%2525E1%252584%252592%2525E1%252585%2525AE_3.22.16.png%3Ftable%3Dblock%26id%3Dc4b47ba7-6e83-4f88-bb42-df15b22df37b%26cache%3Dv2&w=3840&q=75)
회원가입 → 로딩 → 홈화면 까지 이동시간이 2.4초가량으로 너무 길어 사용자가 불편할 수 있을거라 느끼고 개선을 시도하였습니다.
post요청 → onsuccess → alert 실행 → 홈화면 이동
- 수정 전 2.36초
해결방법
post요청 → alert 실행 + onsuccess → 홈화면 이동 으로 로직을 변경하여 0.5초가량 단축하였습니다.
- 수정 후 약 1.95초
로그인 이 후 새로고침 시 로그인 상태가 풀리는 문제
문제점
로그인 이 후 firebase의 auth 상태가 업데이트 되었으나, 새로고침 이 후에는 로그인 상태가 풀려 정상적인 서비스 이용이 되지 않았습니다.
해결방법
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F7bd658f9-d1c7-44b5-89a9-14f156d9a31f%252F%2525EC%252584%2525B8%2525EC%252585%252598%2525EC%25258A%2525A4%2525ED%252586%2525A0%2525EB%2525A6%2525AC%2525EC%2525A7%252580%2525EC%2525B6%252594%2525EA%2525B0%252580.png%3Ftable%3Dblock%26id%3D24166b0b-2bd7-4ee4-a862-b533666541a6%26cache%3Dv2&w=3840&q=75)
민감한 개인정보라 LocalStorage보다는 SessionStorage가 적합하다고 판단하여 로그인 시 Firebase의 로그인 상태를 업데이트 한 후, user정보를 SessionStorage에 저장하였습니다.
이 후 다른 컴포넌트에서 SessionStorage를 get해와서 로그인 상태를 판별하는 부분으로 해결하였습니다.
실시간 포인트 반영이 되지 않는 문제
문제점
초기 렌더링 시 포인트를 불러오지 못하는 현상이 발생하였습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F894b24b0-7ff8-405c-80f4-586c6f167180%252F%2525ED%252599%252594%2525EB%2525A9%2525B4_%2525EC%2525BA%2525A1%2525EC%2525B2%252598_2023-03-07_130305.jpg%3Ftable%3Dblock%26id%3D0fb421e0-952a-47a0-8f07-5af579997d4e%26cache%3Dv2&w=3840&q=75)
해결방법
React Query의 refetch option을 사용하여 마운트 시에 refetch될 수 있도록 하였습니다.ㄹ
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F274d2056-520d-4f13-85fe-d01ca5c250d1%252F%2525ED%252599%252594%2525EB%2525A9%2525B4_%2525EC%2525BA%2525A1%2525EC%2525B2%252598_2023-03-07_130321.jpg%3Ftable%3Dblock%26id%3D7f7c1a16-de84-4791-9407-74501f61da49%26cache%3Dv2&w=3840&q=75)
데이터 용량을 보다 적게 사용하는 방법을 고민
해결방법
- 인피니티 쿼리와 쿼리문을 구성하여 필요한 데이터만 가지고 와 불필요한 데이터 소모량을 줄였습니다.
- 글의 좋아요 유저 목록에 내 uid가 있는 글만 가져오는 쿼리문
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fe23b89c0-b67a-4c6c-8efc-f2e3a46549ba%252F%2525E3%252585%252587%2525E3%252585%252587.png%3Ftable%3Dblock%26id%3De82853c7-5203-4171-a05b-b3b1c36c08cf%26cache%3Dv2&w=3840&q=75)
-인피니티 쿼리
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Facfacddc-1e85-4470-b259-76f8a47873b3%252F%2525EC%25259D%2525B8%2525ED%252594%2525BC%2525EB%25258B%252588%2525ED%25258B%2525B0%2525EC%2525BF%2525BC%2525EB%2525A6%2525AC.png%3Ftable%3Dblock%26id%3D6bddaa1c-9e5a-442a-ae81-ba06749ef393%26cache%3Dv2&w=3840&q=75)
주요 기능
결제 및 결제취소 시스템
마이페이지의 여러가지 편의기능
판매중, 거래완료 목록
구매중인 목록
회원정보 변경
포인트 관리
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252Fb3d2aba9-a16f-4b7d-8108-d493ede02b87%252F%2525E1%252584%252592%2525E1%252585%2525AA%2525E1%252584%252586%2525E1%252585%2525A7%2525E1%252586%2525AB_%2525E1%252584%252580%2525E1%252585%2525B5%2525E1%252584%252585%2525E1%252585%2525A9%2525E1%252586%2525A8_2023-03-08_%2525E1%252584%25258B%2525E1%252585%2525A9%2525E1%252584%25258C%2525E1%252585%2525A5%2525E1%252586%2525AB_9_27_07_AdobeExpress_(1).gif%3Ftable%3Dblock%26id%3Db0587aae-c10d-498d-bfa7-1189b3901d06%26cache%3Dv2&w=750&q=75)
무한 스크롤
post, comment에 데이터를 정해진 개수대로 불러오는 무한스크롤을 구현하였습니다.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fs3-us-west-2.amazonaws.com%252Fsecure.notion-static.com%252F31a635fc-bb5c-4210-a520-854c693b0d23%252F%2525E1%252584%252592%2525E1%252585%2525AA%2525E1%252584%252586%2525E1%252585%2525A7%2525E1%252586%2525AB_%2525E1%252584%252580%2525E1%252585%2525B5%2525E1%252584%252585%2525E1%252585%2525A9%2525E1%252586%2525A8_2023-03-08_%2525E1%252584%25258B%2525E1%252585%2525A9%2525E1%252584%25258C%2525E1%252585%2525A5%2525E1%252586%2525AB_9_34_36_AdobeExpress.gif%3Ftable%3Dblock%26id%3Ddf479718-d5d2-482a-985c-aa8679490d8d%26cache%3Dv2&w=1920&q=75)
Share article
Subscribe to our newsletter