リアルタイムチャットサーバーの構築:分散処理から性能最適化まで

Spring Boot 3.x + Kotlinで3つのインスタンスによるクラスターを構築し、Redis Pub/Sub分散メッセージングとNginxロードバランサーを活用して、大量のトラフィック処理が可能な拡張性のあるWebSocketリアルタイムチャットサーバーを開発します。

難易度 入門

受講期間 無制限

Spring
Spring
Kotlin
Kotlin
Spring Boot
Spring Boot
websocket
websocket
Spring
Spring
Kotlin
Kotlin
Spring Boot
Spring Boot
websocket
websocket

学習した受講者のレビュー

学習した受講者のレビュー

4.9

5.0

Jlos Ho

100% 受講後に作成

この講義も本当にGoatです。他の講義も受講しましたが、これほど現実的で隣で教えてくれるような講義は、このInflearnプラットフォームで唯一のもののようですね。とても役に立ちました。ありがとうございます。

5.0

Hoos

96% 受講後に作成

こんなアーキテクチャもあるんですね...Kotlinからプラットフォームに関するアーキテクチャ及び実際のコードを通じて、チャットプラットフォームについて多くの方々が理解できる良い講義だと思います。

5.0

미래 1인 개발자

32% 受講後に作成

講義を撮影するにあたり、サーバーアーキテクチャの支援とメッセージ処理の設計を行った、Tossで少しずつ経験を積んでいるサーバー開発者です。これまでステートレスプロトコルを通じた通信をテーマとしてのみ進めてきましたが、このように新しいテーマで講義を撮影することになり、かなり嬉しく、興味深い時間でした。質問もご自由にどうぞ。私も時間を割いて興味深く拝見しており、質問に対しても私の見解を述べる時間を持ちたいと思っています。講義に多くの関心をお寄せください。

受講後に得られること

  • Redis Pub/Subを活用して、複数のサーバーインスタンス間でリアルタイムメッセージを同期する分散メッセージングシステム

  • Docker Composeで3つのインスタンスクラスターを構成し、Nginxロードバランサーでトラフィックを分散処理する方法

  • Spring WebSocketを利用して双方向リアルタイム通信を実装

  • マルチモジュール構造でドメイン駆動設計(DDD)を適用し、拡張可能なサーバーアーキテクチャを設計する方法

  • Redisを活用したメッセージシーケンス管理により、分散環境でもメッセージの順序を保証する手法

  • Dockerコンテナベースのデプロイとヘルスチェック、ログモニタリングを通じたサービス運用方法

  • Spring Boot 3.x + Kotlinの最新機能を活用したモダンバックエンド開発手法

  • メッセージの重複処理防止、セッション整理、リソース解放など、安定的なサービス運用のための防御的コーディング手法

この講義を通じて、皆さんは...

実際のサービス環境で数万人のユーザーに対応できる拡張可能なサーバーアーキテクチャを直接設計し、構築することになります。


🏗。単に機能を実装するだけでなく、大規模なトラフィックでも安定して動作する分散システムの核心原理を体得することができます。

まず、複数のサーバーが一つのシステムのように動作するようにNginxロードバランサーでトラフィックを分散🌐Redis Pub/Subを利用してサーバー間のメッセージをリアルタイムで同期する方法を学びます。この過程で、C10K(1万同時接続)問題を解決するノウハウを自然に習得することになります。


また、データベースコネクションプールをチューニングし、JPAバッチ処理とカーソルベースのページネーションを適用することで、レスポンス速度をミリ秒単位まで改善する経験をすることになります。

最後に、Dockerコンテナ🐳を通じて開発からデプロイまで一貫した環境を維持し、Health Checkとモニタリングシステム🩺を構築してサービス障害を未然に防ぐ安定的な運用手法まで学習します。これらすべての過程を最新スタックであるKotlinとSpring Boot 3.x、websocketを活用し、洗練された効率的なコードで実装します

📦講義を終えると、このような成果物を作ることができます

一つの完全な分散型チャットアプリケーション📦

コマンド一つでシステム全体(サーバー、データベース、キャッシュなど)を一度に実行できる、完全な形のアプリケーションパッケージを手に入れることができます。単なるコードの断片の集まりではなく、すぐにデプロイ可能なサービスです。

プロダクションレベルのシステムアーキテクチャ設計図 🗺

ユーザーのリクエストからデータ保存までの全体の流れを盛り込んだシステムアーキテクチャ設計図を、自ら構築し理解することになります。この設計図は、あなたの技術的な深さを証明する素晴らしいポートフォリオの資産になります。

リアルタイム双方向チャット機能 💬

ユーザーがログインし、チャットルームを作成し、多様なメッセージをリアルタイムでやり取りする核心的なチャット機能が完璧に実装された成果物を手にすることになります。

水平拡張が可能なサーバークラスター

n台のSpring BootサーバーがNginxロードバランサーの下で動作するサーバークラスターを構築します。これにより、トラフィックが増加した際にサーバーインスタンスを追加するだけで、簡単にシステムを拡張する方法を学ぶことができます。

