코드스테이츠에서의 2주 프로젝트가 끝났다. 내가 제안했었던 아이디어인 투표플랫폼 SNS서비스(App 이름: Pick me up)를 지난 10일간 애정을 가지며 제작해보았다.
Pick me up 서비스 내에서 유저들에게 그들이 겪고 있는 선택의 기로를 많은 사람들에게 알리고, 다수에게 voting을 받을 수 있다. 남녀노소 누구나 가볍고 캐주얼하게 사용할 수 있는 SNS 서비스이다. 메인기능인 투표올리기 & 투표하기를 중심으로 다른 서브기능(피드 정렬 및 필터링 등)들을 팀원들과 여러개 떠올려 살을 붙였다.
이번 2주 프로젝트에서 5월부터 약 3달 반동안 배웠던 모든 것을 복습하는 것에 의의를 두었다. 간단한 기능만 구현하더라도 완성도가 있어야 하며 실제로 사람들이 바로 사용해볼 수 있게끔 만드는 것이 이번 프로젝트에서 최대 목표였다.
2021.08.23 - 2021.09.03(12일)
프론트엔드(나 포함 2명), 백엔드 2명이 아래 기술스택으로 앱을 제작하였다.
아무래도 나 포함 프론트엔드 파트를 맡은 팀원이 1명 더 있기 때문에, SR기획때부터 CSS를 모듈화해야 하지 않을까 생각했다. Post CSS는 모듈화가 가능하므로 BEM 과 같은 이름명을 쓰지 않아도 간편하게 관리할 수 있다. Post CSS를 사용하지 않았을 때, 동일한 className을 이용하다보면 각각의 css 파일이라도 style이 중복으로 덮어씌워지는 경우(오버라이팅)가 많았다. 이 때문에 복잡하고 세부적인 className을 작성해서 사용해야 했으나, PostCSS의 모듈화를 사용하면 동일한 className을 작성하더라도 오버라이팅을 방지할 수 있었다.
⚡︎ 표시는 내가 기여한 기능!
전반적으로 군더더기 없는 깔끔한 디자인으로 메인페이지 레이아웃을 잡았다. 유저가 메인페이지를 볼 때 피드 하나하나에 집중하길 바랬기 때문에 2개, 3개의 피드를 '하나의 행'에 띄우지 않았다. 유저들이 가볍게 소비하는 SNS 서비스이므로 타 SNS 서비스(인스타그램, 트위터 등)의 디자인을 많이 참고하였다.
카테고리별 필터: 해시태그를 클릭할 때마다 해당 해시태그를 포함한 피드만 보여준다. 클릭할 때마다 서버에 API요청을 보내어 받은 응답으로 피드리스트 상태값을 변경시켜주었다.
정렬: 정렬기능은 굳이 API를 통하여 구현하지 않아도 되었다. 피드리스트 상태값을 sort
메소드를 사용하여 시간순으로 or 전체 투표수 기준으로 정렬하여 다시 상태값을 업뎃시켜 주었다.
해당 기능은 하나의 페이지에서 이루어지고 여러 상태값에 따라 다른 컴포넌트(투표 컴포넌트, 결과 컴포넌트, 투표집계중인 로딩중 컴포넌트 등)가 랜더링 되었다.
비로그인자: 일단 로그인 하지 않아도 상세 피드 페이지를 확인할 수 있도록 하였다. 그런데 투표 옵션을 선택하고 정말로 투표하시겠습니까?에 '네'를 클릭하였을 경우 '로그인이 필요합니다' 메세지가 뜬다.
로그인자: 그런데 투표 옵션을 선택하고 정말로 투표하시겠습니까?에 '네'를 클릭하였을 경우, 서버에 POST요청을 보내어 해당 유저가 기투표자인지, 투표한적이 없는지 확인하는 응답을 보내준다. 그 이후,
<input type="file">
태그로 이미지 파일을 2개 첨부하도록 하였다. 정확하게 파일이 어떻게 서버에 넘어가서 DB에 저장이 되고, 옆에 조그맣게 이미지 preview가 되는지에 대한 상세 내용은 다음 포스팅에서 다뤄보고자 한다.
모든 카테고리를 채운 후 유저가 '등록' 버튼을 클릭하면 서버에 API요청을 보내어 DB에 하나의 레코드가 생성되게끔 하였다.
또한, '등록' 버튼을 클릭하면 바로 홈 화면으로 이동하게 하여 내가 방금 등록한 새로운 피드가 메인피드리스트의 상단에 띄워지는 것을 보여주었다. 이 때 '새로고침해야만' 메인피드리스트에 추가되는 것을 볼 수 있었던 에러가 있었는데 이 버그를 해결하는 것 또한 다음 포스팅에서 다뤄보고자 한다.
마이페이지의 서브 네비게이션바에서 'my contents'를 클릭하면 내가 쓴 피드를 서버에서 API GET요청으로 받아와 띄웠다. 그리고 해당 피드의 제목 오른편에 닷닷닷 표시의 옵션 더보기 아이콘을 넣어 유저가 피드 수정 및 삭제를 할 수 있도록 하였다.
내 글 수정: 해당 피드의 수정을 누르면, 하나의 상태값으로 클릭된 피드의 정보가 저장된다. 그리고 그 저장된 데이터를 다시 props로 받아와 제목, 옵션명, 이미지파일주소, 컨텐츠, 카테고리등으로 해체하여 useState의 초기값으로 넣었다. 내 글 수정 버튼을 클릭하면 바로 모든 값이 디폴트로 채워넣어져 있고 여기에 유저는 수정만 하면 된다.(이미지 파일 수정도 가능하다) 수정 후 등록 버튼을 누르면 서버에 API POST요청을 보내어 해당 레코드를 request 받은 데이터로 수정한다.
내 글 삭제: 해당 피드의 삭제를 누르면, 서버에 API DELETE 요청을 보내어 해당 레코드를 삭제하고 홈화면에서 바로 피드가 삭제된 것을 확인할 수 있다.
마이페이지의 서브 네비게이션바에서 'my info'를 클릭하면 API GET요청으로 아이디/닉네임/모바일 등의 정보를 응답으로 받고 랜더링해주었다. 그리고 내가 쓴 글 수정하기와 비슷하게 내 정보도 수정할 수 있다.
로그인을 하지 않아도 기본적으로 메인 랜딩 페이지와 피드 상세페이지는 볼 수 있다. 투표 결과를 먼저 띄우지 않아 로그인 하고 싶게 만들었다.
<기능구현 관련>
<레이아웃/디자인 관련>
<기타>
<기능구현 관련>
<레이아웃/디자인 관련>
<기타>
짧은 시간이었지만 팀원들과 함께 좋은 결과물을 낼 수 있었고, 그 과정이 너무 즐거웠다. 처음 팀이 꾸려졌을 때 조금은 어색한 감이 없지 않아 있었는데, 여러 에러를 핸들링하면서 많이 친해지게 되었다. 처음에 로그인 기능을 구현할 때부터 맞닿뜨렸던 이런저런 에러들... ㅠㅠ 한 두개가 아니었기 때문에 정말 당황스럽고 힘들었는데, 시간이 흘러 결국 해결하게되었을 때의 그 쾌감이란......!!! 길지 않은 프로젝트였지만 모든것이 다 처음이었기 때문에 그 만큼 픽미업에 많은 애착이 간다.ㅠ.ㅠ 나중에 개발자가 되어서도 정말 많이 기억에 남을 것 같다.😊