MVCモデルをマインクラフトで例えると…? デイトラJava中級編38「3層構造、MVC」

デイトラJava
ハック
ハック

こんにちは!運営者のハックです。

今回は「デイトラ中級編Day38『3層構造、MVC』」の学習内容について記録します。

Web3層構造

Webアプリケーションには、大規模なシステムやアプリケーションを支えるアーキテクチャとして、Web3層構造というものがあります。Webアプリケーションに大量のアクセスがあった場合も稼働できるようにする技術のことです。

3層構造は、ユーザーがWebを通じて情報にアクセスする際の処理を効率的に行うために、役割に応じて3つのサーバーに分けて構成されています。具体的には、「Webサーバ」「アプリケーション(AP)サーバ」「データベース(DB)サーバ」の3つです。

Webサーバ

Webサーバは、ユーザーからのHTTPリクエストに応じて、HTMLや画像といった静的コンテンツを提供する役割を担います。動的なコンテンツが必要な場合は、これをアプリケーションサーバへ転送し、ユーザーとの直接のやりとりを管理します。基本的に、Webページの表示に必要なデータを処理・返すことが主な任務です。

代表例

Apache HTTP Server、Nginxなど

Apache(アパッチ)とNginx(エンジンエックス)

WebサーバではApacheとNginxが代表例ですが、現場で圧倒的に利用されるのはNginxです。

Apache

引用:Welcome! – The Apache HTTP Server Project

Apache長年にわたり多くのウェブサイトで使用されている信頼性の高いWebサーバです。

豊富なドキュメントとサポートにより、特定のニーズに合わせてカスタマイズが容易であり、柔軟性が魅力の一つです。.htaccessファイルを通じて細かな設定変更が可能で、多様なモジュールを追加することで幅広い機能を実装できます。

しかし、同時接続数が多くなるとリソース消費が増加するため、大量トラフィックにはNginxと比較してリソース効率が低下し、コストが高くなる傾向があります。

それでも、独立したプロセスまたはスレッドでリクエストを処理することで安定した運用が可能です。

Nginx

引用:NGINX(エンジンエックス)|日本公式サイト

Nginxは高い同時接続数に対応し、少ないリソースで効率的に多くのリクエストを処理できるWebサーバです。

非同期イベント駆動アーキテクチャにより、高トラフィック環境でも優れたパフォーマンスを実現します。リバースプロキシやロードバランサーとしても活用でき、設定の容易さも魅力です。サーバのリソースを効率的に使用し、ランニングコストを抑えることが可能です。

また、静的ファイルの高速配信にも特化しており、Apacheに比べて高速なレスポンスを提供します。

アプリケーション(AP)サーバ

APサーバは、Webサーバから受け取ったリクエストに基づいて動的コンテンツを生成し、必要に応じてデータベースサーバとやり取りします。主にビジネスロジックの処理を担い、処理結果をWebサーバを通じてユーザーへ返す役割を持っています。Javaなどのプログラムを実行して、ユーザーからの要求に応じたデータ処理を行います。

代表例

Apache Tomcat、JBoss、WebLogic、Microsoft .NET Frameworkなど

引用:Jakarta® EE | クラウドネイティブエンタープライズJava

JavaにはJakarta EEというJavaで実装されたアプリケーションサーバの標準規格を定めたものがあります。Jakarta EEの仕様をもとに多くの企業がJavaで稼働するアプリケーションサーバを開発しているため、Javaで利用されるアプリケーションサーバの種類は非常に多くなっています。

参照実装(リファレンス実装)

引用:Open Liberty

参照実装(リファレンス実装)は、特定の技術仕様や標準を実現する実際のコード例やアプリケーションで、技術がどのように機能するかを示すモデルです。

Javaのアプリケーションサーバーにおいては、Jakarta EEの仕様に準拠した実例を提供し、開発者が標準に基づいたアプリケーションを構築するのに役立ちます。

