20,000+ RPS並列処理のためのネイバー面接官が教えるReactiveプログラミング

トラフィックが増加するほどレスポンスが遅くなり、スレッドプールが急速に枯渇し、外部API呼び出しが増えるほどボトルネックが深刻化する環境で、根本的な解決策を見つけたい開発者のための講座です。単にサーバーを拡張する方式ではなく、構造自体を変える観点から問題を見つめ直す手助けをします。 この講座を通じて、まず伝統的なSpring MVCのThread per Requestモデルがどのような限界を持つのかを理解します。なぜCPUは余っているのにスループットが上がらないのか、ブロッキングI/Oが実際にどのような方式でシステムリソースを占有するのかをコードレベルで確認します。 次に、Reactive Streamsの概念と標準スペックを学び、ReactorのMonoとFluxを活用してデータストリームを扱う方法を習得します。単なる使い方ではなく、データの流れがどのように始まり、どのように消費され、スループットはどのように調節されるのかまで、実習を通じて体得します。特にBack Pressureを活用してOOMや過負荷を防止する設計方式も直接実装してみます。 また、Spring WebFluxのイベントループベースの処理構造を理解し、Non-Blocking I/Oが実際の要求処理過程でどのように動作するのか比較実習を行います。MVCとWebFluxを並べて構造的な違いを確認し、いつReactiveを選択すべきかという判断基準もあわせて整理します。 単に「非同期を学ぶ」というレベルでは終わりません。少ないスレッドでより多くのリクエストを処理する方法、外部APIへの依存度が高い環境で安定した流れを維持する方法、そして高並行性環境でスループットを確保する設計センスを学ぶことができます。

難易度 入門

受講期間 無制限

Java
Java
Spring
Spring
Spring Boot
Spring Boot
Parallel Processing
Parallel Processing
webflux
webflux
Java
Java
Spring
Spring
Spring Boot
Spring Boot
Parallel Processing
Parallel Processing
webflux
webflux

受講後に得られること

  • Spring WebFluxベースのNon-Blockingサーバーを直接設計し、実装する方法

  • MonoとFluxを活用してデータストリームを設計および制御する能力

  • バックプレッシャー(Back Pressure)を適用して過負荷を防止する構造設計能力

  • MVCとWebFluxの構造的な違いを説明し、選定基準を提示する能力

  • 少ないスレッドで高い並行性を処理するアーキテクチャ設計手法

  • ブロッキングコードとリアクティブコードの混用時に発生する問題を特定し、解決する能力

⚡ リアルタイムトラフィックを処理するNaver面接官が教えるReactiveプログラミング

  • 以下の内容は実際の会話内容です。

😁Toss 開発者 : 最近トラフィックが爆発し続けてて... CPUは大丈夫なんだけど、スレッドが耐えきれなくて全部詰まっちゃってるよ(泣)

😄 Hong : トスはどんな構造を使ってるの?? Thread per Request構造で処理しているの?

😁 Toss 開発者 : うん… ほとんどが MVC ベースだから、外部 API 呼び出しが増えるとブロッキング区間のせいでボトルネックが発生するんだ。インフラを増やしても根本的な解決にならない感じだよ。

😄 Naver 面接官(開発者) : 私はそれで、実はそれがあまり好きではありません。一長一短がはっきりしてはいますが… スループットの観点ではリアクティブプログラミングには敵わないと思っているので。もちろん学習曲線は少しあるでしょうが(涙)

😁 Toss 開発者: はぁ…そうなんですよ、だから悩みどころです。いっそ Webflux を入れてしまおうかとも思いますが、既存のレガシーシステムすべてに導入するのも負担が大きくて(泣)

😄 Naver 面接官(開発者) : ㅋㅋㅋ なので私は一部のサービスをWebFluxベースのReactive構造に転換しました。すべてではありませんが、一部だけでもノンブロッキングで処理するようにしたら、同じリソースでもスループットがしっかりついてくるようになりましたね。

😄 Hong : でも、Reactiveは概念だけ聞いて導入すると、かえって複雑になることもありますよね?

😄 Naver 面接官(開発者) : そうですね。実際、MonoやFluxを知っているだけではすべて解決するわけではありませんから。ネットワーク障害や現実的な問題も多いですし、イベントループ、Back Pressure、ブロッキングコードの混用くらいでしょうか? これくらいは考慮すべきではないかと思います。

😄 Naver 面接官(開発者) : 思いついたついでに、これ一度作ってみたいんですけどどうですか?? ㅋㅋㅋㅋ

😄 Hong : あ.... 捕まっちゃったな(笑) こんなはずじゃなかったのに;;

😁 Toss開発者:僕は大歓迎ですよ(笑)超おすすめ!!!僕も一度聞いてみますね… MVCばかり作っていたら、最近なんだかフォーム(キレ)が落ちたような気がして(笑)

🌊 バックエンド開発者は同期方式さえできれば十分でしょうか?

