Spring Boot를 공부하며 진행한 개인 프로젝트입니다. 사용자는 영화와 관련된 정보를 검색하고, 영화에 평점을 포함하여 리뷰를 남길 수 있으며, 리뷰에 좋아요를 표시할 수 있습니다. Spring Security와 JWT를 이용하여 인증 및 인가 프로세스를 구현하였습니다. 또, SpringDoc을 사용하여 Swagger 페이지를 통해 API 명세를 확인할 수 있도록 하였습니다.
👤 개인 프로젝트
📅 2025.05.20 - 2025.05.28
- JAVA
17 - Spring Boot
3.4.5, Spring Data JPA3.4.5, Spring Security6.4.5, JWT (JJWT0.11.5) - H2
2.3.232, Redis3.4.5 - JUnit5
5.11.4, Mockito5.14.2 - SpringDoc
2.8.8
-
사용자 인증 및 권한 관리 (JWT + Spring Security)
- 회원가입, 로그인, 로그아웃 기능 구현
- Access Token / Refresh Token을 통한 인증 시스템 구축
- Spring Security 필터 커스터마이징으로 요청별 인증 처리
BCryptPasswordEncoder를 사용하여 비밀번호를 암호화하여 DB에 저장
-
영화/배우/감독 정보 CRUD + 검색 + 페이징 기능
- 영화/배우/감독 등 주요 항목에 대해 등록, 수정, 삭제, 검색 기능 구현
- 영화:배우(N:N), 영화:감독(N:1) 데이터 매핑
- Spring Data JPA를 통해 CRUD 처리 및 유효성 검증 적용
Pageable을 사용하여 리스트 형태로 반환되는 요청들에 페이지네이션 적용
-
영화 리뷰 및 평점 시스템
- 사용자는 영화에 대해 평점을 포함한 리뷰 작성 가능
- 영화 조회 시 평균 평점 확인 가능
- 사용자는 리뷰에 대해 좋아요 표시/취소 가능
- 영화 상세 조회 시 평균 평점 및 좋아요 순 상위 3개 리뷰 확인 가능
- 평점은 0.5점~5점으로, 0.5점 단위로 입력 가능하도록 Validation 처리 추가
Pageable을 사용하여 리스트 형태로 반환되는 요청들에 페이지네이션 적용
-
Redis 기반 Refresh Token 저장 및 재발급
- Refresh Token은 Redis에 저장하고 만료 시간 설정
- Access Token 만료 시, 특정 에러를 반환하여 refresh를 요청하도록 구현
- Refresh Token은 Redis TTL 기반으로 자동 만료
- Token Blacklist 방식으로 로그아웃 기능 구현
-
응답 공통 포맷 적용
ResponseBodyAdvice인터페이스를 구현하여 모든 성공 응답을{ success, status, data, timestamp }형태로 래핑- 에러 발생 시 응답을
{ success, status, code, reason, timestamp, path }형태로 래핑 @ExceptionHandler등을 사용하여 전역 예외 처리- 에러 발생 원인(e.g.,
USER_NOT_FOUND)을 특정하여 커스텀 에러 코드 및 메시지로 응답
-
SpringDoc 기반 Swagger 문서 자동화
springdoc-openapi를 사용하여 API 명세 자동 생성OperationCustomizer를 활용하여 실제 응답 포맷 구조로 Swagger 응답 스키마 재정의


