지난번에는 백엔드 파트를 맡았었기 때문에 팀 프로젝트에서 프론트엔드 개발을 담당한 것은 이번이 처음이었다. (1차 프로젝트 회고) 더군다나 처음 학습해본 React, Typescript를 실전에 적용하기로 결정한만큼 걱정도 됐다. 하지만 1차 프로젝트가 끝난지 얼마 지나지 않아 다시 새로운 사람들과 새로운 무언가를 만들 생각에 설레었다.
프로젝트 주제는 오래 고민하지 않았다. 각자 의견을 내고 다수결로 빠르게 결정했다. 하지만 그 이후의 기획과 UI 설계는 꼼꼼하게 진행하며 5일 정도의 시간을 투자했다. (FIGMA 링크) 팀원들이 함께 디스코드 음성통화를 하며 실시간으로 피드백을 주고받으며 피그마에서 공동으로 작업했기 때문에 와이어프레임 완성이 수월했다.
코로나로 인해 해외보다 국내 여행객의 급증한 것을 고려해 국내를 타켓으로 7개 시/도를 기준으로 지역별 동행자를 매칭하기로 했다.
혼행객이 증가하면서 믿을 수 있는 동행자를 찾는 사람들이 늘어난 사회 분위기를 반영해 ‘신뢰’를 핵심가치로 한 국내 여행 동행 구인 사이트를 만들기로 결정했다.
기존 서비스와의 차별점
a) 여행 후 상대의 여행 점수를 평가하여 동행자 점수를 채점, 동행자 구인 시 신뢰도 향상
b) 서로 동행 신청 동의 시, 글 작성 시 작성한 연락 수단을 공개하여 추가적인 정보 교환
모두가 공평한 분량의 페이지를 담당하도록 사다리타기를 통해 각자의 부분을 정했다. 만약 원하던 부분이 있었으면 먼저 내 의사를 피력했을텐데, 이번에 프론트엔드를 처음 맡은 만큼 어떤 부분이어도 전혀 상관없었다. JWT를 활용한 회원인증을 구현해보고도 싶었고 웹 사이트의 핵심인 메인페이지를 맡았어도 좋았을것이고 아니면 우리 서비스의 차별 기능인 동행 신청을 다루는 마이페이지도 도전해보고 싶었다.
다양한 선택지들 가운데 자유 게시판 /동행 게시판 CRUD 일부를 구현 하게 됐다.
동행게시판 게시글을 작성 페이지에서 10개 가량의 input value를 받아야 했다.
input 타입 또한 radio button, check box, file, date, text, number 등 다양했다.
그래서 처음에는 이 모든 관심사들을 하나의 input 컴포넌트 안에서 분기를 처리했기 때문에 위와 같은 거대한 컴포넌트가 탄생했다.
이후에 확장성을 고려했을 때 다른 개발자들이 내가 만든 input 컴포넌트를 재활용할 경우를 생각해보면 위의 코드는 가독성이 떨어질 뿐더러 유지보수하기에도 어려워 보였다.
위의 코드처럼 실제 Input 컴포넌트를 페이지에 적용할 때도 한 눈에 어떤 type의 input 요소인지 눈에 잘 들어오지 않았다. 그래서 최대한 컴포넌트 하나의 역할을 줄이도록 관심사를 분리해서 리팩토링을 진행했다.
처음에는 동행게시판 글쓰기 페이지에서 form을 다룰 때 각 input value를 모두 state로 관리했다. 하지만 생각해보니
이 두가지를 이유로 useRef를 활용해 비제어 컴포넌트로 폼을 다뤘다.
우선 스스로 칭찬하는 점은
하지만 아쉬운 점도 있었다.
자유게시판 조회 페이지
자유게시판 조회 페이지 내의 FreePostPanel 컴포넌트
FreePostPanel 컴포넌트 내의 FreePostList
이번 프로젝트의 개인적인 목표는 사실 이정도였다.
하지만 새로운 지식을 공부해 적용해보려는 노력을 하는 팀원들 덕분에 Redux에 대해서 공부하게 됐고 RTK 쿼리를 나의 코드에 응용할 수 있었다. 더 나아가 RTK 캐싱 관련 오류에 대해서 함께 고민하고 해결해나갔다.
프로젝트 발표 바로 전날 다행히 검색페이지에서 에러를 발견했다.
검색값은 search api reducer에서 관리했더니, search에서 좋아요를 누르면 다른 페이지에서 적용이 안 됐다. 서치를 한번 했을 때 서치 데이터가 캐싱되고, 게시글을 추가하면 해당 게시판 데이터는 캐시가 무효화 돼서 새로 불러와지지만 서치데이터는 무효화가 안돼서 그대로 나타나는 것이었다.
search는 freePost, matchPost도 받아오기 때문에 한 리듀서에 넣기도 애매한 상황이었다.
그래서 search api를 freePost와 matchPost별로 받을 수 있도록 두가지로 나누었다. 백엔드 담당자에게 양해를 구하고 백엔드 코드 수정에 개입해 문제를 해결을 할 수 있었다.
동행게시판 조회
동행게시판 글쓰기
자유게시판 조회
이번 프로젝트를 계기로 개발이 더 재밌어졌다. 새로운 지식을 차근차근 적용해보면서 구현되는 모습을 보는 게 뿌듯했다. 적극적으로 프로젝트를 발전시키기 위해 노력을 하는 팀원을 만난 게 작은 우연일지 모르겠지만, 나에게는 큰 울림을 줬던 이번 프로젝트였다. 곧 백엔드 파트 1명과 함께 팀 프로젝트를 시작할 예정인데, 이번 프로젝트에서 배웠던 개발자의 성장하는 매력을 다시 한번 느껴보고 싶다.