Skip to content

Team9994/commitbody-back

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

670 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CommitBody 백엔드

소셜 피트니스 커뮤니티 CommitBody의 백엔드 서버입니다. 사용자는 운동 인증(이미지 중심)과 정보/질문 게시글을 작성하고, 팔로우·좋아요·댓글·알림 등의 소셜 기능을 이용할 수 있습니다. 서버는 JWT 기반 인증과 Redis, Elasticsearch, AWS S3, Firebase 등을 활용하여 확장성과 실시간성을 고려해 설계되었습니다.

한눈에 보기

영역 핵심 기능 관련 패키지(예시)
회원/인증 소셜·일반 로그인, JWT 발급/검증/갱신, 로그아웃, 차단, 권한 domain.Member, global.security, global.authorization
게시글 운동 인증 이미지, 정보/질문, 공개 범위, 멀티파트 업로드 domain.article
소셜 댓글 CRUD, 좋아요 토글, 팔로우/언팔로우 domain.comment, domain.like, domain.follow
운동/루틴/기록 운동 데이터(ES 연동), 루틴, 개인 기록 domain.exercise, domain.routine, domain.record
알림 Firebase 푸시 알림 전송 global.notification
검색/인덱싱 Elasticsearch 기반 색인/검색 대비 domain.exercise, domain.article, global.redis
운영/문서화 Swagger UI, Actuator, 스케줄링 global.config, CommitBodyApplication

주요 기능

  • 회원/인증
    • 소셜·일반 로그인을 포괄하는 회원 도메인 구성 (예: LoginType, Member)
    • JWT 발급·검증·갱신, 로그아웃 처리 및 차단(블락) 사용자 제어
    • 권한(ROLE_USER) 기반 API 접근 제어
  • 게시글(Article)
    • 운동 인증(이미지) 및 정보/질문 타입 지원 (ArticleType, ArticleCategory)
    • 멀티파트 업로드(이미지) → S3 저장, 공개 범위(visibility) 관리
    • 프로필별 작성 글 페이지네이션(무한 스크롤 형태) 조회
  • 댓글/좋아요/팔로우
    • 게시글/운동 댓글 CRUD, 좋아요 토글, 팔로우/언팔로우
  • 운동/루틴/기록
    • 운동 데이터(Elasticsearch 연동), 루틴 관리, 개인 기록 관리
    • 배치/스케줄링 기반 주기 작업 처리 (@EnableScheduling)
  • 알림
    • Firebase 기반 푸시 알림 전송
  • 검색/인덱싱
    • Elasticsearch를 활용한 검색/추천 시나리오 대비 (docker-compose 제공)
  • 운영/문서화
    • Springdoc OpenAPI(Swagger UI), Actuator 헬스/메트릭

기술 스택 (표)

분류 기술 버전 비고
Language Java 17 Gradle Toolchain
Framework Spring Boot 3.2.8 Web, Security, Validation, Data JPA, AOP, Batch, Actuator, Thymeleaf
ORM JPA + QueryDSL 5.0.0 querydsl-jpa:5.0.0:jakarta
Database MySQL 8.x 운영 DB (mysql-connector-j)
In-memory DB H2 2.x 테스트/로컬
Cache Redis - spring-boot-starter-data-redis
Search Elasticsearch 8.7.1 docker-compose 이미지 기준
Auth JWT java-jwt 4.4.0 / nimbus-jose-jwt 9.15 Access/Refresh 토큰
Storage AWS S3 - spring-cloud-starter-aws 2.2.6.RELEASE
Docs springdoc-openapi 2.2.0 Swagger UI 제공
Push Firebase Admin SDK 9.2.0 푸시 알림
Build Gradle - 래퍼 포함