皆さんは現在、どのような構造でサーバーを運用されていますか?伝統的なSpring MVCベースで満足し、うまく回っていますか??ですが、皆さんは多くのトラフィックを経験しており、それを満足のいく形で処理できているのでしょうか??このような状況を仮定してみましょう。

  • 外部APIの呼び出しが増えるにつれて、レスポンスが遅くなる問題

  • スレッドプールがすぐに枯渇する状況

  • トラフィックは増えているのに、インフラ費用も一緒に増加する構造

  • 非同期処理を行う必要があるものの、コードがどんどん複雑になっていく経験

現代的なバックエンド環境では、単に正しく動作するコードを目標に作成することはありません。このような観点を超えて、トラフィックを効率的に処理できる構造設計能力がますます重要になっています。皆さんは、このような部分をどのように悩み、実装されていますか?

この質問に対する答えは、まさにこの講義にあります。複数のリクエストを少ないスレッドで効率的に処理し、Non-Blocking I/Oベースでシステムリソースを最大化する方法。Back Pressureを活用して安定したデータフローを設計する方式まで、すべてこの講義を通じて確認しながら、Spring WebFluxについて学習してみてください。

単に理論だけを扱う講義ではありません。実際の多様なソースコードを通じて、Webfluxというスキルを直接使用し、実装する方法を学習する時間を持っていただければと思います。 🚀

🔥 Why Spring WebFlux!!

Spring WebFluxは、ノンブロッキング(Non-Blocking)ベースのリアクティブWebフレームワークです。伝統的なSpring MVCがThread per Requestモデルであるのに対し、WebFluxはイベントループベースのノンブロッキングアーキテクチャを使用します。

Spring WebFluxは、次のような特徴を持っています。

  • ノンブロッキング I/O

    • リクエストを処理する間、スレッドを占有せず、I/O操作が完了するまで効率的にリソースを活用します。これにより、少ないスレッドでも高い並行性を処理できます。

  • Reactive Streams & Back Pressure

    • Reactive Streams標準に基づいて動作し、Back Pressureを通じてデータ生産者と消費者間の処理速度を調節できます。過度なデータ流入によるシステムの過負荷を防止できます。

  • イベントループベースの処理

    • 伝統的なThread per Requestモデルではなく、イベントループベースの構造で動作するため、大規模な同時リクエスト環境でも効率的な処理構造を提供します。

  • 高い並行性

    • 外部API呼び出しやDB I/Oなど、待ち時間の多い作業でもスレッドをブロックせずに処理するため、高トラフィック環境において強みを持ちます。

  • Functional & Annotation

    • Spring MVCと類似したアノテーションベースの開発はもちろん、RouterFunctionを活用した関数型スタイルのAPI構成もサポートしています。

公式ドキュメントでは、Spring Webfluxを次のように説明しています。

Spring Frameworkに含まれるオリジナルのウェブフレームワークであるSpring Web MVCは、Servlet APIとサーブレットコンテナ専用に構築されました。リアクティブスタックのウェブフレームワークであるSpring WebFluxは、後のバージョン5.0で追加されました。これは完全にノンブロッキングであり、Reactive Streamsのバックプレッシャーをサポートし、Nettyやサーブレットコンテナなどのサーバー上で動作します。

両方のウェブフレームワークは、それぞれのソースモジュール名(spring-webmvcおよびspring-webflux)を反映しており、Spring Framework内で共存しています。各モジュールはオプションです。アプリケーションはどちらか一方のモジュールを使用することも、場合によっては両方を使用することもできます。例えば、Spring MVCコントローラーでリアクティブなWebClientを使用する場合などです。


( Spring Frameworkに最初に含まれたウェブフレームワークであるSpring Web MVCは、Servlet APIとServletコンテナをベースに設計されました。その後、バージョン5.0でReactiveスタックベースのウェブフレームワークであるSpring WebFluxが追加されました。

Spring WebFluxは完全にノンブロッキング(Non-Blocking)方式で動作し、Reactive Streamsのバックプレッシャー(Back Pressure)をサポートします。また、Nettyのようなサーバーだけでなく、既存のサーブレットコンテナ上でも実行できます。

これら2つのウェブフレームワークは、それぞれのソースモジュール名(spring-webmvc、spring-webflux)をそのまま踏襲しており、Spring Framework内で並行して共存しています。各モジュールは選択的に使用することが可能です。アプリケーションはどちらか一方のみを使用することもできますし、場合によっては両方のモジュールを併用することもできます。例えば、Spring MVCのコントローラーを使用しながら、リアクティブベースのWebClientを組み合わせて使用するといった方法も可能です。)

皆さん、Spring WebFluxを単なる非同期としてだけ理解してはいけません。Non-Blocking I/Oベースの処理、少ないリソースでの高い並行処理、Back Pressureなどを理解する必要があります。特にMSA環境においてサービス間の通信が多い構造であれば、Reactive方式は選択ではなく必須になりつつあります。

この講義を通じて、Reactiveプログラミングを単なる非同期ではなく実際のスループットを確保する技術として理解し、実際にテストしながらすぐに活用できる経験を積まれることをお勧めします。 🚀

