/VITA

🍋[건강한 일상을 위한 나만의 스마트 헬스 리포트 플랫폼]🍋 스마트 헬스 리포트 비타는 스마트 워치로부터 수집한 건강 데이터를 보다 잘 파악할 수 있도록 도와줍니다.

Primary LanguageVue

🍋 VITA 🍋

건강한 일상을 위한 나만의 스마트 헬스 리포트 플랫폼

Untitled





😀 프로젝트 소개 😀


✏ 프로젝트명

  • VITA(비타)

💖 서비스 소개

  • 스마트 워치는 언제 어디서나 당신의 일상을 추적하고 기록합니다. 자신에 대해 더 많이 알수록 적절히 대처할 수 있는 힘도 커지는 법이죠. 스마트 헬스 리포트 비타는 스마트 워치로부터 수집한 건강 데이터를 보다 잘 파악할 수 있도록 도와줍니다.

    건강 상태를 일목요연하게 👀

    자신의 신체 활동을 살펴보고, 수면 패턴을 더 깊이 이해하고, 평균 심박수를 확인해보세요.

    건강 변화 추세를 정확하게 📈

    자신의 건강 데이터가 어떻게 변화해왔는지 그래프로 보여줍니다. 스마트 워치를 처음 착용한 순간부터 지금까지 수집된 모든 건강 기록을 한 눈에 확인할 수 있습니다.

    나 뿐만 아니라 내 친구들까지 한눈에 👬

    시각화된 나의 건강 데이터를 혼자만 보면 재미 없죠. 친구를 맺은 다른 사용자들과 나의 데이터를 하나의 차트로 비교할 수 있고, 랭킹도 표시합니다.

✨ 서비스 특징

  • 스마트 워치로 수집한 건강 빅데이터를 사용자가 업로드 시, 이를 분산 처리해 나만의 헬스 리포트로 시각화
  • 갤럭시 워치와 애플 워치 사용자 간 기기 제약 없는 데이터 비교 가능

👤 서비스 대상

  • 나의 데이터를 분석해 건강관리를 하고 싶은 스마트 워치 사용자

☝🏻 주요 기능

  • 헬스 리포트
  • 랭킹 시스템
  • 히스토리

🎠 배포 환경

🗓 진행 일정

  • 23.02.20 ~ 23.04.07 (총 6주)

🚩 프로젝트 요약

Application Domain Language Framework
✅ Desktop Web 🔲 AI ✅ JavaScript ✅ Vue.js
🔲 Mobile Web ✅ Big Data 🔲 TypeScript 🔲 React
🔲 Responsive Web 🔲 Blockchain 🔲 C/C++ 🔲 Angular
🔲 Android App 🔲 IoT 🔲 C# 🔲 Node.js
🔲 iOS App 🔲 AR/VR/Metaverse ✅ Python ✅ Flask/Django
🔲 Desktop App 🔲 Game ✅ Java ✅ Spring/Springboot


👨 팀 소개 - 🍋비타오백🍋

차현경 김아영 김진호 박서윤 이강윤
Untitled Untitled Untitled Untitled Untitled






📢 주요 기능 📢

헬스 리포트

  • 스마트 워치에서 수집된 사용자의 건강 빅데이터를 분석해 시각화
  • 한 페이지에 담긴 나의 헬스 리포트를 pdf로 추출
  • 사용자가 휴대폰에서 .zip 파일 형태로 다운로드 받은 자신의 건강 데이터 업로드 시 자동 프로세싱 후 분석

1️⃣ MyData

  • 스마트 워치로 수집한 주요 건강 지표인 체중, 걸음수, 활동에너지, 심박변이, 수면 데이터를 다양한 그래프로 시각화
  • 분석한 데이터를 기반으로 종합 건강 점수, 건강 지표별 개별 건강 점수를 부여
  • 일별, 주별, 월별 단위로 그래프 기간 설정 가능
  • 현재 데이터를 과거와 비교해 나의 건강 변화 추세 확인

HealthReportMyData.gif

2️⃣ Friend

  • 갤럭시 워치, 애플 워치 기종에 상관 없는 데이터 비교 가능
  • 친구들을 선택한 후 비교하기 버튼 클릭 시 나와 친구들의 데이터를 하나의 그래프로 비교 가능
  • 각 건강 지표별 랭킹 기능 제공

HealthReportFriend2.gif

3️⃣ People

  • 통계 자료VITA 유저들의 데이터에 기반한 평균값을 기준으로 나의 건강 데이터 비교
  • 전체 or 나의 연령 & 성별에 기반한 맞춤형 비교

HealthReportPeople2.gif

4️⃣ PDF 다운로드

  • 한 페이지에 담긴 나의 헬스 리포트 PDF로 추출
  • 저장된 PDF는 자동으로 마이페이지 > 히스토리에 기록

PdfDownload.gif



랭킹 시스템

  • 친구로 등록된 다른 사용자들과 나의 종합 점수를 기반으로 랭킹 부여

FriendRank.gif



마이 페이지

  • 사용자의 휴대폰으로부터 추출한 건강 데이터 파일 업로드
  • PDF로 추출한 나의 헬스 리포트 기록 모아보기
  • 추출한 날짜와 달력을 연동하여 날짜별 히스토리 기록 확인
  • 출석, 데이터 입력 횟수, 종합 건강 점수를 기준으로 한 뱃지를 제공

MyPage.gif





🔧 기술 스택 🔧

[ Backend ]
- Java 11
- MySQL `8.0.30`
- SpringBoot `2.7.9`
- Spring Data JPA `2.7.9`
- Gradle `7.5`
- Lombok `1.18.26`
- Swagger `2.9.2`
- Spring Security `2.7.9`
- JWT `0.11.2`
- Python `3.10.10`
- Spark `3.2.1`

