[DevCamp]最終コードコメント

20521 ワード

目次
  • 開発者説明
  • が開発したサーバ、機能説明
  • ディレクトリ構造
  • コード説明
  • 開発者の説明
  • 韓太賢
  • 領域
  • バックエンド
  • 使用技術
  • Spring Boot-バックエンド開発はすべてSpring Bootを採用して
  • を行う
  • MySQL-
  • サービスに必要なデータを格納
  • MongoDB-
  • 充電/支払時にログを残す
  • REDIS-キャッシュとサーバ間のデータ同期のためのサービス
  • WebSocket-ユーザーの移動、入室、退場などの高速リアルタイム通信のための
  • 開発されたサーバのタイプと機能
  • チャージ、支払サーバ(支払)
  • 高カードインタフェースを使用して
  • を充電する.
  • チャージでゲーム機能
  • を購入
  • ゲームライブラリ-ロビーサーバ(library)
  • ゲームライブラリをGetheTownを参考にしてコミュニケーションできる空間にして、私が持っているゲーム空間にしたいと思っています.
  • は、ゲームオブジェクトにアクセス、移動、終了、インストールすることができる.
  • は、迅速な応答を必要とするため、純粋なWebスロットを採用しています.
  • RabbitMQを使用してサーバ間でメッセージを伝播し、
  • の迅速な応答に重点を置きます.
  • メンバーシップサーバ(メンバーシップ)
  • 友人関連機能
  • ユーザープロファイル、ルーム名簿関連機能
  • ユーザ検索機能
  • API Gateway
  • Springクラウドゲートウェイを使用して
  • を実施
  • JWT認証
  • サービス発見
  • Spring Cloud Netflix Eurekaを使用して
  • を実装
  • 負荷バランスで、複数のエンドポイントを容易に識別できます.
  • ディレクトリ構造
  • バックエンドリンク
  • +---payment # 충전, 결제 서버
    |   \---src.main.java.com.steam
    |       \---payment
    |           +---dto
    |           |   \---kakaopay # 카카오페이 API 호출을 위한 DTO 폴더
    |           |
    |           +---entity
    |           |   |   Account.java # 개발사의 계좌 Entity
    |           |   |   Giftcard.java # 충전에 사용할 상품권 Entity
    |           |   |   Library.java # 유저가 소유하고 있는 게임 Entity
    |           |   |
    |           |   +---mongodb # MongoDB를 결제, 충전에 대한 로그를 남기는 용도로 사용
    |           |   \---redis # 충전 과정에서 카카오페이 API를 사용하면서 관련 데이터를 임시 저장용으로 사용
    |           |
    |           +---global
    |           |   +---common
    |           |   |       Body.java # ResponseEntity의 ResponseBody를 공통적으로 처리하기 위한 객체 (code, message, data)
    |           |   |       UserContext.java # Spring Security를 쓰지 않고 ThreadLocal에 유저 데이터(UserDetails)를 저장하기 위한 클래스
    |           |   |       UserDetails.java # JWT Payload의 유저 정보를 담을 객체
    |           |   |
    |           |   +---error
    |           |   |       ErrorCode.java # 에러 상황에 따른 코드와 메세지를 담은 Enum 객체
    |           |   |       CustomExceptionHandler # ErroCode에 따른 에러 처리를 통합적으로 하기 위한 ExceptionHandler
    |           |   |
    |           |   +---filter
    |           |   |       JwtFilter.java # UserContext에 JWT를 해석해 담는 과정을 Spring Filter로 구현
    |           |   |
    |           |   \---util
    |           |           Validator.java # 게임 구매 시 결제 관련 검증 로직을 구현한 클래스
    |           |
    |           \---service
    |                   ChargeService.java # 충전 서비스 
    |                   KakaoPay.java # 충전 서비스에서 사용할 카카오페이 API 서비스
    |                   PurchaseService.java # 결제(게임 구매) 서비스
    |                       
    |                       # 결제 방식 
    |                         1. 사용자가 카카오페이를 이용해 상품권을 결제하여 돈을 충전합니다.
    |                         2. 충전금을 가지고 게임을 구매합니다.
    |
    |
    +---library # 웹소켓을 이용한 로비 서버, WebSockt + RabbitMQ로 구현
    |   \---src.main.java.com.steam
    |       \---library
    |           |   LibraryWebSocketHandler.java # 웹소켓 핸들러, 메세지 해석, 행위별로 서비스 라우팅
    |           |
    |           +---dto
    |           |   |   MapDto.java # 맵 정보를 담을 DTO
    |           |   |   ObjectDto.java # 맵에 설치할 오브젝트(게임)DTO
    |           |   |   Room.java # 사용자별 하나의 공간인 Room DTO
    |           |   |   UserDto.java # 맵에서 유저 위치 정보를 담고 있는 DTO
    |           |   |
    |           |   \---messages
    |           |           # **RequestMessage : 사용자 행위에 따라 받은 메세지 객체
    |           |           # **UserMessage : 사용자 행위에 따라 동기화를 위해 전파할 메세지 객체
    |           |
    |           +---entity
    |           |       RoomCache.java # Room 정보 Redis에 캐싱 (입장 시 빠른 동기화를 위해)
    |           |
    |           +---global
    |           |   +---common
    |           |           Behavior.java # 웹 소켓 메세지별 행위 ENUM
    |           |           Direction.java # 이동 행위에 따른 방향 ENUM
    |           |
    |           \---service
    |                   PublishService.java # 메세지를 메세지 큐(RabbitMQ)로 발행하는 서비스
    |                   SocketDataService.java # 로직에 따라 Redis, MySQL 트랜잭션을 처리하는 서비스
    |                   SocketService.java # 웹소켓으로 연결된 세션과 데이터를 직접적으로 다루는 비즈니스 로직 서비스 + 메세지 큐의 데이터 소비
    +---membership # 친구, 유저 프로필 관련 서버
    |   \---src.main.java.com.steam
    |      \---membership
    |          \---service
    |                  SearchService.java # 검색 서비스 (유저 검색_SQL 쿼리 이용_UserRepository.java)
    |                  FriendService.java # 친구 관련 서비스 (친구 CRUD)
    |                  ProfileService.java # 프로필 관련 서비스 (프로필, 방명록)
    |
    +---api-gateway # 인가, 라우팅 담당
    |   \---src.main.java.com.steam
    |       \---gateway
    |           |   JwtValidator.java # JWT 유효성 검증 로직
    |           |
    |           \---filter
    |                   AuthorizationCheckFilter.java # JWT 유효성 검증 필터
    | 
    +---discovery # 서비스 디스커버리 Spring Cloud Netflix Eureka 
                  # 엔드포인트들이 등록하여 엔드포인트를 식별하고, 로드밸런싱 + API Gateway에서 등록된 정보를 통해 라우팅
    次のコードを見てください
  • 支払サーバー
  • 支払サーバーのエントリ・リンク
  • ThreadLocalを使用してスレッド内のユーザー情報を格納
  • ThreadLocalを含むクラスUserContext
  • ユーザー情報を含むクラスUserDetail
  • サーバがAccess Tokenを解析してUserContextに格納するFilter
  • 充電実施
  • 充電サービス
  • 充電時に使用する高橋APIのみのサービス
  • 充電ログ
  • チャージログ付きMongoDB Document
  • 支払実施
  • 支払サービス
  • 支払内部で使用される認証のみのクラス
  • 支払時に開発者アカウントロックを設定するレポート
  • 支払ログ
  • 支払ログを含むMongoDB Document
  • ライブラリ-ロビーサーバ
  • ロビーサーバー入口リンク
  • 自分のメッセージの約束
  • 動作
  • メッセージディレクトリ
  • スロットマネージャ
  • Handlerクラス
  • ビジネスロジック(サービス)
  • ソケット上のメッセージに基づいて詳細な論理を実行するクラス;メッセージキュー内のメッセージ消費クラス
  • トランザクションロジックを処理するクラス
  • 他のサーバにメッセージを送信するクラス
  • メンバーシップサーバ
  • メンバーシップサーバリンク
  • 友達
  • 友達サービス
  • 友達申請
  • 友人の申請-承認/拒否プロセスのため、フレンドリクエスト名義で友人の申請状態を表す.
  • プロファイル関連
  • プロファイル、アクセスレコードサービス
  • 検索
  • 検索サービス(ユーザー検索)
  • レポート、Queryの検索
  • API Gateway
  • APIゲートウェイエントリリンク
  • APIゲートウェイはSpring Cloudゲートウェイを採用している.
  • JWT認証クラス
  • JWT検証フィルタ