스터디 모집과 취업 준비생을 위한 커뮤니티 플랫폼입니다.
Spring Boot 기반 MVC 패턴으로 제작되었으며, 회원 관리, 스터디 기능, 게시판, 관리자 기능까지 포함합니다.
| 항목 | 내용 |
|---|---|
| 프로젝트명 | StudyHub |
| 목적 | 스터디 모집 및 취준생 커뮤니티 서비스 |
| 대상 | 백엔드 개발 취업용 포트폴리오 |
| 기술 스택 | Java 17, Spring Boot 3.5, Spring Security 6.2, JPA/Hibernate, MySQL/H2, Thymeleaf, Gradle |
| 클라우드 서비스 | Cloudinary (이미지 업로드) |
| 배포 환경 | AWS EC2 |
- 회원가입/로그인/로그아웃
- 사용자명 기반 로그인 시스템
- BCrypt 비밀번호 암호화
- Spring Security 기반 인증/인가
- 학력 정보 관리
- 학력 상태: 고등학교 졸업, 재학중, 졸업, 중퇴, 휴학
- 대학교명, 전공 정보 등록
- 이메일은 선택사항 (연락처용)
- 사용자 차단 기능
- 관리자가 사용자 차단/차단해제 가능
- 차단된 사용자는 서비스 이용 제한
- 스터디 개설/수정/삭제
- 스터디 제목, 설명, 모집 인원 제한
- 모집 조건 (전공, 학교, 기타 조건)
- 모집 마감일 설정
- 스터디장만 수정/삭제 가능
- 스터디 신청/승인 시스템
- 사용자별 스터디 신청 (중복 신청 방지)
- 신청 상태: 대기중, 승인됨, 거절됨
- 스터디장이 신청자 승인/거절 처리
- 승인된 멤버만 댓글 작성 가능
- 스터디 검색 및 목록
- 제목 키워드 검색
- 페이징 처리
- 최신순 정렬
- 활성 스터디 (마감일 미도과) 필터링
- 게시글 관리
- 게시글 작성, 수정, 삭제
- 조회수 자동 증가
- 공지글 기능
- 댓글 시스템
- 댓글 작성, 삭제
- 댓글 작성자/관리자만 삭제 가능
- 추천/비추천 시스템
- 사용자별 추천/비추천 (중복 방지)
- 추천/비추천 취소 및 변경 가능
- 실시간 추천/비추천 수 업데이트
- 신고 시스템
- 게시글, 댓글, 사용자 신고
- 신고 사유: 스팸, 부적절한 내용, 괴롭힘, 저작권 침해, 기타
- 신고 상태: 대기중, 승인, 거부, 처리완료
- Cloudinary 연동
- 이미지 파일 업로드
- 썸네일, 이력서 등 파일 관리
- 환경변수 기반 설정
- 대시보드
- 전체 통계: 사용자 수, 게시글 수, 댓글 수, 스터디 수, 신고 수
- 차단된 사용자 수
- 최근 신고 내역
- 사용자 관리
- 전체 사용자 목록 조회
- 사용자 차단/차단해제
- 관리자 계정 보호 (차단 불가)
- 콘텐츠 관리
- 게시글 삭제
- 댓글 삭제
- 신고 처리
- Spring Boot 3.5: 메인 프레임워크
- Spring Security 6.2: 인증/인가, 폼 로그인
- Spring Data JPA: ORM 및 데이터 접근
- Hibernate: JPA 구현체
- BCrypt: 비밀번호 암호화
- Thymeleaf: 서버사이드 템플릿 엔진
- 개발/테스트: H2 (인메모리)
- 운영: MySQL 8.0
- JPA 설정:
- 개발:
create-drop(테이블 재생성) - 운영:
update(스키마 자동 업데이트)
- 개발:
- Spring Security: URL별 접근 권한 설정
- CSRF: 개발환경에서 비활성화 (운영환경에서 활성화 필요)
- 세션 기반 인증:
- H2 콘솔: 개발환경에서 접근 허용
- Cloudinary: 이미지 업로드 및 관리
- 환경변수: API 키, 클라우드명, 시크릿 관리
- 사용자 인증 시스템 (회원가입/로그인/로그아웃)
- 스터디 CRUD 및 신청/승인 시스템
- 커뮤니티 게시판 (게시글/댓글/추천)
- 신고 시스템
- 관리자 대시보드 및 사용자 관리
- 이미지 업로드 (Cloudinary)
- Spring Security 설정
- 통합 테스트 및 단위 테스트
- 스터디 검색 기능
- AWS EC2 배포
- API 문서화 (Swagger/OpenAPI)
- 코드 품질 개선
- JWT 인증 방식 추가
- 페이징 처리
- CI/CD 파이프라인 구축
- REST API 확장
StudyHub는 SpringDoc OpenAPI를 사용하여 REST API를 문서화했습니다.
- SpringDoc OpenAPI 2.8.9: API 문서화 라이브러리
- 로컬 개발 환경: http://localhost:8080/swagger-ui/index.html
- 배포 환경: http://studyhub-env.eba-mhqi3ikj.ap-northeast-2.elasticbeanstalk.com/swagger-ui/index.html
GET /admin/dashboard/recent-reports- 최근 신고 내역 조회GET /admin/dashboard/stats- 대시보드 통계 조회
GET /admin/reports/api- 신고 목록 조회GET /admin/reports/api/{reportId}- 특정 신고 상세 조회POST /admin/reports/api/{reportId}/resolve- 신고 처리GET /admin/reports/api/stats- 신고 통계 조회
GET /admin/users/api- 사용자 목록 조회GET /admin/users/api/{id}- 특정 사용자 상세 조회POST /admin/users/api/{id}/unblock- 사용자 차단 해제POST /admin/users/api/{userId}/block- 사용자 차단GET /admin/users/api/list- 사용자 목록 (페이징)
POST /community/comment/{commentId}/delete- 댓글 삭제
PUT /studies/{studyId}/comments/{commentId}- 스터디 댓글 수정DELETE /studies/{studyId}/comments/{commentId}- 스터디 댓글 삭제
POST /api/images/upload- 이미지 파일 업로드
- DLST316 (GitHub)
이 프로젝트는 개인 포트폴리오 목적으로 제작되었습니다.