[ Frontend ]
- npm `9.5.0`
- node `18.15.0`
- vue `5.0.8`
- vuex `3.6.2`
- bootstrap `5.2.3`
- bootstrap-vue `2.23.1`
- amchart `5.3.7`
- apexchart `1.6.2`
- html2canvas `1.4.1`
- wijmo `5.20222.877`
- vue-carousel-3d `1.0.1`
- v-calendar `2.4.1`

[ DB ]
- MySQL `8.0.30`

[ BigData ]
- Python `3.10.10`
- Flask `2.2.3`
- pyspark `3.3.2`

[ DevOps ]
- Docker
- Nginx
- Jenkins
- AWS EC2

[ Storage ]
- S3 Bucket

[ IDE ]
- IntelliJ
- VSCode

[ Team Collaboration Tool ]
- GitLab
- Notion
- JIRA
- MatterMost
- Webex




💥 아키텍처 💥

시스템아키텍처.png





💾 ERD 💾

ERD.png






와이어프레임.jpg





📜 API 명세서 📜

API명세서_캡쳐.png





📁 디렉토리 구조 📁

Frontend

**[ Front ]**
├─build
│  ├─badge
│  ├─css
│  ├─img
│  ├─js
│  ├─main
│  ├─upload-guide
│  ├─user
│  ├─user-avatar
│  ├─wearable
│  └─wearable-friend
├─config
├─public
│  ├─badge
│  ├─main
│  ├─upload-guide
│  ├─user
│  ├─user-avatar
│  ├─wearable
│  └─wearable-friend
└─src
    ├─api
    ├─assets
    ├─components
    │  ├─common
    │  ├─friend
    │  ├─user
    │  │  └─oauth
    │  ├─wearable
    │  ├─wearable_api
    │  └─wearable_friend
    ├─router
    ├─store
    │  └─modules
    └─views
        ├─friend
        ├─mypage
        └─wearable

Backend

**[ User ]**
├─.gradle
│  └─7.6.1
│      └─vcsMetadata
├─gradle
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─ssafy
    │  │          └─vitauser
    │  │              ├─common
    │  │              ├─config
    │  │              │  ├─properties
    │  │              │  └─security
    │  │              ├─controller
    │  │              │  ├─auth
    │  │              │  ├─mypage
    │  │              │  └─user
    │  │              ├─dto
    │  │              │  └─mypage
    │  │              ├─entity
    │  │              │  ├─auth
    │  │              │  └─user
    │  │              ├─oauth
    │  │              │  ├─entity
    │  │              │  ├─exception
    │  │              │  ├─filter
    │  │              │  ├─handler
    │  │              │  ├─info
    │  │              │  │  └─impl
    │  │              │  ├─repository
    │  │              │  ├─service
    │  │              │  └─token
    │  │              ├─repository
    │  │              │  └─mypage
    │  │              ├─service
    │  │              │  └─mypage
    │  │              └─util
    │  └─resources
    └─test
        └─java
            └─com
                └─ssafy
                    └─vitauser
**[ Friend ]**
├─.gradle
│  └─7.6.1
│      └─vcsMetadata
├─gradle
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─ssafy
    │  │          └─vitafriend
    │  │              ├─config
    │  │              ├─controller
    │  │              ├─dto
    │  │              ├─entity
    │  │              ├─repository
    │  │              ├─service
    │  │              └─util
    │  └─resources
    └─test
        └─java
            └─com
                └─ssafy
                    └─vitafriend
**[ Wearable ]**
├─.gradle
│  ├─7.6.1
│  │  ├─checksums
│  │  ├─dependencies-accessors
│  │  ├─executionHistory
│  │  ├─fileChanges
│  │  └─fileHashes
│  ├─buildOutputCleanup
│  └─vcs-1
├─.idea
│  └─modules
├─build
│  ├─classes
│  │  └─java
│  │      └─main
│  │          └─com
│  │              └─ssafy
│  │                  └─vitawearable
│  │                      ├─config
│  │                      ├─controller
│  │                      ├─dto
│  │                      │  ├─Energy
│  │                      │  ├─pdf
│  │                      │  ├─Rhr
│  │                      │  ├─Sleep
│  │                      │  ├─Step
│  │                      │  ├─Stress
│  │                      │  └─Weight
│  │                      ├─entity
│  │                      │  └─oauth
│  │                      ├─repo
│  │                      ├─service
│  │                      └─util
│  ├─resources
│  │  └─main
│  └─tmp
│      └─compileJava
├─gradle
│  └─wrapper
├─out
│  └─production
│      └─resources
└─src
    └─main
        ├─java
        │  └─com
        │      └─ssafy
        │          └─vitawearable
        │              ├─config
        │              ├─controller
        │              ├─dto
        │              │  ├─Energy
        │              │  ├─pdf
        │              │  ├─Rhr
        │              │  ├─Sleep
        │              │  ├─Step
        │              │  ├─Stress
        │              │  └─Weight
        │              ├─entity
        │              │  └─oauth
        │              ├─repo
        │              ├─service
        │              └─util
        └─resources
**[ Spark ]**
├─gradle
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─ssafy
    │  │          └─vitabigdata
    │  │              ├─config
    │  │              ├─controller
    │  │              └─service
    │  └─resources
    └─test
        └─java
            └─com
                └─ssafy
                    └─vitabigdata
**[ Api-Gateway ]**
├─.gradle
│  └─7.6.1
│      └─vcsMetadata
├─gradle
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─ssafy
    │  │          └─apigateway
    │  └─resources
    └─test
        └─java
            └─com
                └─ssafy
                    └─apigateway