졸업작품으로 개발한 Android Native(Java) 운동 관리 앱입니다.
운동 기록 및 캘린더 관리, 루틴 추천, 운동 라이브러리·리뷰, 커뮤니티(일정 공유·자유게시판), 마이페이지 등
피트니스 앱에 필요한 전반적인 기능을 Firebase 기반으로 구현했습니다.
총 237개 파일, 42개 Java 클래스로 구성되었으며 MPAndroidChart를 활용해 운동 통계를 시각화하고,
WorkManager로 백그라운드 알림 기능을 구현했습니다.
앱을 48시간 이상 사용하지 않으면 백그라운드에서 알림을 보내는 기능을 WorkManager로 구현했습니다. 앱 종료 후에도 Android 시스템이 작업을 보장해주는 WorkManager를 활용하여, 마지막 사용 시각을 SharedPreferences에 저장하고 PeriodicWorkRequest로 주기적으로 체크하는 방식으로 처리했습니다.
실시간으로 빠르게 동기화가 필요한 커뮤니티 피드는 Firebase RealtimeDB를 사용하고, 구조화된 문서 저장이 필요한 운동 기록·사용자 프로필은 Firestore로 분리하여 관리했습니다. 두 DB의 특성을 파악하고 적재적소에 활용하는 설계 경험을 쌓았습니다.
Firestore에서 가져온 운동 기록 데이터를 날짜별로 집계하여 MPAndroidChart의 BarChart · LineChart로 시각화했습니다. 데이터 가공 로직을 ViewModel에서 처리하여 UI와 분리했습니다.
Java 9개 + Kotlin 40개가 혼재하여 파일마다 문법이 달라 유지보수가 불편했음
모든 클래스를 Kotlin 66개로 통일, data class·람다·확장함수 등 Kotlin 문법을 적극 활용
Firebase 쿼리 로직이 각 Fragment/Activity에 분산되어 중복 코드 다수 존재
repository/ 패키지로 집중 — PostRepository, UserRepository, WorkoutRepository, FollowRepository, RoutineRepository 등 8개 Repository
GeneralBoardFragment와 ScheduleBoardFragment가 게시글 로드·검색·UI 코드를 각각 중복으로 보유
BaseBoardFragment 추상 클래스로 공통 로직 통합, 각 Fragment는 category만 오버라이드하여 상속
운동 기록만 존재, 칼로리 섭취 관리 기능 없음
diet/ 패키지 신규 추가 — 아침/점심/저녁/간식 식단 기록, 칼로리 목표 대비 진행률 링 차트(DietAddActivity)
회원 비밀번호가 Firebase에 평문(plain text)으로 저장되어 있어 보안상 심각한 취약점이 존재했음
Firebase Auth를 통한 인증 방식으로 전환하여 비밀번호 평문 저장 로직을 완전히 제거, 직접적인 비밀번호 저장 없이 인증 처리
프로필 이미지 업로드 후 UI 즉시 반영이 없었고, 운동 목표 및 개인정보 관리 화면 구성이 미흡했음
Firebase Storage 업로드 후 프로필 이미지 즉시 반영, 운동 목표 및 개인정보 관리 화면 UI 개선, WorkManager 48시간 미사용 알림 안정화
Handler에 Looper 미지정, onDestroy에서 콜백 미제거 → 메모리 누수 가능성, 로그인 상태 재확인 없이 스플래시 후 로그인 화면 항상 표시
Handler(Looper.getMainLooper()) 명시 + onDestroy에서 removeCallbacksAndMessages 호출, 이미 로그인된 사용자는 메인 화면으로 자동 이동
Android 배터리 최적화 설정으로 인해 백그라운드 작업이 시스템에 의해 강제 종료되는 경우 발생
배터리 최적화 예외 권한 요청 안내 다이얼로그를 추가하고, WorkManager의 재시도 정책(BackoffPolicy)을 설정하여 재시도 시 알림이 전송되도록 처리
Firebase 무료 플랜(Spark)으로 운영 중이라 동시 접속자 수 및 저장 용량에 제한이 있음
Spring Boot 백엔드 서버를 별도로 구축하고 MySQL로 전환하면 확장성과 비용 효율성 개선 가능
운동 루틴 추천이 단순 조건 분기 로직으로 구현되어 개인화가 부족함
사용자 운동 기록 데이터를 기반으로 머신러닝 추천 알고리즘을 도입하면 개인화된 루틴 제공 가능