はじめに
私たちは普段、さまざまなWebサービスや業務システムを利用しています。
例えば、
- Webサイトを閲覧する
- ネットショッピングで商品を購入する
- 社内システムで勤怠を登録する
- ファイルサーバから資料を取得する
といった操作です。
これらのシステムでは、利用者が操作するコンピュータと、サービスを提供するコンピュータが役割を分担していることがあります。
このような仕組みをクライアントサーバシステムといいます。
今回は、次の内容を学びます。
クライアントサーバシステム
│
├─ クライアントサーバシステムの特徴
│
├─ クライアントサーバアーキテクチャ
│ ├─ 2層クライアントサーバシステム
│ └─ 3層クライアントサーバシステム
│
├─ Webシステムの3層構造
│ ├─ Webサーバ
│ ├─ APサーバ
│ └─ DBサーバ
│
└─ クライアントサーバ関連技術
├─ ストアドプロシージャ
├─ RPC
├─ NFS
└─ MVCモデル
それでは、基本から確認していきましょう。
1. クライアントサーバシステムとは
1-1. クライアントとサーバ
**クライアントサーバシステム(Client-Server System)**とは、
サービスを要求するクライアントと、サービスを提供するサーバが役割を分担するシステムです。
まず、2つの用語を整理しましょう。
| 用語 | 役割 | 具体例 |
|---|---|---|
| クライアント | サービスを要求・利用する | PC、スマートフォン、Webブラウザ |
| サーバ | サービスを提供する | Webサーバ、DBサーバ、ファイルサーバ |
例えば、Webサイトを閲覧するときの流れは次のようになります。
クライアント
┌────────────┐
│ Webブラウザ │
└──────┬─────┘
│
│ ① ページを要求
▼
┌────────────┐
│ Webサーバ │
└──────┬─────┘
│
│ ② ページを返す
▼
クライアント
┌────────────┐
│ ページ表示 │
└────────────┘
クライアントが要求を送り、サーバが処理して応答します。
この要求と応答が、クライアントサーバ方式の基本です。
1-2. クライアントサーバシステムの特徴
クライアントサーバシステムには、次のような特徴があります。
① 役割を分担できる
例えば、Webサービスであれば、
クライアント
→ 画面表示・ユーザー操作
サーバ
→ データ管理・業務処理
という役割分担ができます。
すべての処理を1台のコンピュータで実行する必要がありません。
② データを集中管理しやすい
複数のクライアントが同じサーバへアクセスすることで、共通のデータを利用できます。
クライアントA ─┐
│
クライアントB ─┼── DBサーバ
│ │
クライアントC ─┘ 共通データ
例えば、会社の社員情報をDBサーバで管理すれば、複数の部署が同じ情報を利用できます。
③ 機能を拡張しやすい
サーバの性能を向上させたり、サーバを追加したりすることで、システムを拡張できる場合があります。
ただし、実際の拡張性はアプリケーションやデータの構成によって異なります。
④ ネットワークへの依存がある
クライアントとサーバはネットワークを介して通信するため、ネットワーク障害が発生するとサービスを利用できなくなる可能性があります。
2. クライアントサーバアーキテクチャ
クライアントサーバシステムは、機能をどのように分担するかによって構成が変わります。
代表的なのが、
- 2層クライアントサーバシステム
- 3層クライアントサーバシステム
です。
ここでいう「層」は、単純なサーバ台数ではなく、システムの機能をどのように分割しているかを表します。
3. 2層クライアントサーバシステム
3-1. 2層クライアントサーバシステムとは
**2層クライアントサーバシステム(Two-Tier Client-Server Architecture)**とは、
クライアント側とサーバ側の2つに機能を分ける構成です。
典型的な構成では、
- クライアント:画面表示・業務処理
- サーバ:データ管理
という役割分担を行います。
2層クライアントサーバ
┌─────────────────┐
│ クライアント │
│ │
│ 画面表示 │
│ 業務処理 │
└────────┬────────┘
│
│ SQLなど
▼
┌─────────────────┐
│ DBサーバ │
│ │
│ データ管理 │
└─────────────────┘
例えば、社員がPCにインストールした業務アプリケーションから、直接データベースへアクセスする構成です。
3-2. 2層構成のメリット
① 構成が比較的シンプル
クライアントとサーバの2層で構成するため、比較的小規模なシステムでは構築しやすい場合があります。
② クライアント側で処理できる
業務処理の一部をクライアント側で実行できるため、サーバ側の処理負荷を分担できます。
3-3. 2層構成のデメリット
① クライアントの管理負担が増える
業務アプリケーションを各クライアントへインストールする場合、更新作業が必要になります。
例えば、
社員100人
↓
業務アプリを更新
↓
100台の端末への対応が必要
という状況が考えられます。
② クライアントからDBへ直接接続する
クライアントがDBサーバへ直接接続する構成では、接続数やアクセス制御の管理が課題になる場合があります。
③ 業務処理が端末側に分散する
業務処理をクライアントに多く実装すると、変更時に各端末のアプリケーション更新が必要になります。
4. 3層クライアントサーバシステム
4-1. 3層クライアントサーバシステムとは
**3層クライアントサーバシステム(Three-Tier Client-Server Architecture)**とは、
システムの機能を次の3つに分離する構成です。
- プレゼンテーション層
- アプリケーション層
- データ層
それぞれの役割を確認しましょう。
| 層 | 役割 |
|---|---|
| プレゼンテーション層 | 画面表示・入力受付 |
| アプリケーション層 | 業務処理・ビジネスロジック |
| データ層 | データの保存・検索・更新 |
4-2. 3層構成の仕組み
3層クライアントサーバ
┌───────────────────────┐
│ プレゼンテーション層 │
│ │
│ 画面表示・入力受付 │
└───────────┬───────────┘
│
▼
┌───────────────────────┐
│ アプリケーション層 │
│ │
│ 業務処理 │
│ ビジネスロジック │
└───────────┬───────────┘
│
▼
┌───────────────────────┐
│ データ層 │
│ │
│ データ保存 │
│ 検索・更新 │
└───────────────────────┘
例えば、ネットショップで商品を購入する場合を考えます。
プレゼンテーション層
利用者が商品を選択し、購入ボタンを押します。
アプリケーション層
在庫確認、合計金額の計算、注文処理などを行います。
データ層
商品情報や注文情報をデータベースへ保存します。
このように、画面・業務処理・データ管理を分離するのが特徴です。
4-3. 3層構成のメリット
① 保守性が向上する
業務処理をアプリケーション層へ集約することで、処理内容を変更しやすくなります。
例えば消費税の計算方法を変更する場合、計算処理をアプリケーション層へ集約していれば、各クライアントに同じ処理を実装する必要がありません。
② 拡張性を確保しやすい
負荷が増えた場合、必要な層のサーバを増強するなど、層ごとに対策を考えられます。
③ セキュリティを設計しやすい
クライアントからDBサーバへの直接接続を避け、アプリケーション層を介してアクセスさせる構成にできます。
ただし、3層に分けるだけで安全になるわけではなく、認証・認可・通信制御などの適切な設計が必要です。
4-4. 3層構成のデメリット
① 構成が複雑になる
層が増えるため、システム全体の設計や管理が複雑になる場合があります。
② 通信が増える
各層の間で通信が発生するため、ネットワーク遅延などの影響を受ける可能性があります。
③ 構築・運用コストが増える場合がある
複数のサーバやミドルウェアを利用する構成では、運用管理の負担が増えることがあります。
5. 2層と3層の違い
ここまでの内容を比較しましょう。
| 比較項目 | 2層構成 | 3層構成 |
|---|---|---|
| 機能分割 | クライアント・サーバ | プレゼンテーション・アプリケーション・データ |
| 業務処理 | クライアント側に置く構成が典型 | アプリケーション層へ集約 |
| DBアクセス | クライアントから直接アクセスする構成が典型 | アプリケーション層を介する |
| 保守性 | クライアント更新が必要になりやすい | 業務処理を集中管理しやすい |
| 拡張性 | 構成によって制約がある | 層ごとに拡張しやすい |
| 構成 | 比較的シンプル | 比較的複雑 |
🍯 はちみつ屋さんで例えると
2層構成
お客さん
│
│ 注文・計算・手続き
▼
倉庫
│
└─ 商品を保管
お客さん側で多くの処理を行い、倉庫から必要な商品情報を取得するイメージです。
3層構成
お客さん
↓
受付担当
↓
注文処理担当
↓
倉庫担当
受付・業務処理・データ管理の役割が分かれています。
3層構成では、役割を明確に分けることで、業務内容の変更や拡張に対応しやすくなります。
6. Webシステムの3層構造
ここからは、実際のWebシステムでよく利用される構成を見ていきましょう。
Webシステムでは、次の3種類のサーバを組み合わせることがあります。
- Webサーバ
- APサーバ
- DBサーバ
これをWebシステムの3層構造と呼びます。
6-1. Webシステムの構成
利用者
│
▼
┌─────────┐
│ブラウザ │
└────┬────┘
│ HTTP/HTTPS
▼
┌─────────┐
│Webサーバ│
└────┬────┘
│
▼
┌─────────┐
│APサーバ │
└────┬────┘
│
▼
┌─────────┐
│DBサーバ │
└─────────┘
それぞれの役割を確認しましょう。
6-2. Webサーバ
**Webサーバ(Web Server)**は、WebブラウザからのHTTPリクエストを受け付け、Webコンテンツなどを返す役割を持ちます。
例えば、
利用者
「トップページを表示して!」
↓
Webサーバ
「HTMLを返します」
という処理です。
代表的なWebサーバソフトウェアには、Apache HTTP ServerやNginxなどがあります。
また、Webサーバは必要に応じてリクエストをAPサーバへ転送する役割も担います。
6-3. APサーバ
**APサーバ(Application Server)**は、アプリケーションの業務処理を実行するサーバです。
例えば、
利用者
「商品を購入したい!」
↓
APサーバ
「在庫を確認します」
「合計金額を計算します」
「注文処理を実行します」
という役割です。
JavaのWebアプリケーションでは、Apache Tomcatなどが利用されます。
なお、Tomcatは厳密にはServletコンテナであり、JavaのWebアプリケーションを実行するための機能を提供します。
6-4. DBサーバ
**DBサーバ(Database Server)**は、データベースを管理するサーバです。
例えば、
APサーバ
「商品ID100の在庫数を教えて」
↓
DBサーバ
「在庫は20個です」
という処理です。
代表的なデータベース管理システムには、
- MySQL
- PostgreSQL
- Oracle Database
- Microsoft SQL Server
などがあります。
6-5. 商品購入時の処理の流れ
ネットショップで商品を購入する場合を考えてみましょう。
① 利用者が購入ボタンを押す
│
▼
② Webサーバがリクエストを受け付ける
│
▼
③ APサーバが注文処理を実行する
│
▼
④ DBサーバで在庫を確認する
│
▼
⑤ APサーバが注文を確定する
│
▼
⑥ DBサーバへ注文情報を保存する
│
▼
⑦ Webサーバ経由で結果を返す
│
▼
⑧ 利用者に購入完了画面を表示する
このように、複数のサーバが役割を分担して1つのサービスを提供します。
6-6. 3層クライアントサーバとWeb3層構造の違い
ここは少し注意が必要です。
3層クライアントサーバシステムは、主に機能を3つに分ける考え方です。
一方、Web3層構造は、Webサーバ・APサーバ・DBサーバというサーバの役割分担を表すときによく使われます。
| 項目 | 3層クライアントサーバ | Web3層構造 |
|---|---|---|
| 分け方 | 機能による分割 | Webシステム内のサーバの役割 |
| 第1層 | プレゼンテーション層 | Webサーバ |
| 第2層 | アプリケーション層 | APサーバ |
| 第3層 | データ層 | DBサーバ |
| クライアント | プレゼンテーション層を担うことがある | Webサーバの外側にブラウザが存在する |
ただし、実際にはこれらの概念が重なることもあります。
また、3層だから必ず3台の物理サーバが必要というわけではありません。
例えば、1台のサーバ上でWebサーバ・APサーバ・DBサーバを動作させることもできます。
逆に、1つの層を複数のサーバで構成することもあります。
7. クライアントサーバ関連技術
ここからは、クライアントサーバシステムと関係の深い4つの技術を紹介します。
クライアントサーバ関連技術
│
├─ ストアドプロシージャ
│ └─ DB側で処理を実行
│
├─ RPC
│ └─ 遠隔の処理を呼び出す
│
├─ NFS
│ └─ ネットワーク越しにファイル共有
│
└─ MVCモデル
└─ アプリケーションの役割分担
8. ストアドプロシージャ
8-1. ストアドプロシージャとは
**ストアドプロシージャ(Stored Procedure)**とは、
データベース内に保存された一連の処理を、必要に応じて呼び出して実行する仕組みです。
例えば、商品購入時に次の処理が必要だとします。
① 在庫を確認する
② 在庫数を減らす
③ 注文情報を登録する
④ 処理結果を返す
これらの処理をデータベース側にまとめて保存しておくことができます。
8-2. ストアドプロシージャの仕組み
クライアント
│
│ 処理を呼び出す
▼
┌──────────┐
│ DBサーバ │
│ │
│ ストアド │
│プロシージャ│
│ │
│ ① 在庫確認│
│ ② 在庫更新│
│ ③ 注文登録│
└─────┬────┘
│
▼
実行結果
クライアントやアプリケーション側から、保存済みの処理を呼び出して実行します。
8-3. ストアドプロシージャのメリット
① 処理を再利用できる
同じ処理を複数のアプリケーションから利用できます。
② 通信回数を減らせる場合がある
複数のSQL文を個別に送る代わりに、ストアドプロシージャを呼び出すことで、通信回数を減らせる場合があります。
③ 処理をDB側へ集約できる
データベースに関する処理をDB側でまとめて管理できます。
8-4. ストアドプロシージャの注意点
一方で、
- DBサーバへ処理負荷が集中する
- DBMS固有の構文に依存する場合がある
- アプリケーションとDBの役割分担が複雑になる場合がある
といった注意点があります。
🍯 はちみつ屋さんで例えると
毎回、
在庫を確認して!
注文を記録して!
在庫を減らして!
と個別にお願いするのではなく、
「注文処理を実行して!」
という一言で、あらかじめ決められた一連の処理を実行してもらうイメージです。
9. RPC
9-1. RPCとは
**RPC(Remote Procedure Call)**とは、
ネットワーク上の別のコンピュータにある処理を、呼び出して実行する仕組みです。
日本語では、遠隔手続呼出しと呼ばれます。
通常、プログラム内の関数を呼び出す場合は、同じコンピュータ上で処理が実行されます。
一方、RPCでは別のコンピュータにある処理を呼び出せます。
9-2. RPCの仕組み
クライアント
┌──────────┐
│プログラム│
│ │
│処理を要求│
└────┬─────┘
│
│ RPC
▼
┌──────────┐
│ サーバ │
│ │
│処理を実行│
└────┬─────┘
│
│ 結果を返す
▼
クライアント
例えば、
クライアント
「売上合計を計算して!」
↓ RPC
サーバ
「計算します」
↓
クライアント
「結果を受け取りました」
というイメージです。
9-3. RPCの特徴
RPCでは、遠隔の処理を通常の関数呼び出しに近い形で利用できます。
ただし、実際にはネットワーク通信が発生します。
そのため、
- 通信遅延
- ネットワーク障害
- サーバ障害
- タイムアウト
などを考慮する必要があります。
ローカルの関数呼び出しと完全に同じ動作になるわけではない点が重要です。
9-4. RPCの利用例
RPCは、分散システムやサービス間通信などで利用されます。
例えば、
注文サービス
│
│ RPC
▼
在庫管理サービス
│
│ RPC
▼
配送管理サービス
というように、複数のサービスが処理を呼び出し合う構成です。
10. NFS
10-1. NFSとは
**NFS(Network File System)**とは、
ネットワーク上の別のコンピュータにあるファイルを、手元のコンピュータから利用できるようにする仕組みです。
主にUNIX系OSやLinuxなどで利用されます。
10-2. NFSの仕組み
NFSサーバ
┌─────────────┐
│ 共有フォルダ│
│ │
│ fileA.txt │
│ fileB.txt │
└──────┬──────┘
│
ネットワーク
│
┌──────┴──────┐
│ │
▼ ▼
クライアントA クライアントB
例えば、NFSサーバにある共有ディレクトリを、クライアント側でマウントします。
すると、クライアントはネットワーク上のファイルを、自分のファイルシステムの一部のように扱えます。
10-3. NFSのメリット
① ファイルを共有できる
複数のコンピュータから共通のファイルを利用できます。
② データを集中管理しやすい
ファイルをNFSサーバ側に保存することで、データ管理を集約できます。
③ UNIX系OSとの親和性が高い
Linuxなどの環境で広く利用されています。
10-4. NFSの注意点
NFSではネットワークを介してファイルへアクセスするため、
- ネットワーク遅延
- NFSサーバの障害
- アクセス権限の設定
- 複数クライアントによる同時アクセス
などを考慮する必要があります。
また、NFSとSMBはどちらもファイル共有に利用されますが、異なるプロトコルです。
| 項目 | NFS | SMB |
|---|---|---|
| 正式名称 | Network File System | Server Message Block |
| 主な用途 | ネットワークファイル共有 | ネットワークファイル共有 |
| 代表的な環境 | UNIX・Linux系 | Windows系 |
| 特徴 | ファイルシステムとしてマウントして利用 | ファイル・プリンタ共有などに利用 |
現在では、どちらも複数のOSで利用できます。
11. MVCモデル
11-1. MVCモデルとは
**MVC(Model-View-Controller)**とは、
アプリケーションをModel・View・Controllerの3つの役割に分けて設計する考え方です。
MVCは、アプリケーションの内部構造を整理するための設計パターンです。
11-2. MVCの3つの役割
| 要素 | 正式名称 | 主な役割 |
|---|---|---|
| M | Model | データや業務ロジックの管理 |
| V | View | 画面表示 |
| C | Controller | 入力を受け取り処理を調整する |
それぞれ詳しく見ていきましょう。
11-3. Model
**Model(モデル)**は、アプリケーションのデータや業務ロジックを担当します。
例えば、ネットショップであれば、
商品情報
在庫情報
注文情報
価格計算
業務ルール
などに関係します。
11-4. View
**View(ビュー)**は、利用者へ情報を表示する役割です。
例えば、
商品一覧画面
商品詳細画面
購入確認画面
注文完了画面
などです。
11-5. Controller
**Controller(コントローラ)**は、利用者からの入力を受け取り、必要な処理を調整する役割です。
例えば、
利用者
「購入ボタンを押す」
↓
Controller
「注文処理を実行する」
というイメージです。
11-6. MVCの処理の流れ
Webアプリケーションの一般的な実装例として、次のような流れがあります。
利用者
│
│ 操作
▼
┌────────────┐
│ Controller │
└──────┬─────┘
│
│ 処理を依頼
▼
┌────────────┐
│ Model │
└──────┬─────┘
│
│ 処理結果
▼
┌────────────┐
│ View │
└──────┬─────┘
│
▼
画面表示
実際のデータの受け渡し方は、フレームワークや実装方式によって異なります。
11-7. MVCのメリット
① 役割を分離できる
画面表示と業務ロジックを分離することで、プログラムの構造を整理しやすくなります。
② 保守性が向上する
画面デザインの変更と業務処理の変更を分けて考えられます。
③ 分担して開発しやすい
画面担当、業務処理担当など、役割に応じて開発を進めやすくなります。
12. MVCと3層アーキテクチャの違い
ここは混同しやすいポイントです。
どちらも3つに分かれていますが、同じものではありません。
3層アーキテクチャ
システム全体の機能を、
プレゼンテーション層
↓
アプリケーション層
↓
データ層
に分離する考え方です。
MVCモデル
アプリケーションの内部構造を、
Model
View
Controller
に分ける考え方です。
| 比較項目 | 3層アーキテクチャ | MVC |
|---|---|---|
| 分類 | システムアーキテクチャ | ソフトウェア設計パターン |
| 主な目的 | 機能の階層化 | アプリケーション内の責務分離 |
| 構成 | プレゼンテーション・アプリケーション・データ | Model・View・Controller |
| 適用範囲 | システム全体の構成 | アプリケーションの設計 |
| 関係 | MVCと組み合わせられる | 3層構成内でも利用できる |
例えば、3層構成のWebシステムで、アプリケーションをMVCモデルに基づいて開発することもあります。
「3つに分ける」という共通点はありますが、分割する目的と対象が異なることを覚えておきましょう。
13. クライアントサーバ関連技術の比較
今回紹介した4つの技術を整理します。
| 技術 | 正式名称 | 主な役割 |
|---|---|---|
| ストアドプロシージャ | Stored Procedure | DB内に保存した処理を呼び出して実行 |
| RPC | Remote Procedure Call | 遠隔コンピュータの処理を呼び出す |
| NFS | Network File System | ネットワーク越しにファイルを共有 |
| MVC | Model-View-Controller | アプリケーションの役割を分離 |
それぞれ役割が異なります。
ストアドプロシージャ
→ DB側で処理を実行
RPC
→ 遠隔の処理を呼び出す
NFS
→ 遠隔のファイルを利用
MVC
→ アプリケーションを役割分担
この違いを理解しておくと、試験問題でも判断しやすくなります。
まとめ
この記事で覚えること
- クライアントサーバシステムは、サービスを要求するクライアントと提供するサーバが役割を分担する方式
- 2層クライアントサーバシステムでは、クライアントとサーバの2層に機能を分割する
- 典型的な2層構成では、クライアントが画面表示と業務処理を担当し、DBサーバがデータ管理を担当する
- 3層クライアントサーバシステムでは、プレゼンテーション層・アプリケーション層・データ層に分割する
- Webシステムの3層構造では、Webサーバ・APサーバ・DBサーバが役割を分担する
- 3層構造は、必ずしも3台の物理サーバを意味しない
- ストアドプロシージャは、DB内に保存した処理を呼び出して実行する仕組み
- RPCは、ネットワーク上の別のコンピュータにある処理を呼び出す仕組み
- NFSは、ネットワーク上のファイルを手元のファイルシステムのように利用する仕組み
- MVCモデルは、Model・View・Controllerに役割を分ける設計パターン
- MVCと3層アーキテクチャは、分割する目的と対象が異なる
🍯 はちみつメモ
クライアントサーバシステムは「要求する側」と「提供する側」の役割分担が基本!
2層構成はクライアントとサーバ、3層構成は画面・業務処理・データ管理に分ける。
Webシステムでは、Webサーバ・APサーバ・DBサーバの役割を理解しよう。
そして関連技術は、ストアドプロシージャ=DB内の処理、RPC=遠隔処理、NFS=遠隔ファイル、MVC=アプリケーションの役割分担と覚えると整理しやすいよ!