[PetPal] - Kotlin과 Firestore로 구현한 반려동물 산책 커뮤니티 앱

고진호·2023년 10월 11일
post-thumbnail

작업 기간: 2023.08.30~2023.09.26
인력 구성: 개발자 6명
프로젝트 목적: 반려동물 산책 커뮤니티 플랫폼 개발

프로젝트 목표: 사용자 친화적인 UI와 실시간 위치 공유 기능을 통한 커뮤니티 활성화

사용언어 및 개발환경

  • Kotlin
  • Firestore
  • Android Studio

주요 업무 및 상세 역할

기획, 프론트엔드(UI), 기능 구현까지 전담하여 산책, 카카오맵과 관련된 모든 업무 수행

1. 반려동물 관련 방문지 정보 제공 기능 개발

  • 실시간 위치 트래킹: 사용자의 현재 위치를 맵 상에 실시간으로 표시.
  • UI/UX 디자인: 사용자가 맵을 드래그하여 지역을 선택할 수 있는 인터페이스 구현.
  • 카카오 REST API 활용: 선택된 지역의 GPS 좌표를 기반으로 반려동물 관련 방문지 검색.
  • 정보 제공: 검색된 방문지를 맵 상에 핀으로 표시, 사용자에게 정보 제공.
  • 후기 및 별점 시스템: 사용자와 상호작용한 방문지에 대한 후기와 별점을 DB에 저장하고 표시.

2. 산책 정보 실시간 위치 정보 제공 기능 개발

  • 산책 정보 저장: 사용자의 산책 시간과 거리를 측정하고 저장.
  • 산책 분기 : 사용자의 산책 약속 여부에 따라 산책의 종류를 구분하고 산책 후기의 UI및 기능까지 분기.
  • 실시간 위치 트래킹: 사용자의 현재 위치를 맵 상에 실시간으로 표시.
  • 상호작용 기능: 현재 산책 중인 사용자의 위치를 실시간으로 표시, 정보 공유 및 채팅 기능 제공.
  • 필터 기능: 사용자와 반려동물 정보를 필터링하여 맵에 표시.
  • 산책 후기 페이지: 산책 후 사진과 후기를 저장하고 공유.

도전과 문제 해결

도전

1. 이동 거리 시각화

  • 카카오맵 API를 활용하여 산책 후, 사용자의 이동 경로를 맵 상에 선으로 그려 시각화.
    이동 경로를 이미지 형태로 캡처하여 산책 기록에 저장하는 기능.

2. FCM을 이용한 메시지 알림

  • Firebase Cloud Messaging (FCM)을 활용하여 산책이 종료된 후,
    상대방 사용자에게 산책 후기 작성을 위한 알림을 전송.
    알림을 받은 사용자는 후기 작성 프래그먼트로 직접 이동.

3. 실시간 위치 트래킹

  • 산책 중인 사용자들의 현재 위치 좌표를 실시간으로 추적하였습니다.
    해당 위치 정보를 카카오맵 상에 동적으로 마커로 표시하여
    사용자들이 실시간 움직임을 확인할 수 있음

문제 해결

1. 반려동물 관련 방문지 DB 저장 이슈

요구사항
현재 위치를 기준으로 카카오검색 API를 통해 검색한 방문지 전부를 DB에 저장하면, DB의 업로드 부담이 너무 커짐.
DB 업로드와 다운로드 부담을 최소화하면서 사용자 위치를 기준으로 검색된 방문지들을 효율적으로 관리해야 함.

선택지
1. 검색된 방문지를 모두 중복을 제외하고 DB에 업로드.
2. 좋아요를 눌렀을 때, 리뷰를 성공적으로 작성했을 때에만 DB에 업로드.

의견 조율
onMapViewCenterPointMoved 메서드에서 중심 좌표가 바뀔 때마다 방문지들을 새로 검색하므로, 모두 업로드하면 중복검사의 복잡성과 DB 업로드 부담이 커짐. 따라서 두 번째 방법을 사용하기로 결정.

의견 결정
사용자가 좋아요를 누르거나 리뷰를 작성한 방문지에 한해서만 DB에 업로드하고 관리.

결과 및 배운 점

  • 이 방법으로 DB의 부담을 크게 줄일 수 있었고, 사용자의 상호작용을 바탕으로 중요한 데이터만을 저장하여 효율성을 높였습니다.
  • 이 경험을 통해 리소스 최적화와 사용자 경험을 동시에 고려하는 방법, 그리고 팀원들과 빠르게 문제를 인식하고 해결책을 모색하는 커뮤니케이션 능력을 키울 수 있었습니다.

2. 내 위치 커스텀 마커 이미지 로드 이슈

요구사항
특정 상황에서 내 위치를 표시하는 커스텀 마커의 이미지가 로드되지 않아 흰색 네모칸으로 표시되는 현상을 해결해야 함. 어떤 상황에서도 커스텀 마커의 이미지가 정상적으로 로드되어 현재 위치를 파악하기 용이해야 함.

선택지
1. 카카오맵 API에서 기본적으로 제공하는 Redpin 사용
2. 마커에 사용될 이미지의 크기를 가공, 이미지의 용량 최적화 진행
3. 정상적으로 로드되는 이미지를 찾아서 교체

의견 조율

  • Redpin은 커스텀 이미지에 비해 UI적으로 좋지 않음.
  • 이미지의 크기를 아무리 가공하고 용량 최적화를 진행해도 빈도수가 낮아질 뿐, 깨지는 경우가 발생함.
  • 이미지를 아무리 교체해도 기본으로 제공되는 Pin이 아니면 같은 현상이 반복됨.

