로고는 깃발 + Point의 P를 합성해 보았습니다.
프로젝트 주소: https://flarepoint.netlify.app
코로나가 세계를 잠식하면서 언택트와 관련된 온라인 플랫폼들이 많아지고 인기도 늘어났습니다. 하지만 모두가 언제나 집에서 온라인으로만 지낼 순 없는 법이죠. 저처럼 아웃도어 취미를 가지고 계신 분들은 갑갑한 마음을 풀기 위해 사람들이 많이 모이지않는 장소를 찾아다니기 시작했습니다. 그와 더불어 캠핑, 차박, 낚시와 같은 취미를 즐기는 분들도 늘어났습니다.
우리나라를 돌아다니다 보면 노지(정해진 장소가 아닌 야외)에도 좋은 곳들이 꽤 많습니다. 이런 곳들을 서로 하나하나씩 공유해가면 코로나Free하게 야외에서 휴식을 즐기고 싶으신 많은 분들께 도움이 되지않을까? 하는 마음에 시작하게 되었습니다.
요즘에는 기업에서 협업과 커뮤니케이션 능력을 높게 평가합니다. 이를 준비하기위해서 내가 가장 먼저 키워야 할 부분은 무엇일까? 질문을 던져보았는데요. 올곧은 커뮤니케이션의 지름길은 서로를 이해하는 것이고 이를 위해 먼저 지식적인 부분을 채워야겠다 생각했습니다. 직접 프론트를 만져보고, 직접 디자인도 만져보며 몸으로 느낀 불편함을 기억해 둔다면 후에 함께 협업할 때 미리 해결책을 준비해 두고 서로를 배려할 수 있겠지요.
그래서 프론트와 디자인은 우당탕탕이지만 하나씩 야매도 써가며 배워나가 개발하였습니다. 이것과 관련해서 느낀점은 아래 회고에 적겠습니다!
FlarePoint는 기존 네이버지도, 카카오맵 등에서 제공되는 퍼스널 마커 기능을 한 지도에서 다같이 생성하고 공유하는 플랫폼입니다.
다음과 같은 장소 공유에 사용 될 수 있습니다.
- 캠핑, 차박 (무료 노지 캠핑, 차박)
- 낚시, 채집 (물고기 잘 잡히는 장소, 야생 쑥 밭)
- 밤 하늘 감상하기 좋은 곳
- 희귀 생물을 관찰 할 수 있는 곳
- 사진 포인트
- 이 외 기존 지도에서 제공되지 않는 공유하고 싶은 장소
❌ 좋지 않은 내용의 마커는 관리자가 임의로 삭제할 수 있습니다.
자동 로그인 기능
sessionStorage와 JWT를 이용해서 새로고침 시에도 로그인이 유지될 수 있게 구현하였습니다.
cookie와 Refresh Token을 이용하여 창을 닫아도 로그인이 유지되는 기능도 있었으나 불편하다는 지인들이 계셔서 일단 내려두었습니다.
위치 검색 기능
지도가 강남역에 포커싱 되어 있는데 제주도에 있는 마커들이 궁금하다? 와 비슷한 상황에 대비하여 지도를 편하게 움직일 수 있도록 카카오 API를 활용해 구현하였습니다. 검색 시 나오는 리스트는 카카오맵에 등록된 정보들입니다.
리스트 무한 스크롤
intersectionObserver를 이용해 구현하였습니다. vue infinite loading 이라는 편한 라이브러리가 있었지만 동작 원리가 궁금해서 직접 구현해 보았습니다.
검색 및 필터
키워드를 통한 검색과 필터 기능을 구현했습니다. 마커의 이름과 태그를 기반으로 키워드를 단순 포함하는 마커를 검색/필터링 할 수 있게 만들었습니다. '인기' 항목에 있는 태그를 클릭해서 활용도 가능합니다. '인기' 태그들은 단순히 많이 사용된 태그를 표시합니다. 이에 대해 조금 더 로직적으로 고민 중 입니다.
찜하기 / 찜 목록 (즐겨찾기 / 즐겨찾기 목록)
마음에 든 마커를 찜해두고 찜 목록 테이블을 만들어 이 후에 찜해둔 마커를 쉽게 찾을 수 있도록 구현했습니다. 흔히 말하는 좋아요 기능입니다.
최선의 코딩을 했나요?
한창 프로젝트를 진행하던 중 받았던 질문입니다. 이 질문을 받고 굉장히 반성하게 된 것 같습니다. 단순히 기능이 동작하는 것에만 집중하는 것이 아닌 코드 한 줄 적으며, 메서드 하나를 사용하면서 이 한 줄이 왜 필요한지, 다른 대체하기 좋은 메서드는 없었는지 돌아보는 것이 필요하다고 말씀해 주셨습니다. 그 후로 제가 짰던 코드들을 되돌아보니 고칠 부분이 정말 많았습니다. 이런 일이 다시 일어나지 않게하려면 지금까지 하던 얕고 빠른 습득보다는 깊고 좁게 파고드는 것이 필요하겠지요. 이 질문은 앞으로 개발하면서 가지고 가야 할 마음가짐이 되었습니다.
개인 프로젝트를 진행하며
프론트를 직접 구현해보며 제일 크게 필요했던 부분은 역시 API 문서화입니다. 서버 단에서 API를 제가 작성했음에도 불구하고 막상 프론트로 가서 쓰려하면 다시 서버 측 코드를 확인하는 과정이 필요했습니다. url과 path는 어떻게 되고 어떤 method를 쓰며, 요청 데이터는 어떤 것을 받는지, 응답 데이터는 어떠한 구조로 반환하는 지, 모든 것을 나타내는 문서가 미리 만들어져 있다면 참 좋을 것 같더군요. 다음 공부는 Swagger를 해야할 것 같습니다.
그리고 양 측의 비즈니스 로직을 구현해보며 후에 다른 기능이 추가되더라도 이 로직이 변경될 일이 없는지 많이 고민해 보았던 것이 큰 경험이 되었습니다. 예를들면 백에선 검색 기능이나 프론트에선 마커 렌더링 같은 기능이 있었네요.
Front-End
Vue.js, Axios, vue-loading-overlay, Kakao Map API
Back-End
Spring security, JWT, PostgreSQL, Bcrypt, Guava, Redis
Dev-ops
Amazon EC2, Docker