参照実装のアプリケーションサーバはJakarta EEの新バージョンと共に更新され、最新の参照実装はOpen Libertyで、以前はGlassFishがこの役割を果たしていました。Open LibertyはJakarta EEの全必須仕様を実装し、標準準拠の示例を提供します。

データベース(DB)サーバ

DBサーバは、Webアプリケーションのデータを格納し、アプリケーションサーバからのリクエストに基づき、データの読み込みや書き込みなどの操作を行います。SQLを使用してデータベースを操作し、必要なデータの取得や更新を実行します。その結果はアプリケーションサーバへ返されます。

代表例

MySQL、Oracle Database、PostgreSQL、Microsoft SQL Serverなど

最も利用されているのはOracle Database、MySQLなどのRDB(Relational Database)です。RDBはSQLを用いてデータベースを操作します。
テーブル構造をしており、エクセルの表のように「行」と「列」を用いてデータを配置しています。
主にデータの一貫性が重要になシステムで利用されます。

NoSQL(Not Only SQL)

引用:【公式】Amazon DynamoDBとは(マネージド NoSQL データベース)| AWS

NoSQLは従来のRDBと異なり、大量データの高速処理に特化したデータベースです。RDBでは対応できないビッグデータの活用に利用されます。

スキーマレスでデータ構造の柔軟な変更が可能であり、ビッグデータやリアルタイムWebアプリケーションでの利用が一般的です。様々なタイプがあり、スケーラビリティと性能を重視する現代のアプリケーション開発に適しています。

Amazon DynamoDBなどが有名な製品です。

MVCモデル

 MVC(Model/View/Controller)は、Webフレームワークで一般的に取り入れられているアプリケーション設定を整理するための概念の一つです。MVCモデルは開発者の好きにコードを書いてしまうと何がどこにあるのかわからなくなるため、適切な場所に適切なコードを書くために生まれた考え方です。

  1. Model:ビジネスロジック(業務処理)を書く場所
  2. View:表示とか入出力について書く場所
  3. Controller:ユーザーの処理(リクエスト)によってModelとViewを制御する場所
ねこ奈
ねこ奈

うーん…何かイメージしづらいのにゃ。

モナ
モナ

MVCモデルはWebアプリケーション開発で用いられる考え方ですが、ここでは敢えてMinecraftで例えてみましょう。

MVCモデルをMinecraftで表現すると

Minecraftの世界でMVCモデルを適用すると、プレイヤーのアクション(コントローラ)によってゲーム世界の状態(モデル)が変化し、それがリアルタイムで世界の見た目(ビュー)に反映されるという流れになります。

ねこ奈
ねこ奈

(お肉に何か恨みでもあるのかにゃ?)

上の図で流れを解説すると以下のとおりです。

  • Minecraftのゲーム画面(View)で肉を全て削除する操作を行うと、プラグインサーバのコントローラーへ削除指示が送信します。
  • コントローラーはその指示に基づき同じく、プラグインサーバに存在するModelへ削除指示を行いデータベースから肉の削除を行います。
  • Modelは処理が完了したら、コントローラーへ連携し、コントローラーから肉の削除が完了したことをViewへ伝えます。
  • ゲーム画面(View)から肉が削除されます。

上記のように MVC で役割を分担して処理を行えるようコードを書くことで何がどこにあるのかが分かりやすくなり、チームでも開発がしやすいプロジェクトになります。

もなぁ
もなぁ

実際には腐った肉とかは海やマグマに投げ捨ててます
え、狼にあげろだって?だって取っておくの邪魔くさいし…

まとめ

今回はWeb3層構造やMVCといったWebアプリケーションにおける基本的な概念について学習しました。

ハック
ハック

前回の学習と同様に、今回の学習も現場に出て仕事をしながら覚える知識だと感じました。

プログラミング学習もそうですが、テキストを開いて学習するより『習うより慣れろ』と言うように、現場に出て実践で学んだ方が身に付くのが早いと思います。

以上で今回の学習記録を終えます。

ここまでご覧いただきありがとうございました。

コメント

タイトルとURLをコピーしました