<aside> 💡

개인 맞춤 식단 및 운동 추천 웹 서비스

</aside>

소개


WHY

코로나19 이후 건강과 운동에 대한 관심은 폭발적으로 증가했으나, 많은 사람들이 비용, 정보 부족, 심리적 장벽으로 인해 운동 시작을 주저하고 있습니다.

기존 정보는 파편화되어 있고 개인의 몸 상태를 고려하지 않아 실질적인 도움이 되기 어렵습니다.

WHAT

DO EAT FIT은 사용자가 입력한 인바디 결과를 기반으로, 전문가(트레이너, 영양사, 의료인)가 검증한 **개인 맞춤형 운동 계획과 운동 방법과 식단 플래너를 제공**하는 건강 관리 플랫폼입니다. 건강 관리의 높은 진입 장벽을 낮추고 지속 가능한 건강 습관 형성을 돕습니다.

BM


주요 기능

구현 예정 기능

Link

Github

https://github.com/DoEatFit

WebService

https://www.doeatfit.org/

기술 스택

Programming Languages Java, JavaScript/Typescript
Frameworks SpringBoot, Next.js
Databases MySQL
NoSQL Redis
Version Control Git
Cloud Services Cloudflare
Deployment Tools Jenkins
Testing Frameworks Selenium, JUnit
API RESTful API

프로젝트 구조도

프로젝트 구조도_2509.png

ERD

