はじめに
- 新卒で入社をさせていただいた会社の課題図書でWeb技術の基本を読むこととなったので、そのアウトプットとして、本記事を書いています。
- 本記事が僕と同じような駆け出しエンジニアさんのお役に立てれば幸いです。
Webアプリケーションの3層構造
Webアプリケーションはユーザインターフェースとなるプレゼンテーション層、業務処置を行うアプリケーション層、データ処理や保管を行うデータ層の3層構造となっている。
- プレゼンテーション層はWebブラウザ(ChromeやFirefoxなど)とWebサーバーが役割を担う。
- アプリケーション層はアプリケーションサーバー(APサーバー)が役割を担う。
- データ層はデータベースサーバー(DBサーバー)が役割を担う。
3層構造にするメリット
- 負荷分散
- 1つのサーバーに3層全ての役割を実装することは可能だが、アクセス数の増加や複雑な処理を実装すると各層への負荷が高くなるため、システムの規模が大きくなると各サーバー機器の特性に合わせた役割を与えることが一般的である。
- 改修範囲の限定
- アプリケーションの改修が必要となった場合、層別に分かれていることで改修範囲を限定できるというメリットがある。
- プレゼンテーション層の改修が発生した場合はアプリケーション層やデータ層には影響を及ぼさないため改修コストを抑えることができる。
MVCモデル
- MはModelでアプリケーションの扱うデータと業務処理を指す。
- VはViewでユーザーへの出力処理を指す。
- CはControllerで必要な処理をModelやViewに伝える役割を担う。
3層アーキテクチャとMVCモデルの相違点
- 3層アーキテクチャはWebシステム全体の設計思想のこと。
- MVCモデルはサーバーサイド・スクリプトの設計思想のこと。
MVCモデルのメリット
- 開発や改修の分業が容易になる。
- 3層アーキテクチャのように各要素が分離されているため、仕様変更が別の要素へ影響を及ぼさない。
- 表示を変更したいときはView、処理を変更したい場合はModelと行ったように改修範囲が特定しやすい。
Webサーバーの役割
- Webサーバーの役割は静的ページのデータやAPサーバーから転送された動的ページのデータをWebクライアントに転送すること。
主なWebサーバー
Webサーバー名 | 説明 |
---|---|
Apache HTTP Server | 世界中でもっとも多く使われているWebサーバソフトウェアであり、大規模な商用サイトから自宅サーバまで幅広く利用されている。単にApacheとも称されている。 |
nginx(エンジンエックス) | 静的コンテンツ(つまりサーバ上のファイル)を高速に配信するように設計されている。 |
IIS | Microsoft Windowsの標準Webサーバ。 |
アプリケーションサーバーの役割
-
アプリケーションサーバーは業務処理を行うプログラム。
- Webサーバーから送られてきたユーザーからのデータを受け取り、サーバーサイド・プログラムを実行することでそのデータを加工したり、DB(データベース)のデータを検索・加工した後、Webサーバーにレスポンスを返す。
主なアプリケーションサーバー
- Rubyであれば、PumaやUnicorn。
- Javaであれば、Tomcat。
- PHPの場合はアプリケーションサーバーを使う必要がない。
- Apacheのモジュールを使用することでアプリケーションサーバーのような仕組みを導入できる。
- もしくはFastCGIを通してPHPを実行する。
データベースサーバーの役割
- データベースサーバーの役割はアプリケーションサーバーからの要求に従って処理を行い、結果をアプリケーションサーバーに返却すること。
主なデータベースサーバー
データベースサーバーは大きく分けてRDBMSとNoSQLの2つが存在する。
RDBMS
RDBMS(Relational DataBase Management System)ではデータやデータ間の関連を2次元の表で表す。
代表的なRDBMS
名称 | 概要 | 有償/無償 |
---|---|---|
Oracle Database | Oracle Databaseは世界初の商用RDBMSであり、大型コンピュータからパーソナルコンピュータまで、幅広いプラットフォームをサポートしている。 | 有償 |
MySQL | MySQLは、オープンソースのリレーショナルデータベース管理システムである。その名前は、共同設立者のMichael Wideniusの娘の名前である「My」と、Structured Query Languageの略称である「SQL」を組み合わせたものである。 | 無償 |
PostgreSQL | PostgreSQLはオープンソースのオブジェクト関係データベース管理システム(ORDBMS)である。「Postgres」や「ポスグレ」と呼ばれることも多い。 | 無償 |
NoSQL
RDBMS以外のデータベースのこと。
代表的なNoSQL
名称 | 概要 | 有償/無償 |
---|---|---|
MongoDB | RDBMSのようにレコードをテーブルに格納するのではなく、「ドキュメント」と呼ばれる構造的データをJSONライクな形式で表現し、そのドキュメントの集合を「コレクション」として管理する(このデータの物理的な格納はBSONと呼ばれるJSONのバイナリ版といえる形式で行われる)。 | 無償 |
Redis | Redisは、ネットワーク接続された永続化可能なインメモリデータベース。連想配列(キー・バリュー)、リスト、セットなどのデータ構造を扱える。 | 無償 |