운동·식단·신체변화를 하나로 기록하고 목표를 달성하는 iOS 헬스 트래킹 앱
| 홈 대시보드 | 운동 기록 | 식단 기록 | 신체 측정 | 목표 |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
| 기록 메인 | 식단 기록 상세 | 변화 분석 | 주간 회고 |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
운동 기록
식단 기록
신체 측정 & 진행 사진
목표 & 주간 회고
접근성 & UX
| 영역 | 기술 |
|---|---|
| iOS | Swift 6.0, SwiftUI, MVVM, strict concurrency (actor model) |
| Backend | Spring Boot 3.3.4, Java 21 (Virtual Threads), JPA/Hibernate, Flyway |
| DB / Cache | PostgreSQL 16, Redis 7 |
| 인증 | JWT — Access Token 24h / Refresh Token 30d, Keychain |
| 스토리지 | AWS S3 (Presigned URL, 15분 TTL) |
| 푸시 알림 | Firebase FCM |
| AI | OpenAI GPT-4.1-mini (식단 사진 분석, 영양 추정) |
| 인프라 | AWS (EC2 t3.small / RDS PostgreSQL / ElastiCache Redis / S3 / ECR) |
| IaC | Terraform, Nginx 리버스 프록시, Let’s Encrypt SSL |
| CI/CD | GitHub Actions |
| 로컬 개발 | Docker Compose (PostgreSQL + Redis + LocalStack S3) |
┌─────────────────────────────────────────────┐
│ iOS (SwiftUI) │
│ Features → ViewModel → APIClient (JWT) │
└─────────────────┬───────────────────────────┘
│ HTTPS (api.gainsy.site)
┌─────────────────▼───────────────────────────┐
│ Spring Boot API Server │
│ Controller → Service → Repository (JPA) │
│ ├── PostgreSQL 16 (영속 데이터) │
│ ├── Redis 7 (토큰 블랙리스트/캐시) │
│ └── S3 (사진 스토리지) │
└─────────────────────────────────────────────┘
상세 아키텍처는 ARCHITECTURE.md를 참고하세요.
# 1. 저장소 클론
git clone https://github.com/KimGiii/health-care.git
cd health-care
# 2. 인프라 서비스 시작 (PostgreSQL 5433 / Redis 6379 / LocalStack 4566)
cd backend
docker compose up -d
# 3. 백엔드 실행
./gradlew bootRun
# 4. iOS — Xcode에서 ios/HealthCare.xcodeproj 열기 후 시뮬레이터 실행
백엔드는 기본값이 설정되어 있어 로컬에서는 별도 설정 없이 실행 가능합니다.
프로덕션 배포 시 아래 환경 변수가 필요합니다.
| 변수 | 설명 |
|---|---|
JWT_SECRET |
JWT 서명 키 (32자 이상) |
POSTGRES_HOST / POSTGRES_DB / POSTGRES_USER / POSTGRES_PASSWORD |
데이터베이스 접속 정보 |
REDIS_HOST / REDIS_PORT |
Redis 접속 정보 |
S3_BUCKET / S3_REGION / S3_ENDPOINT |
S3 스토리지 설정 |
OPENAI_API_KEY |
식단 AI 분석용 OpenAI 키 |
PUBLIC_FOOD_API_KEY |
공공 식품 영양 데이터 API 키 |
# 백엔드 전체 테스트
cd backend && ./gradlew test
# 백엔드 빌드
cd backend && ./gradlew build
iOS 테스트는 Xcode → Product → Test (⌘U)로 실행합니다.
| 워크플로우 | 트리거 | 동작 |
|---|---|---|
ci-backend.yml |
main, dev, prod push |
빌드 + 테스트 |
ci-ios.yml |
main, dev push |
빌드 + 테스트 |
dev-to-prod.yml |
dev → prod PR merge |
프로덕션 배포 |
Terraform으로 AWS 인프라를 프로비저닝합니다.
cd infra
terraform init
terraform apply
api.gainsy.site (Route 53 + Let’s Encrypt, 자동 갱신)health-care/
├── backend/
│ └── src/main/java/com/healthcare/
│ ├── common/ # 예외, 응답 래퍼, 보안, JWT 필터
│ └── domain/
│ ├── auth/ # 로그인, 회원가입, 토큰 갱신
│ ├── user/ # 사용자 프로필
│ ├── exercise/ # 운동 세션, 세트, 카탈로그
│ ├── diet/ # 식단, 식품, AI 분석
│ ├── bodymeasurement/ # 신체 지표, 진행 사진
│ ├── goals/ # 목표 설정 및 추적
│ └── insights/ # 주간 회고, 통계
├── ios/HealthCare/
│ ├── Core/ # 네트워크(APIClient), 인증(AuthState), 저장소
│ ├── DesignSystem/ # 어댑티브 컬러 토큰, 공통 컴포넌트
│ ├── Features/ # Auth / Home / Exercise / Diet / Progress / Goals / Profile
│ └── Navigation/ # 탭 네비게이션
├── infra/ # Terraform (VPC, EC2, RDS, ElastiCache, S3, ECR)
├── docs/ # PRD, API 설계, DB 스키마, 현재 상태
├── .github/workflows/ # CI/CD 파이프라인
└── ARCHITECTURE.md
| 문서 | 내용 |
|---|---|
| 현재 상태 | 구현 진행률, 최근 변경사항 |
| 아키텍처 | 시스템 설계, 기술 결정 이유 |
| API 설계 | REST 엔드포인트 명세 |
| DB 스키마 | PostgreSQL 테이블 설계 |
| PRD | 제품 요구사항 |
| 화면 구조 | 네비게이션 및 화면 흐름 |