erDiagram
    %% =========================================================
    %% [GROUP 1] 기존 시스템 - 회원 (User)
    %% =========================================================
    USERS {
        long user_id PK "Auto Increment"
        binary uuid "UUID (Binary 16)"
        string email "Unique"
        string password
        string name
        string nickname
        string role "ENUM: MEMBER, VIP, ADMIN"
        string gender "ENUM: MALE, FEMALE"
        date birth_date
        string provider "Social Login Provider"
        string provider_id
        datetime created_at
        datetime updated_at
    }

    %% =========================================================
    %% [GROUP 2] 신규 기능 - 회원 관리 및 알림 (Member Management)
    %% =========================================================
    
    %% [신규] 코칭 매칭 관계 (4.2)
    VIP_MEMBER_RELATION {
        long relation_id PK
        long vip_id FK "Users(Coach)"
        long member_id FK "Users(Member)"
        string status "ENUM: PENDING, ACCEPTED, REJECTED"
        datetime requested_at
        datetime matched_at
    }

    %% [신규] 알림 센터 (4.2)
    NOTIFICATION {
        long notification_id PK
        long receiver_id FK "Users"
        long sender_id FK "Users"
        string type "ENUM: REQUEST, FEEDBACK, SYSTEM"
        string content
        string related_url
        boolean is_read
        datetime created_at
    }

    USERS ||--o{ VIP_MEMBER_RELATION : "has_relations"
    USERS ||--o{ NOTIFICATION : "receives"

    %% =========================================================
    %% [GROUP 3] 기존 시스템 - 운동 기준 정보 (Workout Dictionary)
    %% WorkoutEntity.java의 @ElementCollection 물리 테이블 반영
    %% =========================================================
    WORKOUT {
        long workout_id PK
        binary uuid
        string workout_name "Unique"
        string workout_difficulty "ENUM: BEGINNER, ADVANCED"
        string media_file_name
        datetime created_at
        datetime updated_at
    }

    %% 주동근 (ElementCollection)
    AGONIST_MUSCLE_ENUMS {
        long workout_id FK
        string agonist_muscle_enums "Enum String"
    }

    %% 길항근 (ElementCollection)
    ANTAGONIST_MUSCLE_ENUMS {
        long workout_id FK
        string antagonist_muscle_enums "Enum String"
    }

    %% 협응근 (ElementCollection)
    SYNERGIST_MUSCLE_ENUMS {
        long workout_id FK
        string synergist_muscle_enums "Enum String"
    }

    %% 설명 (ElementCollection)
    DESCRIPTIONS {
        long workout_id FK
        string descriptions "Text"
    }

    WORKOUT ||--|{ AGONIST_MUSCLE_ENUMS : "has"
    WORKOUT ||--|{ ANTAGONIST_MUSCLE_ENUMS : "has"
    WORKOUT ||--|{ SYNERGIST_MUSCLE_ENUMS : "has"
    WORKOUT ||--|{ DESCRIPTIONS : "has"

    %% =========================================================
    %% [GROUP 4] 신규 기능 - 운동 일지 (Workout Log)
    %% Log -> History -> Set 구조 (4.3)
    %% =========================================================
    WORKOUT_LOG {
        long workout_log_id PK
        long user_id FK "Users"
        date date
        string target_area "ex: 가슴, 삼두"
        int total_volume
        int total_time
        int cardio_total_time
        int cardio_total_calories
        int energy_level "1~5"
        int pumping_level "1~5"
        text memo
        text feedback_content
        long feedback_writer_id FK
        datetime feedback_created_at
        datetime created_at
    }

    WORKOUT_HISTORY {
        long history_id PK
        long workout_log_id FK
        long workout_id FK "WORKOUT 테이블 참조 (Weight)"
        string workout_name_manual "Cardio용 직접 입력"
        string type "ENUM: WEIGHT, CARDIO"
        int display_order
        int duration_min "Cardio Only"
        int calories_burned "Cardio Only"
        int avg_heart_rate "Cardio Only"
    }

    WORKOUT_SET {
        long set_id PK
        long history_id FK
        int set_number
        double weight
        int reps
        boolean is_warmup
    }

    USERS ||--o{ WORKOUT_LOG : "writes"
    WORKOUT_LOG ||--o{ WORKOUT_HISTORY : "contains"
    WORKOUT ||--o{ WORKOUT_HISTORY : "defines"
    WORKOUT_HISTORY ||--o{ WORKOUT_SET : "has_sets"

    %% =========================================================
    %% [GROUP 5] 신규 기능 - 식단 일지 (Diet Log)
    %% Log -> Meal -> Food 구조 (4.4)
    %% =========================================================
    DIET_LOG {
        long diet_log_id PK
        long user_id FK "Users"
        date date
        int total_calories
        int total_protein
        int water_intake_ml
        string supplements
        int digestion_level
        int satiety_level
        text memo
        text feedback_content
        long feedback_writer_id FK
        datetime feedback_modified_at
    }

    DIET_MEAL {
        long meal_id PK
        long diet_log_id FK
        string meal_type "ENUM: BREAKFAST, LUNCH..."
        string image_url
        int meal_calories
    }

    DIET_FOOD {
        long food_id PK
        long meal_id FK
        string food_name
        double weight_g
        int calories
        int carbs
        int protein
        int fat
    }

    USERS ||--o{ DIET_LOG : "writes"
    DIET_LOG ||--o{ DIET_MEAL : "has_meals"
    DIET_MEAL ||--o{ DIET_FOOD : "contains_foods"

    %% =========================================================
    %% [GROUP 6] 신규 기능 - 컨디션 일지 (Condition Log) (4.5)
    %% =========================================================
    CONDITION_LOG {
        long condition_log_id PK
        long user_id FK "Users"
        date date
        boolean is_private
        double weight_kg
        double sleep_hours
        int sleep_quality_score "1~5"
        int stress_level "1~5"
        int bowel_condition_level "1~5"
        int libido_level "1~5"
        text injury_issue
        text feedback_content
        long feedback_writer_id FK
        datetime feedback_modified_at
    }

    USERS ||--o{ CONDITION_LOG : "writes"

    %% =========================================================
    %% [GROUP 7] 기존 시스템 - 기타 기능 (Board, Calc, Content)
    %% =========================================================
    
    %% 공지사항 (Notice)
    NOTICE {
        long notice_id PK
        long user_id FK "Users(Admin)"
        string title
        text content
        string notice_category
        int hits
        boolean fixed
        datetime created_at
        datetime updated_at
    }
    NOTICE_ATTACHMENT {
        long attachment_id PK
        long notice_id FK
        string origin_file_name
        string stored_file_path
        long file_size
    }
    USERS ||--o{ NOTICE : "writes"
    NOTICE ||--o{ NOTICE_ATTACHMENT : "has"

    %% 신고/제보 (Report)
    REPORT {
        long report_id PK
        long user_id FK "Users"
        string title
        text content
        string report_category
        string report_status
        text answer
        datetime created_at
        datetime updated_at
    }
    REPORT_ATTACHMENT {
        long attachment_id PK
        long report_id FK
        string origin_file_name
        string stored_file_path
        long file_size
    }
    USERS ||--o{ REPORT : "writes"
    REPORT ||--o{ REPORT_ATTACHMENT : "has"
    
    %% 계산기 기록 (Calculators) - 일지와 별도로 동작하는 기존 기록
    DIET_CALCULATOR {
        long diet_calculator_id PK
        long user_id FK
        string gender
        double height
        double weight
        int age
        string activity_level
        string goal
        double bmr
        double tdee
        int recommend_calories
        int recommend_carbs
        int recommend_protein
        int recommend_fat
        datetime created_at
    }
    HR_CALCULATOR {
        long hr_calculator_id PK
        long user_id FK
        int age
        int resting_hr
        int max_hr
        string goal
        string intensity
        int target_hr_min
        int target_hr_max
        datetime created_at
    }
    USERS ||--o{ DIET_CALCULATOR : "calculates"
    USERS ||--o{ HR_CALCULATOR : "calculates"

Project


설계

스토리 보드

위키


회의록

🏳️Milestone