보안/인증 흐름

  • 무상태(Stateless) 인증: 세션 미사용, JWT로 인증
  • JwtAuthenticationFilter가 토큰을 검증하고 SecurityContext에 주체 저장
  • ExceptionFilter로 시큐리티 단계 예외 일괄 처리
  • 화이트리스트: /api/v1/auth, /v3/api-docs/, /api/v1/swagger-ui/, /api/v1/scheduled/** 등
  • 그 외 /api/v1/** 경로는 ROLE_USER 권한 필요

화이트리스트 및 권한 표

아래 표는 SecurityConfig의 설정(permitAll vs 인증 필요)을 요약합니다.

패턴 접근 설명
/api/v1/auth Public 로그인/회원가입 엔드포인트 집합
/api/v1/auth-refresh Public 토큰 갱신
/api/v1/logout Public 로그아웃
/api/v1/scheduled/** Public 스케줄링 관련 공개 엔드포인트
/api/v1/swagger-ui/**, /api/v1/swagger-ui.html Public Swagger UI
/v3/api-docs/, /api-docs/ Public OpenAPI 문서
/actuator/** Public 헬스/메트릭
/api/v1/admin/* Public 관리용 공개 엔드포인트(구성에 따라 변경 가능)
/test Public 테스트용
/api/v1/** (그 외) ROLE_USER 그 외 API는 인증 필요

엔드포인트 안내(발췌)

아래는 대표 엔드포인트 일부입니다. 전체 스키마는 Swagger UI에서 확인하세요.

Method Path Auth 설명
POST /api/v1/auth Public 로그인/회원가입
POST /api/v1/auth-refresh Public 토큰 갱신
POST /api/v1/logout Public 로그아웃 처리
POST /api/v1/article ROLE_USER 게시글 등록 (multipart: 본문 JSON + 파일)
GET /api/v1/article/{articleId} ROLE_USER 게시글 상세 조회
GET /api/v1/my-page/articles/{memberId}?type=...&lastId&size=12 ROLE_USER 프로필별 게시글 목록
PUT/PATCH /api/v1/article/{articleId} ROLE_USER 게시글 수정
DELETE /api/v1/article/{articleId} ROLE_USER 게시글 삭제
GET /actuator/health Public 헬스 체크
GET /api/v1/swagger-ui/index.html Public Swagger UI

정확한 파라미터·응답 스키마는 Swagger UI에서 확인하세요.

디렉터리 구조(요약)

  • src/main/java/team9499/commitbody
    • domain/* — 도메인별 패키지(Article, Exercise, Member, Follow, Like, Comment, Routine, Record 등)
      • controller, service, repository, dto, domain(엔티티)
    • global/* — 공통(보안/설정/유틸/페이로드/레디스/알림 등)
      • config(Security/Cors), security(필터/EntryPoint/AccessDenied), authorization, notification, redis, payload, utils
  • src/main/resources — application-.yml, static, templates, firebase/
  • 루트 — build.gradle, docker-compose.yml(Elasticsearch 로컬용)

빠른 시작(로컬)

사전 요구사항: Java 17, Gradle, (선택) Docker

  1. 설정 준비

src/main/resources/application.yml 또는 프로필별 application-*.yml에 다음 예시를 참고해 값을 채웁니다.

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/commitbody
    username: root
    password: your-password
  jpa:
    hibernate:
      ddl-auto: update
  data:
    redis:
      host: localhost
      port: 6379
    elasticsearch:
      uris: http://localhost:9200

jwt:
  secret: your-jwt-secret
  access-token-exp: 3600
  refresh-token-exp: 1209600

cloud:
  aws:
    s3:
      bucket: your-bucket
    credentials:
      access-key: your-access-key
      secret-key: your-secret-key
    region:
      static: ap-northeast-2

firebase:
  config-path: classpath:firebase/service-account.json
  1. (선택) Elasticsearch 로컬 기동
docker compose up -d
  1. 애플리케이션 실행

macOS/Linux

./gradlew bootRun

Windows

gradlew.bat bootRun
  1. API 문서 접속

환경 변수/설정 키 표

Property 설명 예시
spring.datasource.url MySQL 연결 URL jdbc:mysql://localhost:3306/commitbody
spring.datasource.username DB 사용자 root
spring.datasource.password DB 비밀번호 your-password
spring.data.redis.host Redis 호스트 localhost
spring.data.redis.port Redis 포트 6379
spring.data.elasticsearch.uris ES 접속 URI http://localhost:9200
jwt.secret JWT 서명 키 your-jwt-secret
jwt.access-token-exp Access 만료(초) 3600
jwt.refresh-token-exp Refresh 만료(초) 1209600
cloud.aws.s3.bucket S3 버킷명 your-bucket
cloud.aws.credentials.access-key AWS 액세스 키 your-access-key
cloud.aws.credentials.secret-key AWS 시크릿 키 your-secret-key
cloud.aws.region.static 리전 ap-northeast-2
firebase.config-path Firebase 서비스 계정 경로 classpath:firebase/service-account.json

빌드/실행 요약 표

작업 macOS / Linux Windows
의존성 다운로드/빌드 ./gradlew build gradlew.bat build
테스트 실행 ./gradlew test gradlew.bat test
애플리케이션 실행 ./gradlew bootRun gradlew.bat bootRun
ES 기동(선택) docker compose up -d docker compose up -d

개발/테스트

  • 테스트: JUnit + Spring Security Test, H2 포함
  • Actuator: /actuator/** 헬스/메트릭 확인
  • Swagger 예시 응답으로 클라이언트와의 스펙 합의 용이

기본값/정책 표

항목 출처/비고
프로필 게시글 페이지 사이즈 12 @PageableDefault(size = 12)
인증 방식 Stateless JWT SecurityConfig
CORS Origin * 모든 오리진 허용(AllowedOriginPatterns)
허용 메서드 HEAD, POST, GET, DELETE, PUT SecurityConfig
CSRF Disabled CookieCsrfTokenRepository 설정 후 disable

배포/운영 고려 사항

  • 무상태 서버 구조로 수평 확장 용이
  • Redis로 토큰 블랙리스트/세션성 데이터 관리
  • S3로 이미지 저장 및 CDN 연동 권장
  • Elasticsearch는 매니지드 클러스터 또는 VPC 내 배포 권장

라이선스/기여

  • 내부 프로젝트 기준. 외부 공개 시 라이선스 명시 필요
  • 이슈/PR 템플릿 도입 권장

— 본 문서는 현재 코드베이스(컨트롤러/설정/Gradle 의존성 등)에 기반하여 작성되었습니다. 보완할 내용(정확한 엔드포인트, 환경 변수 키 등)이 있다면 이슈로 알려주세요.

About

This project commitbody-backEnd API Server

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages