Skip to content

YongLeeCode/HealthChallenge-BACK

Repository files navigation

Health Challenge

"지금 여기있는 사람들 모두 다들 내 근육이 신경쓰이겠지?", "이 헬스장에서 내가 가장 강하다!", "나 정도면 대한민국 1%?" 운동을 한 사람들은 자신이 등급이 어느정도인지 궁금하지 않을까?라는 생각으로 만들었습니다.

매주 랜덤으로 제공되는 운동을 하면서 친구와 전세계 사람들과 함께 자신의 근육 랭킹을 측정하는 앱.


기술 스택 (Tech Stack)

  • 언어: Java 17
  • 프레임워크: Spring Boot 3.x
  • 데이터베이스: MySQL (Docker), Redis (캐싱, 랭킹)
  • ORM: Spring Data JPA
  • 인증/보안: Spring Security, JWT
  • 메시지 브로커: Apache Kafka
  • 배포/인프라: AWS EC2, AWS S3, AWS RDS, Docker
  • CI/CD: Git, GitHub Actions
  • 테스트: JUnit 5, Mockito, JMeter

개발 환경 설정

Docker 컨테이너 실행

# MySQL, Redis 컨테이너 실행
docker-compose up -d

# 컨테이너 상태 확인
docker-compose ps

환경변수 설정

.env 파일을 생성하고 다음 내용을 추가:

DB_USERNAME=yong311
DB_PASSWORD=yong311
DB_URL=jdbc:mysql://localhost:3306/health_challenge?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC

애플리케이션 실행

API 테스트

  • 서버 주소: http://localhost:8083
  • 회원가입: POST /api/auth/signup
  • 로그인: POST /api/auth/login
  • 로그아웃: POST /api/auth/signout

주요 기능

ERD

ERD https://www.erdcloud.com/d/GhhXe2X8A2ggRpq38

필수 주요 기능

  • 회원 관리: 이메일/비밀번호 회원가입, 로그인, 로그아웃, 비밀번호 초기화, 프로필 관리(닉네임, 신체 정보, 목표)
  • 운동 도메인: 운동(Exercise) 카탈로그, 운동별 난이도/근육군, 세트/반복/무게 입력 규칙
  • 운동 기록: 사용자 개인 운동 기록 생성/수정/삭제, 세트 단위 기록, 일/주/월 단위 요약
  • 주간 챌린지: 매주 랜덤/사전 정의된 운동 세트 제공, 시작/마감 시간, 참여 상태 관리
  • 챌린지 제출: 주간 과제 수행 결과 제출(세트/반복/무게/시간 등), 증빙 미디어 업로드(S3)
  • 스코어링: 제출 데이터 → 점수 산출 로직, 운동 난이도/볼륨 기반 가중치, 동점 처리 규칙
  • 랭킹/리더보드: 전세계/친구/지역별 랭킹, 일/주/시즌 단위 보드, Redis ZSET 기반 캐싱
  • 친구/팔로우: 사용자 검색, 팔로우/언팔로우, 친구 전용 랭킹/피드
  • 알림: 챌린지 시작/마감, 랭킹 변동, 친구 활동 알림(Kafka 이벤트 기반 비동기 처리)
  • 뱃지/업적: 누적 볼륨/연속 참여/개인 최고기록 등 조건 충족 시 뱃지 지급, 프로필 표시
  • 시즌/통계: 시즌 관리(시작/종료), 개인/글로벌 통계(최다 세트, 최대 중량, 참여율 등)
  • 관리자 기능: 운동/챌린지 관리, 사용자 제재/신고 처리, 점수 규칙/가중치 설정
  • 보안/인증: JWT 기반 인증/인가, 역할(Role) 관리, API Rate Limiting
  • 성능/확장성: 캐싱, 비동기 처리, 파티셔닝 고려(랭킹/이벤트), 대량 조회 최적화

세부 테이블/관계는 상단 ERD 이미지를 참고하세요. 실제 구현 시 엔티티 이름과 필드가 다를 수 있습니다.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages