
영화 시리즈 스트리밍을 위한 구독 서비스 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로 변경 (쿼리문에 따른 유지보수가 불편하여 변경)
너무 도움됐습니다!!!!
혹시 깃허브 주소 공유가능 하실까요??