쉘위헬스
- 기간: 2021년 11월 23일 ~ 2021년 12월 20일 (약 4주)
- 인원: 4명
- 포지션: 풀스택1명, 프론트2명, 백엔드1명(본인)
- 와이어프레임 보러가기
- gitbook API 확인하기
- 깃허브 확인하기
- 쉘위헬스 이용하러가기
쉘위헬스는 이러한 서비스를 제공합니다
'혼자 운동하긴 심심한데, 함께 운동할 수 있는 운동메이트를 찾을 방법이 없을까..?'
라고 생각해보신 적 있으신가요?
그래서 원하는 일시에 원하는 헬스장에서 자신과 비슷한 운동수준의 사람을 구할 수 있는 '쉘위헬스'를 기획하게 되었습니다.
쉘위헬스에서는 원하는 일시에 헬스장을 선택해 운동메이트를 찾는 서비스를 제공합니다. 게시물을 업로드하면, 신청할 수 있습니다. 이때 유저는 게시물을 매칭여부, 지역, 날짜 등으로 필터링해 조회할 수 있습니다. 매칭된 유저들은 실시간 채팅으로 소통할 수 있습니다.
매칭된 유저들은 함께 운동한 이후 서로를 추천 또는 신고를 통해 서로를 평가할 수 있습니다.
기획은 다음과 같이 이루어졌습니다
다음과 같은 기능을 구현했습니다
맡은 역할
이번 프로젝트에서 백엔드 포지션을 맡았고, 다음과 같은 역할을 수행했습니다.
npm init
부터 필요한 모듈과 라이브러리 설치, 디렉토리와 파일 생성, sequelize 설정과 seed 파일을 생성하고 마이그레이션했습니다.
gitbook을 활용해 24개의 api
를 작성했습니다. 서버에서 응답으로 보내줄 데이터에 대해서는 프론트 팀원들과 의논하며 정했고, 응답 예시를 작성해두어 기능 구현을 진행하며 프론트 팀원과 빠르게 소통할 수 있었습니다.
지난 2주 프로젝트와 다르게, 이번 프로젝트에서는 status code
와 에러 핸들링
에 중점을 두었습니다. 따라서, 상황에 따른 적절한 상태코드를 전달하기 위해 상태코드에 대해 공부했고, 에러가 발생한 경로와 메시지를 작성해두었습니다.
이는 실제로, 프로젝트에서 기능구현하며, 에러가 발생한 원인과 경로를 빠르게 파악하는데 도움이 되었습니다.
매칭 게시판에서 유저는 게시물을 원하는 조건에 맞추어 필터링
할 수 있습니다. 날짜와 매칭여부, 지역을 선택할 수 있습니다. 조건을 설정하지 않은 경우, 오늘 날짜로 예약된 모든 데이터를 조회합니다.
리액트 페이지네이션을 참고하여 프론트와 백을 구현했습니다. 프론트에서는 이전
과 다음
, 그리고 처음으로
와 마지막으로
버튼에 페이징을 변경하는 이벤트를 구현했습니다. 페이징은 최대 5개가 노출됩니다.
유저가 페이징의 숫자를 클릭하거나 이전, 다음 등의 버튼을 클릭해 현재 페이지가 변경된 경우, 클라이언트에서는 해당 페이지가 포함된 url로 서버에 axios GET 요청을 보내게 됩니다.
따라서, 서버에서는 특정 개수만큼의 데이터를 클라이언트에 전달합니다. 이는 sequelize의 offset
과 limit
옵션을 활용해 구현했습니다.
게시물 또는 유저를 검색할때, 검색어와 완전히 일치하지 않더라도 유사한 데이터를 조회할 수 있습니다. sequelize
의 operator
중 Op.or
과 Op.substring
을 활용해 구현했습니다.
소켓아이오를 사용해 실시간 채팅 서버 부분을 구현했습니다. 매칭된 두 유저는 생성된 룸
에서 대화를 나눌 수 있습니다. 동시에 유저가 작성한 채팅은 데이터베이스에 생성되어 페이지 새로고침 시 데이터베이스에서 대화기록을 시간순서로 조회합니다.
AWS의 ec2, s3, rds, codepipeline
를 활용해 클라이언트와 서버의 배포 자동화를 구현했고, cloudfront, loadbalancer, acm, codedeploy
를 사용해 https
로 연결했습니다.
느낀점
이번 프로젝트에서 제가 중요하게 생각하며 느낀 점은 다음과 같습니다.
많은 경우, 코드를 작성하는 시간보다 에러를 찾아 해결하는데 시간을 많이 보내곤 합니다. 따라서, 백엔드에서 할 수 있는 최선은 클라이언트로 하여금 에러가 발생했을때, 어떤 경로에서 무슨 이유로 발생했는지를 알려주는 것이라고 생각했습니다. 따라서, 서버 코드에서 분기를 나누어 status code와 에러 메시지를 구분해 응답했습니다.
또한, 백엔드 자체에서도 sequelize에서 logging 속성을 사용해 요청에 따른 raw query를 콘솔에 찍어 확인하였고, 에러가 발생했을때에도 콘솔창에서 확인할 수 있었습니다.
에러의 위치와 원인을 아는 것만으로도 에러해결 시간을 단축할 수 있었습니다.
코드스테이츠를 하면서 30명이 넘는 사람들과 페어 프로그래밍을 진행했고, 프로젝트에서는 특히 프론트와 1대 1로 소통하는 일이 많았습니다. 에러가 발생할때, 줌에서 실시간으로 에러의 원인을 파악하고 해결했습니다. 저 또한 혼자 해결하지 못한 문제는 다른 팀원분들에게 줌을 요청해 함께 고민하고 해결할 수 있었습니다.
그런데, 줌으로 누군가의 코드를 읽고 문제를 파악한다는 것은 대면으로 하는 것보다 많은 노력이 필요한 일이었습니다. 때로는 네트워크나 음질 문제가 있기도 했고, 화면 공유라는 제한 때문에 상대방에게 디버깅을 할 때에도 상대방의 도움이 필요했습니다.
그래서 더욱 잘 질문하는 것이 중요하다고 느껴졌습니다. 저는 다음과 같이 질문을 하려고 노력했습니다.
- 현재 겪고있는 문제상황은 무엇인지 코드를 일부 첨부해 정리한다
- 이 문제를 해결하기 위해 참고한 링크들을 첨부하고 내용을 간략히 요약한다
- 문제가 발생한다고 생각하는 원인을 설명한다
- 상대방의 요청에 최대한 빠르게 응답한다
우리는 모두 배우고 있는 학생이고, 다른 사람의 코드를 보고 한번에 이해하는 것에 익숙하지 않기 때문에 코드를 보지 않고도 이해할 수 있을 정도로 충분히 설명하려고 했습니다.
잘 질문하는 것은 제 스스로 문제에 대해 충분히 이해하고 있음을 나타내기도 하며, 상대방으로 하여금 커뮤니케이션에 들일 수 있는 노력을 아낄 수 있는 꼭 필요한 태도라고 생각합니다.
앞으로도 모르는 것이 무엇인지 알고, "잘" 질문할 수 있는 주니어 개발자로 성장할 것입니다.
데브로그 확인하러가기
에러핸들링 확인하러가기
이번 프로젝트에서는 총 19개의 데브로그를 작성해 그날 한 일들을 기록했습니다. 또한 에러가 발생했을때, 이를 해결하는 과정을 기록해 총 8개의 에러 핸들링 로그를 기록했습니다.
그리고, 벨로그 블로깅 또한 꾸준히 작성해 25개 이상의 기록을 남겼습니다. 에러 핸들링 뿐만 아니라 공부하고 배운 내용도 잊지 않기 위해 작성했습니다.
매일 기록하면서 느낀 것은, 매일매일 내가 어떤 일을 했고, 어떤 문제를 겪고 해결했는지를 한눈에 확인할 수 있었습니다. 프로젝트를 진행하며 내가 잘하고 있는지, 그리고 과연 내가 정말 알고있는 것이 맞는지 스스로 의심될 때가 있었습니다. 그럴때마다 모두가 읽고 확인할 수 있는 공간에 글을 작성함으로써 책임감을 갖고 공부할 수 있었습니다.
기록들을 보며, 부족하지만 내가 무엇을 어려워했는지, 그리고 힘들었지만 극복해냈다는 점이 뿌듯했고, 동기부여를 얻었습니다. 앞으로도 꾸준히 기록하는 습관을 가질 것입니다.
QnA
서버에서 전달한 status code 기준은 무엇인가?
status code에 대한 기록 살펴보기
서버는 클라이언트 요청에 대해 알맞은 status code를 보내주어야합니다.
성공코드의 경우,
에러코드의 경우,
안녕하세요 :) 블로그에 정말 많은 글을 정리하셨네요 ...
한 수 배워갑니다 ^^