마이니
BLE 기반 집중 타이머 및 사용 습관 분석 모바일 서비스 구축
사용자가 집중 목표와 반복 타이머를 설정하고, BLE 기기 또는 앱 타이머로 수집한 집중·휴식·일시정지 데이터를 기반으로 목표 달성률과 생활 패턴을 확인하는 모바일 서비스입니다. 운영자는 React Admin 콘솔에서 회원, 목표, 세션, 공지, 알림 템플릿, 이메일 템플릿, 기본 시간 추천값을 관리하며, 대용량 목록은 큐 기반 이메일 다운로드로 분리해 운영 부담을 줄입니다.
- 기간
- 2023
- 분류
- 모바일 앱, 관리자


Flutter 모바일 앱, Express API 서버, React Admin 운영 콘솔, Firebase Functions, AWS S3 정적 자원 배포를 함께 구성한 집중 시간 관리 서비스입니다. BLE 하드웨어 타이머와 소프트웨어 타이머를 모두 지원하며, 세션 기록을 MongoDB에 저장한 뒤 일별·목표별·기기별 통계로 재계산합니다. Redis 기반 Bee-Queue를 활용해 목표 마감 알림, 주간 리포트 푸시, 이메일 발송, 관리자 엑셀 다운로드를 비동기로 처리하도록 설계했습니다.
서비스 화면
BLE 타이머 자동 연결 및 세션 동기화
사용자가 기기를 선택하면 BLE 권한 확인, MTU 협상, 상태 요청, 세션 분할 수신을 거쳐 집중 기록을 앱과 서버에 동기화합니다.
목표 기반 집중 시간 관리
기간, 휴식일, 일일 목표 시간을 설정하면 서버가 목표별 일자 데이터를 생성하고 세션 누적값으로 달성 상태를 계산합니다.
일별·주별 집중 패턴 분석
세션 저장 시 집중·휴식·일시정지·연속 사용 지표를 일별 통계로 재계산해 사용자가 변화 추이를 확인할 수 있게 했습니다.
스크린타임·수면 데이터 통합 기록
Android Usage Stats와 Health 데이터를 수집해 앱 사용 시간과 수면 시간을 서버에 저장하고 집중 데이터와 함께 비교할 수 있게 했습니다.
집중 방해 앱 제한 모드
집중 중 허용 앱 목록을 제외한 앱 실행을 감지해 제한 화면으로 되돌리고 iOS는 Screen Time API로 선택 앱 차단을 제어합니다.
관리자
회원 및 구독 상태 운영 관리
회원 목록에서 인증 방식, 앱 타입, 접속 정보, 구독 상품과 만료일을 조회하고 관련 기기·토큰·구독 이력을 함께 확인합니다.
목표·세션 데이터 필터링 다운로드
관리자가 기간과 회원 조건으로 목표·세션 데이터를 조회하고 다운로드 요청은 큐로 분리해 이메일 첨부로 전달합니다.
다국어 공지와 알림 템플릿 관리
공지, 이메일 템플릿, 푸시 템플릿을 한국어·영어·일본어로 관리해 서비스 메시지를 운영자가 즉시 수정할 수 있게 했습니다.
앱 화면






사용한 기술
- Flutter
- Dart
- Flutter Bloc
- GetX
- Flutter Reactive BLE
- Firebase Cloud Messaging
- Express
- TypeScript
- MongoDB
- Mongoose
- Redis
- Bee-Queue
- React
- React Admin
- Vite
- AWS S3
- Firebase Hosting
- Firebase Functions
- PM2
화면
- Flutter 기반 iOS·Android 통합 모바일 앱 구성으로 하드웨어 타이머와 소프트웨어 타이머 흐름을 동일한 사용자 경험으로 제공
- Flutter Bloc과 Freezed 모델을 사용해 인증, 목표, 기기, 세션, 통계, 알림 상태를 화면 단위로 분리 관리
- Flutter Reactive BLE 기반 기기 연결, MTU 협상, characteristic 구독, 자동 재연결 흐름을 구현해 타이머 세션을 안정적으로 동기화
- Dio 인터셉터 기반 JWT 자동 첨부와 refresh token 재발급 구조로 앱 화면 전환 중 인증 만료를 복구
- Usage Stats, Health, Screen Time API, Foreground Task를 활용해 스크린타임, 수면, 집중 모드, 백그라운드 타이머 상태를 모바일 환경별로 처리
- React Admin과 Vite 기반 관리자 콘솔을 구성해 회원, 목표, 세션, 공지, 템플릿, 설정 데이터를 운영자가 필터링하고 관리
서버 · 데이터
- Express API를 기능별 controller로 분리하고 JWT authorize 미들웨어로 사용자, 관리자, 보기 전용 관리자 권한을 구분
- MongoDB와 Mongoose 스키마 기반으로 사용자, 기기, 목표, 세션, 일별 통계, 구독, 공지, 알림, 템플릿 데이터를 모델링
- 세션 저장 시 중복 세션을 갱신하고 신규 세션 범위만 통계 재계산 대상으로 잡아 일별·기기별·목표별 누적 지표를 갱신
- Bee-Queue와 Redis를 사용해 목표 체크, 목표 종료, 주간 리포트, 비밀번호 재설정 메일, 관리자 데이터 다운로드를 비동기로 처리
- Firebase Admin SDK 기반 FCM 발송 구조로 목표 생성·성공·실패·마감 임박·주간 사용 패턴 알림을 사용자 언어와 설정에 맞춰 전송
- Apple 로그인, Google 로그인, App Store·Google Play 구독 검증 로직을 서버 서비스 계층으로 분리해 인증과 결제 상태를 API에서 관리
인프라
- Firebase Hosting을 통해 React 관리자 콘솔을 배포하고, firebase.json에서 hosting과 functions 배포 대상을 분리
- Firebase Functions Pub/Sub 트리거로 Google Play 구독 실시간 알림 이벤트를 수신하는 서버리스 확장 지점을 구성
- AWS S3와 Serverless Framework로 이미지 업로드 버킷과 정적 동기화 버킷을 구성하고 관리자·앱에서 공용 리소스를 조회
- Node.js 서버는 TypeScript 빌드 후 PM2 ecosystem 설정으로 운영되며 메모리 제한, 자동 재시작, 정기 재시작 정책을 포함
- Nodemailer SMTP와 ExcelJS를 사용해 관리자 다운로드 결과를 이메일 첨부 파일로 전달하는 운영 데이터 반출 구조 구성
- Artillery 부하 테스트 설정과 Swagger 빌드 스크립트를 포함해 API 성능 점검과 문서화 기반을 마련