BarBear
운동·식단·러닝·등산까지 아우르는 종합 헬스케어 애플리케이션

무엇을 만들었나
BarBear는 크로스핏 운동을 기록하고 XP·출석·PR(개인 기록)을 관리하는 앱에서 출발해, 식단·체성분·유산소까지 아우르는 종합 헬스케어 애플리케이션으로 확장한 프로젝트입니다. iPhone·iPad·Mac(iOS 16+)을 모두 지원하고, 하루의 운동과 식단을 한 화면에서 관리하도록 설계했습니다. 아래 스크린샷은 실제 앱을 iOS 시뮬레이터로 빌드·실행해 각 탭을 캡처한 것입니다.
홈 대시보드
홈은 하루를 여는 대시보드입니다. 상단 검색으로 운동 기록·타이머·용어·알림을 한 번에 찾고, 스트릭(연속 기록)·월간 시간·주간 목표(예: 0/3회)를 카드로 요약합니다. "오늘도 잘 하고 있어요" 같은 격려 문구와 "오늘의 플랜" 카드로 이번 달 목표와 오늘 할 일을 이어 줍니다.
- 스트릭(불꽃 유지) · 월간 누적 시간 · 이번 주 목표 진척을 한눈에
- 운동을 기록하면 XP가 쌓이는 성장 루프
- 오늘의 플랜 — 이번 달 목표와 오늘 퀘스트를 한 번에
운동 기록 · 캘린더 · 타이머
운동 기록(WorkoutLog)에 세션을 남기고, XP·출석·PR을 관리합니다. WOD·인터벌을 위한 운동 타이머와, 러닝·하이킹까지 묶는 운동 허브를 제공합니다. 운동 캘린더로는 날짜별 기록을 되짚어 보며 꾸준함을 확인합니다.


- 운동 기록 — 세션·세트·PR을 남기고 되돌아보기
- 운동 캘린더 — 월 단위로 기록·목표를 시각화
- 타이머 — WOD/인터벌용 카운트다운, 운동 시간이 기록으로 연결
- 운동 허브 — 타이머·러닝·하이킹을 한 곳에서 진입
다이어트 · 영양 추적
"운동만 하던 앱"에 영양·체중 관리를 더해, 체성분까지 다루는 종합 피트니스 앱으로 키웠습니다. 끼니별로 식단을 기록하고, 목표 대비 섭취를 링으로 시각화합니다.

- 끼니별(아침·점심·저녁·간식) 하루 단위 식단 기록
- 칼로리 + 3대 매크로(탄수·단백·지방) 섭취량을 목표 대비 링으로 시각화
- 음식 검색(로컬 DB) + 즐겨찾기 + 직접 입력
- 영양 목표 설정(칼로리·매크로 g)
- 체중 기록과 추이 차트, 일별·주별 리뷰
러닝 · 등산 · 보충제
운동 외 건강 루틴도 한 앱에서 다룹니다. 러닝·등산은 위치 권한을 받아 경로와 고도를 기록하고, 보충제는 섭취 항목과 일정을 관리합니다.
- 러닝(Running) — 세션 기록, 위치 기반 경로·거리·시간
- 등산(Hiking) — 산행 경로·고도 추적, 등록한 박스까지 도보 예상 시간 안내
- 보충제(Supplements) — 섭취 항목·일정 관리
설정 · 개인화
설정 허브에서 내 프로필·운동 목표·보충제 관리 등 개인화 항목과 자주 쓰는 설정을 모아 관리합니다.

기기 간 동기화 (iPhone · iPad · Mac)
데이터의 단일 출처는 각 기기의 로컬 GRDB이고, CloudKit Private DB가 기기 간 복제를 담당하는 Local-first 구조입니다. 읽기/쓰기는 항상 로컬에서 빠르게 처리하고, 변경분만 CKSyncEngine으로 push/pull 합니다.
변경 감지 설계
- SQLite 트리거가 변경을 outbox(
sync_changes)에 적재 — 비즈니스 테이블 25개는 수정하지 않는 최소 침습 설계 sync_metadata에 레코드별 CKRecord 시스템 필드(changeTag·수정시각)를 저장해 충돌을 병합- 원격 적용 중에는
sync_control스위치로 트리거를 꺼 에코(무한 반영)를 막음 - iCloud 미로그인·용량 초과·자녀 계정 시 로컬 전용으로 우아하게 폴백(오프라인 100% 동작)
- "아이폰 = HealthKit 게이트웨이" — 전 기기는 앱 DB만 R/W, 아이폰만 DB↔HealthKit 반영(Mac엔 HealthKit 없음)
구조 · 기술
Tuist로 App·Core·Data·Domain·Services·Features 계층을 모듈로 분리하고, 기능마다 피처 모듈(Calendar·Diet·Hiking·Home·Onboarding·Running·Settings·Supplements·Timer·WorkoutLog)을 두었습니다. UIKit + SnapKit, RxSwift/RxRelay/RxDataSources, Then, GRDB 6.29.3, Clean Architecture 기반이며, 토스 증권탭 스타일의 클린·카드 중심 UI에 시스템 탭바를 무력화하고 그 위에 전용 플로팅 탭바(BBTabBar)를 띄웠습니다.
질문 & 답변
궁금한 점을 남겨주세요 — GitHub 로그인이 필요해요.