모티
운동 챌린지 및 리워드 기반 모바일 헬스케어 플랫폼 구축
사용자의 운동 수행 데이터를 일 단위 통계로 저장하고 미션·챌린지 달성 여부와 포인트 보상을 연결한 모바일 서비스입니다. BLE 운동 기기 연동, 걷기·러닝 기록, 위치 기반 운동 흐름, 푸시 알림, 이미지 업로드, 관리자 운영 도구까지 실제 서비스 운영에 필요한 구조를 함께 구현했습니다.
- 기간
- 2023
- 분류
- 모바일 앱, 관리자


Flutter 모바일 앱, React Admin 운영 콘솔, Express API 서버, MongoDB 데이터 모델, Redis 기반 비동기 큐, Firebase 푸시, AWS S3 파일 저장소를 분리해 구성한 운동 기록 및 챌린지 서비스입니다. 사용자는 운동 기기 또는 모바일 센서를 통해 운동을 기록하고, 미션과 챌린지를 수행하며 포인트 리워드를 받을 수 있습니다. 운영자는 관리자 콘솔에서 회원, 챌린지, 미션, 포인트, 콘텐츠, 백업 데이터를 관리할 수 있도록 구성했습니다.
서비스 화면
운동 기기 연동 기반 운동 기록
BLE 기기와 모바일 앱을 연결해 세트·반복·중량 데이터를 주고받고, 수신된 운동 상태를 로컬 진행 상태와 서버 운동 기록으로 연결했습니다.
걷기·러닝·일반 운동 통합 기록
운동 카테고리 태그에 따라 걷기, 러닝, 일반 운동을 구분하고 목표 점수와 진행률을 계산해 미션·챌린지 달성 흐름에 재사용했습니다.
목표 기반 미션 수행 관리
기간과 요일 조건으로 생성된 미션을 사용자의 오늘 할 일로 제공하고, 운동 점수가 목표에 도달하면 완료 상태와 통계 데이터를 갱신합니다.
포인트 참여형 챌린지 운영
사용자가 보유 포인트로 챌린지에 참여하고 성공 시 보상 포인트를 받을 수 있도록 참여, 취소, 종료, 보상 수령 흐름을 구현했습니다.
일 단위 운동 통계와 진행률 시각화
미션·챌린지·출석 수행 내역을 날짜별 통계 문서로 누적해 캘린더, 차트, 달성률 화면에서 반복 조회할 수 있는 구조로 구성했습니다.
알림 기반 참여 유도
챌린지 시작·종료와 운영 메시지를 서버 알림으로 저장하고 FCM 푸시와 앱 내 알림 목록을 함께 갱신해 재방문 동선을 만들었습니다.
관리자
회원 및 권한 운영 관리
관리자 콘솔에서 회원 정보, 프로필 이미지, 활동 상태, 포인트 및 이용 데이터를 조회·관리하고 관리자 권한은 JWT role 검증으로 보호했습니다.
챌린지·미션 콘텐츠 관리
운동 카테고리, 기간, 요일, 목표 횟수, 보상 포인트, 활성 상태를 관리해 운영자가 서비스 이벤트를 코드 수정 없이 조정할 수 있습니다.
이미지와 공지 콘텐츠 운영
관리자 화면에서 이미지를 리사이즈 후 S3 signed URL로 업로드하고, 공지·FAQ·정책·갤러리 콘텐츠를 API 리소스로 관리합니다.
백업 및 로그 확인
서버에서 생성된 MongoDB 백업 파일 목록과 운영 로그를 관리자 리소스로 제공해 장애 대응과 데이터 보존 업무를 지원합니다.
앱 화면






사용한 기술
- Flutter
- Dart
- React
- React Admin
- TypeScript
- Node.js
- Express
- MongoDB
- Mongoose
- Redis
- Bee-Queue
- Firebase
- AWS S3
- PM2
화면
- Flutter 기반 iOS·Android 통합 모바일 앱 구성으로 운동 기록, 챌린지, 미션, 알림, 마이페이지 흐름을 단일 코드베이스에서 제공
- Riverpod과 GetIt을 활용해 인증 상태, 운동 진행 상태, BLE 연결 상태, 통계 데이터를 화면별로 분리 관리
- Dio 기반 API 클라이언트에 JWT 헤더 주입, refresh token 재발급, 네트워크 재시도, 응답 캐싱 구조를 적용해 모바일 환경의 연결 불안정성에 대응
- Flutter Blue Plus, Google Maps, Pedometer, Location을 활용해 BLE 운동 기기, 걷기, 러닝, 위치 기반 운동 기록 화면을 구성
- React Admin 기반 관리자 콘솔로 회원, 챌린지, 미션, 포인트, 공지, FAQ, 정책, 설정, 로그, 백업 리소스를 운영자가 관리
서버 · 데이터
- Express와 TypeScript 기반 REST API 계층을 구성하고 리소스별 컨트롤러를 분리해 모바일 앱과 관리자 콘솔이 동일한 서버 API를 사용
- Mongoose 스키마로 회원, 기기, 운동, 통계, 미션, 챌린지, 포인트, 알림, 정책, 갤러리 등 서비스 핵심 데이터를 모델링
- JWT access token과 refresh token을 분리하고 refresh token을 기기 단위로 저장해 앱·관리자 인증과 다중 로그인 정책을 처리
- Bee-Queue와 Redis를 활용해 푸시 알림과 포인트 지급 작업을 비동기 처리하고, MongoDB session 기반 포인트 지급 트랜잭션을 구성
- Node Schedule로 챌린지 상태 전환, 통계 단위 생성, 포인트 만료 처리를 일 단위 배치로 실행
인프라
- PM2 cluster 모드와 max memory restart 설정으로 Node.js API 서버를 운영 프로세스로 관리
- Firebase Hosting을 통해 React Admin 운영 콘솔을 정적 빌드 후 배포
- Firebase Admin SDK와 Firebase Cloud Messaging으로 모바일 푸시 발송 및 디바이스 토큰 기반 알림 전달 구성
- AWS S3와 Serverless Framework를 활용해 이미지 업로드 버킷, 정적 파일 동기화 버킷, CORS 정책을 구성
- MongoDB 백업을 mongodump와 압축 파일로 생성하고 관리자 API에서 백업 목록 조회 및 다운로드가 가능하도록 구성