📌 프로젝트 개요
프로젝트명: FitTracker (운동 루틴 트래커)
기간: 5일 (2025.12.09 ~ 12.12)
목표: 기획부터 배포까지 완성하는 풀스택 개인 프로젝트
기술 스택
- Backend: Java 21, Spring Boot 4.0.0, Spring Data JPA
- Database: MySQL 8.x
- Security: Spring Security + JWT
- 배포: AWS EC2 + RDS (예정)
🎯 Day 1 목표
- 프로젝트 요구사항 정의
- 데이터베이스 ERD 설계
- REST API 명세 작성
- Spring Boot 프로젝트 초기 설정
📋 핵심 기능 정의
1. 사용자 관리
- 회원가입/로그인 (JWT 인증)
- 사용자 프로필 관리
2. 운동 루틴 관리
- 운동 루틴 CRUD
- 루틴별 운동 종목 설정
- 목표 세트/횟수/무게 설정
3. 운동 기록
- 날짜별 운동 세션 기록
- 실제 수행한 세트/무게/횟수 입력
- 운동 메모 작성
4. 통계 및 분석
- 주간/월간 운동 빈도
- 신체 부위별 운동량 분석
- 무게 변화 추이 그래프
🗄️ 데이터베이스 ERD 설계
주요 테이블 구조
1. users (사용자)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
사용자 ID |
| email |
VARCHAR(100) |
이메일 (UNIQUE) |
| password |
VARCHAR(255) |
암호화된 비밀번호 |
| name |
VARCHAR(50) |
이름 |
| created_at |
TIMESTAMP |
생성일시 |
2. exercise_types (운동 종목 마스터)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
종목 ID |
| name |
VARCHAR(100) |
종목명 (벤치프레스, 스쿼트 등) |
| body_part |
VARCHAR(50) |
신체 부위 (가슴, 등, 다리 등) |
| description |
TEXT |
설명 |
3. routines (운동 루틴)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
루틴 ID |
| user_id |
BIGINT (FK) |
사용자 ID |
| name |
VARCHAR(100) |
루틴명 |
| description |
TEXT |
설명 |
| created_at |
TIMESTAMP |
생성일시 |
4. routine_exercises (루틴 내 운동 종목)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
ID |
| routine_id |
BIGINT (FK) |
루틴 ID |
| exercise_type_id |
BIGINT (FK) |
운동 종목 ID |
| target_sets |
INT |
목표 세트 수 |
| target_reps |
INT |
목표 반복 횟수 |
| target_weight |
DECIMAL(5,2) |
목표 무게 (kg) |
| order_index |
INT |
순서 |
5. workout_sessions (운동 세션)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
세션 ID |
| user_id |
BIGINT (FK) |
사용자 ID |
| routine_id |
BIGINT (FK) |
루틴 ID (nullable) |
| workout_date |
DATE |
운동 날짜 |
| duration_minutes |
INT |
운동 시간 (분) |
| notes |
TEXT |
메모 |
| created_at |
TIMESTAMP |
생성일시 |
6. workout_sets (실제 수행 세트)
| 컬럼명 |
타입 |
설명 |
| id |
BIGINT (PK) |
ID |
| workout_session_id |
BIGINT (FK) |
세션 ID |
| exercise_type_id |
BIGINT (FK) |
운동 종목 ID |
| set_number |
INT |
세트 번호 |
| reps |
INT |
실제 반복 횟수 |
| weight |
DECIMAL(5,2) |
실제 무게 (kg) |
| completed |
BOOLEAN |
완료 여부 |
🔌 REST API 설계
인증 API
POST /api/auth/signup 회원가입
POST /api/auth/login 로그인
운동 종목 API
GET /api/exercises 전체 운동 종목 조회
GET /api/exercises?bodyPart= 신체 부위별 조회
루틴 관리 API
POST /api/routines 루틴 생성
GET /api/routines 내 루틴 목록
GET /api/routines/{id} 루틴 상세 조회
PUT /api/routines/{id} 루틴 수정
DELETE /api/routines/{id} 루틴 삭제
운동 기록 API
POST /api/workouts 운동 세션 시작
POST /api/workouts/{sessionId}/sets 세트 기록
GET /api/workouts?startDate=&endDate= 기간별 조회
GET /api/workouts/{sessionId} 세션 상세
통계 API
GET /api/stats/weekly 주간 통계
GET /api/stats/body-parts 신체 부위별 통계
GET /api/stats/exercise/{id}/progress 종목별 진행도
🛠️ Spring Boot 프로젝트 초기 설정
주요 의존성
- spring-boot-starter-web
- spring-boot-starter-data-jpa
- spring-boot-starter-security
- mysql-connector-j
- jjwt (JWT 토큰)
- lombok
- spring-boot-starter-validation
application.yml 설정
spring:
datasource:
url: jdbc:mysql://localhost:3306/fittracker
username: root
password: ****
jpa:
hibernate:
ddl-auto: update
show-sql: true
jwt:
secret: ****
expiration: 86400000
프로젝트 패키지 구조
com.fittracker
├── FitTrackerApplication.java
├── config/ # Security, JWT 설정
├── domain/ # Entity 클래스
├── repository/ # JPA Repository
├── service/ # 비즈니스 로직
├── controller/ # REST Controller
├── dto/ # 요청/응답 DTO
├── security/ # JWT, 인증 관련
└── exception/ # 예외 처리
✅ Day 1 완료 내역
🚀 향후 일정
Day 2 (화요일) - 백엔드 개발 1
- Entity 클래스 작성
- Repository 계층 구현
- 기본 Service CRUD 구현
- JWT 인증 구현
Day 3 (수요일) - 백엔드 개발 2
- 나머지 Service 로직 완성
- Controller 작성
- API 테스트 (Postman)
- 통계 API 구현
Day 4 (목요일) - 테스트 및 보완
- 단위 테스트 작성
- 통합 테스트
- 버그 수정
- 간단한 프론트엔드
Day 5 (금요일) - 배포 및 문서화
- AWS 배포
- API 문서 정리
- README 작성
- 프로젝트 보고서