高可用性メッセージングシステム 📡

一つのサーバーに障害が発生したり、ユーザーが異なるサーバーに接続したりしても、Redis Pub/Subを通じてすべてのメッセージが漏れなく配信される安定したメッセージングシステムを構築します。

最適化されたデータ管理システム

PostgreSQLにチャットデータを永続的に保存し、Redisにセッション情報やキャッシュデータを保存することで、データの安定性と高速なレスポンスを両立させたハイブリッドデータシステムを完成させます。

📚講義の主な内容!

Redis Pub/Sub 分散メッセージング

複数のサーバーインスタンス間でリアルタイムメッセージを同期するために、Redisのパブリッシュ/サブスクライブ(Pub/Sub)パターンを実装します。重複メッセージの防止、メッセージ順序の保証、サーバー別の隔離処理など、プロダクションレベルの分散メッセージングシステムを構築し、拡張可能なリアルタイム通信の基盤を整えます。

WebSocketベースのリアルタイム通信

Spring WebSocketを活用し、HTTPよりもはるかに効率的な双方向リアルタイム通信を実装します。セッション管理、接続状態の追跡、エラーハンドリングなどを通じて安定したリアルタイムチャット機能を提供し、問題解決のための最適化手法も適用します。

マルチモジュールDDDアーキテクチャ

Domain-driven Design(ドメイン駆動設計)の原則に従い、API、Domain、Persistence、WebSocketレイヤーを独立したモジュールに分離します。各モジュールの責任を明確に区分し、依存関係の方向を制御することで、保守性とテストの容易性を極大化した拡張可能なサーバーアーキテクチャを構築します。

Nginx ロードバランサー + WebSocket プロキシ

n個のSpring Bootインスタンスにトラフィックを均等に分散するNginxロードバランサーを構成します。HTTPリクエストだけでなくWebSocket接続も安定的にプロキシし、プロダクションレベルのリバースプロキシ設定で高可用なサービス環境を構築します。

📚プロジェクト機能アーキテクチャの紹介

Redis Pub/Sub

メッセージ処理プロセス

📚講義をチラ見せ!

📚 WebSocket セッション管理クラスの作成



📚自動化されたスクリプトを活用したサーバーデプロイ



📚 環境デプロイのための Docker-Compose



📚 Nginx 性能指標の設定



Kotlinをなぜ学ぶべきなのか?

Springと100%互換性があると言われており、JetBrainsが開発したKotlinという言語は、Springにおいて不向きな並行プログラミングに最適化されています。

📚簡潔で直感的な文法


Kotlinは簡潔で直感的な文法を提供する形式であるため、開発者はより少ないコードでより多くの作業を遂行できます。これは可読性向上の効果があり、保守をより容易にします。

📚 高い生産性と安全性


Kotlinは標準でNull安全をサポートしており、NullPointerExceptionを減らすことができます。また、関数型プログラミングをサポートしているため、より機能的で宣言的な方法でコードを記述できます。これらの機能は開発の生産性を高め、バグの発生の可能性を低減させます。

📚 高い互換性


Kotlinは100% Javaと互換性があるため、既存のJavaプロジェクトに簡単に統合できます。これは、Java開発者がKotlinを学ぶ上で大きな障壁がなく、既存のコードを維持しながらも新しいKotlinの機能を使用できることを意味します。

websocketをそのままHTTPで実装すればいいのではないでしょうか?🤔

📌可能です。不可能な開発方式ではありません。

📌しかし、サーバー開発者は一般的に、サーバーのリソースを最大限に節約しなければなりません。

📌 そのため、チャットサーバーのように継続的な接続(Connection)を維持する必要がある通信の場合は、WebSocketを使用するのが非常に適しています。

大切にしている4つの価値観

1. 講義は人間味があるべきだ。

専門性が低く見えたとしても、見せかけだけの講義は講義ではないと考えています。デバッグを行う時間もまた、講義の一部です。

2. 実務に特化していなければならない

開発は言葉でするものではありません。実際に実装を行い、動作する過程を共に体験することができます。

  • 企画者の方々… 助けてください…

3. 受講生の方々の役に立つものでなければならない。

私が実務で適用して効果を実感した概念を盛り込もうと努めました。この過程を通じて、実務を間接的に体験したり、現職の方であれば実務環境でより優れたパフォーマンスを発揮したりすることができます。

4. 講義が終わりではない。

講義を進めながら、ぜひ積極的に質疑応答を残してください。この講義は私一人の知識だけで作られたものではありません。様々な大手企業の開発者の方々の意見も集約されています。

  • 講義の完成にご協力いただいた方々の簡単な経歴は以下の通りです。


private val supported_one = "カカオペイ プラットフォーム バックエンド開発者" private val supported_two = "トス証券 API サーバー開発者" private val supported_three = "匿名希望のユニコーンスタートアップ サーバー開発者"

受講前のご注意事項