의견 결정

  • 구글링과 멘토링을 통해 해결 방법을 찾지 못해, 기본적으로 제공되는 Redpin을 사용하기로 결정.

결과 및 배운 점

  • Redpin을 사용함으로써 마커 이미지 로드 이슈는 해결되었지만, UI 측면에서는 아쉬움이 남았음.
  • 이 문제를 해결하기 위한 다양한 접근 방법과 노력을 통해, 문제 해결과 의사결정 과정에서의 중요성을 배웠음.
  • 앞으로의 개선 방향으로는 카카오맵 API 외의 다른 지도 서비스를 탐색하거나, 이미지 로드 이슈에 대한 더 깊은 원인 파악과 해결 방법을 연구할 계획임.

3. 사용자와 다른 유저의 위치 실시간 업데이트 이슈

요구사항:
사용자와 다른 유저의 위치가 지도상에서 실시간으로 업데이트되지 않는 문제가 해결되어야 함. 사용자의 위치는 2초마다 정상적으로 업데이트되어야 함.

선택지:
1. 사용자의 위치를 받아오는 메서드와 조건에 맞는 유저의 위치를 DB에서 업로드, 다운로드 하여 업데이트.
2. 모든 위치 좌표를 DB에 업로드 / 다운로드 하여 업데이트.

의견 조율:

  • 메서드를 분리해서 각각의 위치를 관리하면 좌표를 다루는 복잡도가 올라감.
  • DB에 업로드/다운로드 부담이 심해지고, 실시간 업데이트의 구현이 어려울 수 있음.

의견 결정:

  • 사용자의 위치는 2초마다 실시간으로 메서드 안에서 업데이트.
  • 다른 유저의 위치는 마커가 찍힌 유저 중 위치가 바뀐 유저만 DB에 업로드/다운로드하여 업데이트.

결과 및 배운 점:

  • 이러한 접근 방식을 통해 실시간 업데이트의 부하를 최소화하며 사용자의 경험을 개선할 수 있었음.
  • DB와의 상호작용을 최적화하고, 리소스를 효율적으로 사용하는 방법에 대해 학습함.
  • 특히, 실시간 데이터 처리와 업데이트등, 구현하는 과정에서 기능을 설계하는것의 중요성에 대해서 깊이 깨달음.

완성하지 못한 부분

1.산책한 경로의 시각화
사용자가 산책한 경로를 선으로 그려 산책정보에서 산책했던 경로를 확인할 수 있게 하려고 했으나, 카카오맵의 보안정책상 캡쳐가 허용되지 않아서 그렸던 경로를 산책정보에 같이 저장할 수 없었습니다.

2.유효성 검사
특정 부분의 유효성 검사 기능을 마무리하지 못했습니다.

추가될 기능

1. 가상 산책 경로
사용자가 집 안에서도 산책을 즐길 수 있도록 가상의 산책 경로를 생성하는 기능을 개발 예정입니다.

2.유효성 검사
시간의 부족을 이유로 미뤘던 유효성 검사 기능을 마무리할 예정입니다.

느낀 점

  • 프로젝트 관리: 프로젝트의 크기와 일정, 인원 등을 고려하지 못하고 설정한 바람에 일정과 시간 관리에 어려움을 겪었습니다. 이는 프로젝트의 완성도에도 영향을 미쳤습니다.

  • 팀원 간의 협업: 팀원 간의 역량 차이를 정확하게 인지하지 못하고 역할을 분배하다 보니, 진행도와 완성도에 차이가 발생했습니다. 이를 수정하고 팀원을 도와주는 과정에서 의견 충돌이 발생했으나, 이를 해결하는 과정에서 팀 내에서의 갈등 해소와 협업 능력을 향상시킬 수 있었습니다.

  • 기술적 습득과 적용: 저번 프로젝트에는 제대로 활용하지 못했던 MVVM 아키텍처나 다양한 라이브러리를 실제 프로젝트에 적용해보면서, 여러 공식 문서와 구글링을 통해 문제를 해결하는 방법을 배웠습니다. 이를 통해 더 효율적인 코드를 작성하는 방법과 기술적인 문제 해결 능력을 향상시켰습니다.

  • 문서화의 중요성: 실제 구현 과정에서 발생하는 여러 문제를 기록하고, 이를 반복하지 않기 위해 문서화하는 과정에서 그 중요성을 깨달았습니다. 이를 통해 더 체계적이고 효율적인 작업 진행이 가능해졌으며, 프로젝트의 퀄리티를 향상시킬 수 있었습니다.

마무리

이번 프로젝트를 통해 기술적, 커뮤니케이션 적으로 부족했던 점들을 보완했습니다.
특히 부족했던 팀 프로젝트의 경험이나 실시간 위치 트래킹, DB 관리, 팀원 간의 협업 등 여러 가지 관점에서 성장을 이뤄냈다고 생각합니다.
혼자 프로젝트를 진행하는 것과 팀 프로젝트의 차이점과 팀 프로젝트를 경험해 봐야 하는 이유를 깨닫게 되었습니다.
앞으로도 더 배우고 노력하여 사용자의 입장에서 더 좋은 서비스를 제공하는 애플리케이션을 만들기 위해 노력할 것입니다.

profile
Kotlin,Java 안드로이드 앱 개발자 지망생

0개의 댓글