🚀 実際の求人では何が求められているでしょうか?

Tossのサーバー開発者JD

Toss Paymentsのサーバー開発者JD

ダウ・キウム系列会社のサーバー開発者JD

ヘクトグループのサーバー開発者JD

この講義の特徴

📌 LINEヤフー(NAVER)プラットフォーム環境でのReactive設計経験に基づいた講義

  • この講義は、単にWebFluxの文法を説明する講義ではありません。実際の流動的な大規模トラフィックや外部APIへの依存度が高い環境で、どのような問題に直面し、なぜReactive構造を選択したのか、その背景から説明します。

    「なぜWebFluxなのか?」という問いに対して、実務的な答えを提示する講義です。


📌 90%以上が実習中心のカリキュラム

  • Reactiveは理論だけでは理解しにくいです。MonoとFluxの動作フロー、Non-Blocking処理方式、イベントループベースの構造を直接コードで確認してこそ、ようやく実感が湧いてきます。

    この講義は大部分の時間を実習で構成しており、Reactiveの流れを目で見て、直接体験しながら理解できるように設計されています。


📌 MVCとWebFluxの構造的な違いを通じて確認するレベルアップ

  • 「非同期」という言葉一つでは説明が不十分です。Thread per Requestモデルの限界、ブロッキング区間が生み出すボトルネック、ノンブロッキングアーキテクチャの動作方式などを通じて、差別化された開発者キャリアを準備することができます。


📌 ジュニアには一段上の視点を提供

  • シニアにはアーキテクチャの選定基準を

    単なるCRUDサーバーを作る開発者を超えて、トラフィックとリソース効率を考慮した設計能力を養うことができます。

    WebFluxは「流行の技術ではなく、高並列環境における選択肢の一つを正しく理解する過程」です。

🤭 この講義を一緒に準備してくださったネイバーの面接官の方!

Ande (Naver)

10年目のバックエンドサーバー開発者

講師の方々の名前をクリックして、より詳細な経歴も確認してみてください!

私が持っている様々な技術やスタックを他の方々と共有し、議論したいと思い、このように講義を作ることになりました。私のノウハウを他の方々が習得し、私と同じような失敗をしないことを願っています。

知人の推薦(カカオの面接官)でこのように合流することになり、Hongさんの主導のもと、一緒に撮影を行うことになりました。最大限多くの内容を盛り込めるよう努めましたので、たくさんの関心をお願いいたします。また、質問も気軽にお願いします。私が最大限確認して回答するようにいたします。ありがとうございます。

[現] NAVERサーバー(本社)開発者

[前] 新世界グループ所属バックエンド開発者

[前] ヘルスケアスタートアップ サーバー開発者

[前] ソウル4年制大学 コンピュータ工学専攻

注意事項

実習環境

  • OS

    • Apple M3 Air

    • Docker version 28.0.0, build f9ced58158

    • java 17.0.12 2024-07-16 LTS

皆さんのキャリアを準備していくためのオープンチャットルームを運営しています。たくさんの関心をお願いします!

こんな方に
おすすめです

学習対象は
誰でしょう?

  • トラフィックが増えるほど、スレッドプールの枯渇問題で不安を感じるバックエンド開発者

  • MVC構造の限界を感じているが、代替案を見つけられずにいるSpring開発者

  • Reactiveを導入したいが、概念が漠然としていて挑戦すらできずにいる開発者

  • インフラの拡張だけで問題を解決しようとして、コスト負担が大きくなっているチームの開発者

  • MSA環境でサービス間の通信遅延問題に悩むプラットフォーム開発者

  • 高並列環境の設計経験が不足しており、キャリアの成長に渇望を感じている開発者

こんにちは
Hongです。

8,049

受講生

510

受講レビュー

145

回答

4.7

講座評価

27

講座

自己紹介

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

 

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

 

知識共有者の経歴

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

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

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

 

インタビュー履歴

その他のお問い合わせ

  • unduck2022@gmail.com

もっと見る

カリキュラム

全体

25件 ∙ (6時間 0分)

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

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

受講レビュー

全体

2件

5.0

2件の受講レビュー

  • youngba8935643님의 프로필 이미지
    youngba8935643

    受講レビュー 10

    平均評価 5.0

    5

    88% 受講後に作成

    核心的な内容だけを効率よく学べて、本当にコスパ最高でした!

    • jhong
      知識共有者

      こんにちは、テンバガー様。素敵なレビューを残していただきありがとうございます!!

  • kyletes6021420님의 프로필 이미지
    kyletes6021420

    受講レビュー 2

    平均評価 5.0

    5

    88% 受講後に作成

    感銘深く拝見しました。現職で6年目の開発者として勤務していますが、それでも自分自身の力不足を痛感させられる講義でした。シンプルなテーマでありながら、まさに核心を突く素晴らしい内容でした。ありがとうございました。

    • jhong
      知識共有者

      こんにちは、letes ky様。素敵なレビューを残していただきありがとうございます!!

Hongの他の講座

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

似ている講座

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

期間限定セール

¥49,500

50%

¥12,616