Netflixプロジェクト


✨ Introduction


これは2週間のnetflixクローンプロジェクトです.
開発期間:22.03.20~22.04.01
参加者:2台のサーバー/1個のフロントエンド

📚 Architecture


添付するつもりです.
EC 2サービスでサーバを構築し,nginxをノードとする.jsフロントエンドでプロキシサーバとして使用します.
データベースはRDSから分離され、MySQLが使用されています.
EC 2をデータベースから分離する理由
開発中のコンピュータをシャットダウンすると、サーバは自動的にシャットダウンされ、クライアントもAPIを使用できなくなるため、EC 2が使用されます.さらに、データベースをRDSから分離して、複数のサーバを配備するときに1つのデータベースを共有します.

⚙ERD設計



📝 機能リスト


Netflix機能リスト
勘定科目
  • 作成
  • 会員加入段階照会
  • 会員登録
  • 電子メール認証
  • 決済手段登録
  • 変更
  • 電子メール、パスワード、携帯電話番号、メンバーシップ(個別ページあり)
  • 退出
  • 全会員照会または会員照会による
  • 会員照会
  • ログイン
  • Jwt登録
  • SNS登録(NAVER、KACA、Google、LINE)
  • ログアウト
  • パスワード検索
  • メール送信
  • SMS認証
  • プロファイル
  • 生成(1系あたり5個可)
  • 変更
  • 全て変更(言語、名称、自動再生設定)
  • 写真変更
  • 削除
  • 会員個人・カタログ照会
  • ビデオ(ビデオ)
  • コンテンツリストの表示
  • TOP 10コンテンツディレクトリ照会
  • 好きなコンテンツカタログを見る
  • 人気コンテンツカタログ照会
  • 新コンテンツディレクトリ照会
  • 閲覧中のコンテンツリストを表示する
  • コンテンツカタログをタイプ別に見る
  • 出演者が参加しているコンテンツカタログを見る(出演者名をクリック)
  • 監督が参加したコンテンツカタログを見る(出演者名をクリック)
  • 作品カタログを特徴別に閲覧(映画/シリーズの特徴をクリック)
  • 各ジャンル受賞作品内容照会(全映画/シリーズ)
  • 最大検索内容照会(映画/シリーズ)
  • ジャンル大分類カタログ照会(映画、シリーズ内部機能)
  • 1本の映画やシリーズの上映シーン(回)カタログを見る
  • 詳細情報検索(作品情報、その作品に属する出演者、ジャンル、特徴、総網羅検索)
  • 作品の出演者照会(出演者名クリック)
  • 作品特徴照会(映画/シリーズ特徴クリック)
  • トップページ動画再生時の情報照会
  • ビデオを見る(Play)
  • 作成、変更、照会
  • 検索(Search)
  • 検索(タイトル/人/タイプ)コンテンツディレクトリ
  • ブックマーク
  • 作成、変更、照会
  • いいですね(評価)
  • 作成、変更、照会
  • 通知(Alarm)
  • 作成、変更、照会
  • その他(ETC)
  • 成人認証が必要かどうかを調べる
  • 📝 APIリスト


    Spring Rest Docsが反映されます
    なぜ、RESTful APIドキュメントツールとしてSwagerとSpring Rest Docsを選択したのですか?
    文書はRest DocsSwagerテストに成功した場合にのみ生成されます.APIをテストする画面を提供します.バージョンの変化は柔軟で、正確性が高い.バージョンの変更に応じて書き直す必要があります.適用し難い

    📂 Directory Structure


    Directory Structure
    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

    📹 Postman Test Video


    動画はアップロードされていないので、Googleドライブとして添付します.

    🔍 難点


    🔍 残念なことに。


    💫 未来の発展方向

  • Jwtでログアウト
  • SNSアプリAPI
  • 独立実施異常処理文(AnnotationによるValidation処理)
  • Clean Code(Javaコード会議注意)
  • ・ORMベースに変更
  • JdbcTemplateORMベースではなくJPA
  • クエリ文、キャッシュ機能等によるパフォーマンス向上