영화 시리즈 스트리밍을 위한 구독 서비스 REST API (Server)
참여 인원 : 서버 2명 / 프론트엔드 1명
Java
Spring Framework
Spring Boot
JUnit
MySQL
Nginx
AWS
Git/GitHub
📍 프로젝트 기술 스택 적용 과정과 선택 이유에 대한 설명은 포스팅 참조
계정(Account)
- 생성
- 회원 가입 단계 조회
- 회원 등록
- 이메일 인증
결제수단 등록- 변경
- 이메일, 비밀번호, 휴대폰번호, 멤버쉽 (개별 페이지 존재)
- 탈퇴
- 전체 회원 조회 또는 membership으로 검색 조회
- 회원 조회
- 로그인
- Jwt 로그인
- 소셜 로그인 (네이버, 카카오, 구글, 라인)
- 로그아웃
- 비밀번호 찾기
- 문자 보내기
- SMS 인증
프로필(Profile)
- 생성(1계정당 5개 가능)
- 변경
- 전체 변경 (언어,이름,자동재생설정)
- 사진 변경
- 삭제
- 회원 개별,목록 조회
비디오(Video)
- 콘텐츠 목록 조회
- TOP 10 콘텐츠 목록 조회
- 내가 찜한 콘텐츠 목록 조회
- 인기 콘텐츠 목록 조회
- 신규 콘텐츠 목록 조회
- 시청중인 콘텐츠 목록 조회
- 장르별 콘텐츠 목록 조회
- 출연자가 참여한 콘텐츠 목록 조회 (출연자 이름 클릭)
- 감독이 참여한 콘텐츠 목록 조회 (출연자 이름 클릭)
- 특징별 작품 목록 조회 (영화/시리즈 특징 클릭)
- 장르별 수상작 컨텐츠 조회 (영화/시리즈 모두)
- 최다 검색 컨텐츠 조회 (영화/시리즈 모두)
- 장르 대분류 목록 조회 (영화, 시리즈 내부 기능)
- 하나의 영화 또는 시리즈의 방영분 (회차)목록 조회
- 상세정보 조회(작품정보, 해당 작품에 속한 모든 출연자, 장르, 특징, 총망라 조회)
- 작품의 출연자 조회 (출연자 이름 클릭)
- 작품의 특징 조회 (영화/시리즈 특징 클릭)
- 상세페이지 첫화면 동영상 재생시 정보 조회
영상 시청을 위한 정보(Play)
- 생성, 변경, 조회
검색(Search)
- 검색(제목/사람/장르) 콘텐츠 목록 조회
북마크(Bookmark)
- 생성, 변경, 조회
좋아요(Assessment)
- 생성, 변경, 조회
알림(Alarm)
- 생성, 변경, 조회
기타(ETC)
- 성인인증 필요 여부 검증 조회
Spring Rest Docs 반영 예정입니다
Rest Docs | Swagger |
---|---|
테스트가 성공해야 문서작성된다. | API 를 테스트 해 볼수 있는 화면을 제공한다. |
버전 변화에 유연하고 정확성이 높다. | 버전 변화에 맞춰 재 작성이 필요하다. |
적용하기 어렵다 | 적용하기 쉽다 |
netflix-server
└─src
├─main
│ ├─java
│ │ └─com
│ │ └─example
│ │ └─demo
│ │ │ DemoApplication.java
│ │ │
│ │ ├─config
│ │ │ │ BaseException.java
│ │ │ │ BaseResponse.java
│ │ │ │ BaseResponseStatus.java
│ │ │ │ Constant.java
│ │ │ │
│ │ │ └─secret
│ │ │ Secret.java
│ │ │
│ │ ├─src
│ │ │ │ WebSecurityConfig.java
│ │ │ │
│ │ │ ├─account
│ │ │ │ │ AccountController.java
│ │ │ │ │ AccountDao.java
│ │ │ │ │ AccountProvider.java
│ │ │ │ │ AccountService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Account.java
│ │ │ │ PatchAccountReq.java
│ │ │ │ PatchPasswordReq.java
│ │ │ │ PostAccountRes.java
│ │ │ │ PostLoginReq.java
│ │ │ │
│ │ │ ├─alarm
│ │ │ │ │ AlarmController.java
│ │ │ │ │ AlarmDao.java
│ │ │ │ │ AlarmProvider.java
│ │ │ │ │ AlarmService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Alarm.java
│ │ │ │ GetAlarmRes.java
│ │ │ │ SetAlarmReq.java
│ │ │ │
│ │ │ ├─assessment
│ │ │ │ │ AssessmentController.java
│ │ │ │ │ AssessmentDao.java
│ │ │ │ │ AssessmentProvider.java
│ │ │ │ │ AssessmentService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Assessment.java
│ │ │ │
│ │ │ ├─bookmark
│ │ │ │ │ BookmarkController.java
│ │ │ │ │ BookmarkDao.java
│ │ │ │ │ BookmarkProvider.java
│ │ │ │ │ BookmarkService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Bookmark.java
│ │ │ │ BookmarkReq.java
│ │ │ │ GetBookmarkRes.java
│ │ │ │ PatchBookmarkReq.java
│ │ │ │
│ │ │ ├─category
│ │ │ │ │ CategoryController.java
│ │ │ │ │ CategoryService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ MainCategory.java
│ │ │ │
│ │ │ ├─character
│ │ │ │ │ CharacterDao.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Character.java
│ │ │ │
│ │ │ ├─email
│ │ │ │ │ EmailController.java
│ │ │ │ │ EmailService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ EmailDto.java
│ │ │ │ EmailNotificationReqDto.java
│ │ │ │ VerificationReqDto.java
│ │ │ │
│ │ │ ├─genre
│ │ │ │ │ GenreController.java
│ │ │ │ │ GenreDao.java
│ │ │ │ │ GenreProvider.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Genre.java
│ │ │ │
│ │ │ ├─googleAccount
│ │ │ │ │ ConfigUtils.java
│ │ │ │ │ GoogleAccountController.java
│ │ │ │ │ GoogleAccountDao.java
│ │ │ │ │ GoogleAccountProvider.java
│ │ │ │ │ GoogleAccountService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ GoogleAccount.java
│ │ │ │
│ │ │ ├─kakaoAccount
│ │ │ │ │ KakaoAccountController.java
│ │ │ │ │ KakaoAccountDao.java
│ │ │ │ │ KakaoAccountService.java
│ │ │ │ │ KakaoOAuth.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ KakaoAccount.java
│ │ │ │ PostKakaoAccount.java
│ │ │ │
│ │ │ ├─lineAccount
│ │ │ │ │ LineAccountController.java
│ │ │ │ │ LineAccountDao.java
│ │ │ │ │ LineAccountProvider.java
│ │ │ │ │ LineAccountService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ LineAccount.java
│ │ │ │
│ │ │ ├─naverAccount
│ │ │ │ │ NaverAccountController.java
│ │ │ │ │ NaverAccountDao.java
│ │ │ │ │ NaverAccountProvider.java
│ │ │ │ │ NaverAccountService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ NaverAccount.java
│ │ │ │
│ │ │ ├─profile
│ │ │ │ │ ProfileController.java
│ │ │ │ │ ProfileDao.java
│ │ │ │ │ ProfileProvider.java
│ │ │ │ │ ProfileService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ PatchProfileReq.java
│ │ │ │ PostProfileReq.java
│ │ │ │ PostProfileRes.java
│ │ │ │ Profile.java
│ │ │ │
│ │ │ ├─profilePhoto
│ │ │ │ │ ProfilePhotoController.java
│ │ │ │ │ ProfilePhotoDao.java
│ │ │ │ │ ProfilePhotoProvider.java
│ │ │ │ │ ProfilePhotoService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ GetProfilePhotoRes.java
│ │ │ │ PatchProfilePhotoReq.java
│ │ │ │ ProfilePhoto.java
│ │ │ │
│ │ │ ├─search
│ │ │ │ │ SearchDao.java
│ │ │ │ │ SearchProvider.java
│ │ │ │ │ SearchService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ Search.java
│ │ │ │
│ │ │ ├─sms
│ │ │ │ │ SmsController.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ MessagesReqDto.java
│ │ │ │ SendSmsResDto.java
│ │ │ │ SendVerificationNumberResDto.java
│ │ │ │ SmsRequest.java
│ │ │ │ SmsRequestDto.java
│ │ │ │ VerificationReqDto.java
│ │ │ │
│ │ │ ├─test
│ │ │ │ TestController.java
│ │ │ │
│ │ │ ├─video
│ │ │ │ │ VideoController.java
│ │ │ │ │ VideoDao.java
│ │ │ │ │ VideoProvider.java
│ │ │ │ │ VideoService.java
│ │ │ │ │
│ │ │ │ └─domain
│ │ │ │ GetVideoRes.java
│ │ │ │ Video.java
│ │ │ │ VideoContent.java
│ │ │ │ VideoDetail.java
│ │ │ │
│ │ │ └─videoPlay
│ │ │ │ VideoPlayController.java
│ │ │ │ VideoPlayDao.java
│ │ │ │ VideoPlayProvider.java
│ │ │ │ VideoPlayService.java
│ │ │ │
│ │ │ └─domain
│ │ │ VideoPlay.java
│ │ │
│ │ └─utils
│ │ AES128.java
│ │ JwtService.java
│ │ ValidationRegex.java
│ │
│ └─resources
│ application.yml
│ logback-spring.xml
│
└─test
└─java
└─com
└─example
└─demo
DemoApplicationTests.java
.gitignore
build.gradle
gradlew
gradlew.bat
README.md
settings.gradle
1. 프로젝트 마일스톤
Git
&GitHub
를 최대한 활용하여 진행하며 애자일 개발 프로세스를 경험할 수 있었습니다.Pull requests
뿐만 아니라 ISSUE
& Projects
를 활용하여 프로젝트 마일스톤을 진행하였습니다.2. 데일리 회고, 위클리 스크럼
3. 개발 일지
JdbcTemplate
대신 ORM 기반의 JPA
로 변경 (쿼리문에 따른 유지보수가 불편하여 변경)
너무 도움됐습니다!!!!
혹시 깃허브 주소 공유가능 하실까요??