実習環境

  • MacOS M3を使用して撮影されました。

  • Dockerを基本的に使用します。

  • java --version : 17.0.12 2024-07-16 LTS

  • JetBrain系列のIDEを使用します。

  • Gradleを使用してビルドします。

    • ソースコードは、万が一のバージョン衝突を防ぐため、ビルドファイルまで全て含まれています。

😍 一緒に見ると良いトピック

こんな方に
おすすめです

学習対象は
誰でしょう?

  • ジュニア→ミドルレベルへの成長を目指すバックエンドエンジニア

  • リアルタイムサービスの開発経験を積みたい開発者

  • 分散システムアーキテクチャに関心がある開発者

  • シニアエンジニアへの成長を目指すミドルクラスエンジニア

  • Dockerの基礎知識がある開発者、または学びたい開発者

  • ゲーム/チャット/ソーシャルサービス開発者

  • ポートフォリオを強化したい就職準備生

  • 技術スタックの拡張を通じた転職を計画中の開発者

前提知識、
必要でしょうか?

  • Springに関する基本的な知識があると望ましいです。

  • ウェブソケット通信に関する基本的な知識があると望ましいです。

  • これらの知識がすべてなくても大丈夫です。プロジェクトを直接実装するため、一緒に学習が可能です。

こんにちは
Hongです。

7,493

受講生

461

受講レビュー

142

回答

4.7

講座評価

25

講座

自己紹介

家でだらだら過ごしていたところ、開発に興味を持ち始めて勉強をスタートし、現在は板橋(パンギョ)でプラットフォームサーバーの開発を担当しています。私自身が勉強してきた方法や、実務で直面しうる様々な問題点とその解決策を皆さんに提供したいと考え、知識共有者としての活動を続けています。

 

講義は私一人の知識だけで作られるものではありません。すべての講義には、共に作り上げてくださる方々がいます。

 

知識共有者の経歴

[前] サンドボックスIP関連のブロックチェーン開発者

[前] メタバースバックエンド開発者

[] 板橋(パンギョ)でベテランになりつつあるサーバー開発者

 

インタビュー履歴

その他のお問い合わせ

  • unduck2022@gmail.com

もっと見る

カリキュラム

全体

28件 ∙ (4時間 55分)

講座資料(こうぎしりょう):

授業資料
講座掲載日: 
最終更新日: 

受講レビュー

全体

29件

4.9

29件の受講レビュー

  • youngba8935643님의 프로필 이미지
    youngba8935643

    受講レビュー 7

    平均評価 5.0

    修正済み

    5

    96% 受講後に作成

    就職準備をして、実務で働きながら講師の方の講義をたくさん参考にして基盤として学習を進めましたが、本当にとても役に立つ良質なテーマだと思います。一緒にコードを書く過程もとても有益で、隣で一緒にコーディングをしている感じがするので、それだけ学習効果が良くなるようです!!今後もっと頻繁に見て、良い講義が作られればいいなと思います。ありがとうございます!

    • jhong
      知識共有者

      こんにちは、テンバーガーさん!就職準備をされているのですね!!この講義がたくさんお役に立てればと思います。今後就職も成功されましたら、お知らせください😊😊ありがとうございます!

  • kju626095386님의 프로필 이미지
    kju626095386

    受講レビュー 8

    平均評価 5.0

    5

    100% 受講後に作成

    現実的で良い内容の講義をよく拝見しました。ありがとうございます。

    • jhong
      知識共有者

      こんにちは、ks juさん、レビューを残していただきありがとうございます。 実際の運用環境では、より多様な機能が入る形になっており、このような形態のための構造だと思っていただければと思います😊😊今後もより有益な講義を提供いたします。良い一日をお過ごしください :)

  • eightee724277님의 프로필 이미지
    eightee724277

    受講レビュー 6

    平均評価 5.0

    5

    93% 受講後に作成

    とても良く学ぶことができました。良い講義だと思います。他の講義も受講予定です。

    • jhong
      知識共有者

      こんにちは、8番が気に入っていただけて嬉しいです!!他の講義でもお会いできればいいですね😊😊良いレビューをありがとうございます!

  • tasdo4797187님의 프로필 이미지
    tasdo4797187

    受講レビュー 5

    平均評価 5.0

    5

    100% 受講後に作成

    バックエンド開発者として...本当にとても役に立ちました。ありがとうございます。

    • jhong
      知識共有者

      こんにちは、tasd osさんと同じ職務なのですが、とても参考になったようで、すごく嬉しいですね。ありがとうございます!

  • kask814587762님의 프로필 이미지
    kask814587762

    受講レビュー 3

    平均評価 5.0

    5

    100% 受講後に作成

    講義よく見させていただきました。特に見るのに大きな不便もなく、内容自体もとても有益ですね。今後ともよい講義をお願いします!

    • jhong
      知識共有者

      こんにちは、ウダンタンタン様、良いレビューを残していただきありがとうございます!!今後もより有益で面白い実務に適した講義を提供できるよう努力いたします!良い一日をお過ごしください!

Hongの他の講座

知識共有者の他の講座を見てみましょう!

似ている講座

同じ分野の他の講座を見てみましょう!

¥10,486