【初心者向け】サーバサイドについて理解する

# はじめに
サーバサイドについてみなさんはすぐに説明できますか？私は正直「...」となってしまいます。今回はサーバサイドの概要について初心者向けにまとめます。サーバサイドについてあまりイメージがついていない方は、この記事を読んで、サーバサイドについて簡単にイメージできるようになりましょう！

対象 : <b>サーバサイドについてあまりイメージが湧かない人、新卒エンジニア</b>
内容 : <b>サーバサイドの概要</b>
この記事の所要時間 : <b>15分</b>

# 目次 
本記事(サーバサイドについて理解する)の目次になります。
・[サーバサイドの概要](#サーバサイドの概要)
・[サーバサイドでできること](#サーバサイドでできること)
・[おわりに](おわりに)
・[参照元](参照元)

# サーバサイドについて理解する
### サーバサイドの概要
そもそもサーバとはどういう意味でしょうか。(参照元:1. サーバ)
<b>サーバとは、クライアントからの要求に対してサービスを提供するコンピューター、またはアプリケーションのことを指します。サーバーには、ファイルの共有や保管に使うファイルサーバ、プリンターの共有管理をするプリントサーバ、電子メールを管理するメールサーバなど、機能によってさまざまなサーバがあります。</b>
つまり、サーバは私たちに<b>サービスを提供してくれるコンピュータ</b>ということです。

併せてクライアントとは、他のコンピュータやソフトウェアから機能や情報の提供を受けるコンピュータやソフトウェアのことを指します。クライアントはサーバの機能や情報の提供を受け、自らは利用者への情報の提示や入力・操作の受け付けなどを担当することが多い。クライアントがサーバに処理要求（リクエスト）を送り、サーバがこれに応じて処理を行い、結果を返答（レスポンス）する、という形で一連の処理が進められるということです。(参照元:2.クライアント)
- レスポンスのイメージは以下の図を参考にしてください(参照元:4. レスポンスの図) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2017201/cb3c5c81-39e9-6f2a-62fd-e4bb63d2115f.png)

では、サーバサイドとはどういう意味を指しているのでしょうか。

サーバサイドとは、<b>サーバー側でプログラムを実行したりデータを管理したりすることを指します。</b>つまり、サーバサイドでは、<b>サーバ側で何かしらのプログラムを実行したり、データを管理したりしている</b>ということです。(参照元:3. サーバサイド)

具体的な例を挙げると、以下のようなサーバがあります。
|  サーバ名| 機能 |
|:-:|:-:|
| Webサーバ  | webページを構成するhtmlファイルやcssファイルが保管されており、クライアントから要求されたページを取り出して送るサーバ  |
| データベースサーバ  | データベースを保持しており、クライアントからの要求を受け、データベース内の情報を検索し、処理結果を返すサーバ  |
| FTP（File Transfer Protocol）サーバ  | Webサーバーにファイルを送受信するサーバ。Webサーバーはクライアントからのアクセスがあった際にファイルを送信しますが、FTPサーバーでは、クライアントがコンピュータからサーバーにデータをアップロードしたり、サーバーからデータをダウンロードしたりすることを可能としている。  |
| SSH（Secure Shell）サーバ  |  クライアントの情報を暗号化するサーバ |

### サーバサイドでできること
サーバサイドで具体的にできることを以下4点記載します。(参照元:5. サーバサイドの概要 -Web開発を学ぶ-)
サーバサイドが機能することでどういったことに役に立つのか考えてみましょう。

| No | メリット |
|:-:|:-:|
| 1  | 情報を効率的に保管し、提供できること  |
| 2  | ユーザに合わせた使い勝手に改善できること  |
| 3  | コンテンツへのアクセスを制限できること  |
| 4  | セッションや途中状態の情報を補完できること  |

##### 1. 情報を効率的に保管し、提供できること
サーバーサイドでは、前項で説明したように、データベースにデータを格納し、動的にページを構成して、HTMLや他の形式（例えばPDFや画像など）のファイルを送り返すことができます。また、JSONファイルや XMLファイルなどを送り返すだけで、<b>送るデータ量を減らす</b>ことにもつながります。クライアント側でデータごとに静的なページを作ることは不可能です。つまり、サーバサイドが情報を効率的に保管し。提供してくれていることがわかります。

##### 2. ユーザに合わせた使い勝手に改善できること
サーバーが保管しているクライアントの情報を活用することで、ユーザーに合わせた使い勝手のサービスを実現できます。例えば、ECサイトを例に考えてみましょう。クレジットカード情報を保管して、再入力の手間がかからないようになっていると思います。地図アプリなどのサイトでは、ユーザーの現在位置や保管していた位置を使用して、目的地までの経路を提供したり、検索や実際の場所の情報から、その場所のおすすめ情報などを提供することも可能です。つまり、サーバサイドで保管している情報をもとに<b>ユーザに合わせた使い勝手を実現</b>していると言えます。

##### 3. コンテンツへのアクセスを制限できること
サーバーサイドでは、認証したユーザのデータアクセスを許可したり、未認証ユーザのデータアクセスを制限したりすることができます。例えば、instagramのようなSNSでは、自分のアカウントのデータにはアクセスできますが、フォロワーのデータには閲覧又はコメントしかできない状態です。ほかにも鍵アカウントにするなど、ユーザは特定のユーザを閲覧許可することもできます。この<b>コンテンツへのアクセスを制限できる</b>ということが、サーバサイドでできることの一つであると言えます。
※ちなみに本記事は誰でも閲覧可能な状態にしていますが、限定公開にして特定のユーザのみアクセス可能な状態にしたりすることもできます！

##### 4. セッションや途中状態の情報を補完できること
サーバーサイドでは、「セッション」を実装可能です。現在のサイトにアクセスしているユーザの情報を保管して、それに基づくレスポンスをしてくれます。例えば、オンラインゲームの際に、ユーザのログイン履歴情報を補完し、プレイ途中のデータを保存して、そこから再開できるできるようしたりできます。このように、サーバサイドで「セッション」を実現することもできます。

### おわりに
本記事では、簡単にサーバサイドの概要について触れました。サーバーサイドとは、クライアントからの要求に対してサービスを提供するコンピューター、またはアプリケーションであること、そしてあらゆる例をもとにイメージが湧いたのではないかと思います。本記事を読んでくださった方で、もし参考となる図書などあったら、ぜひコメントに書いていただきたいです。

### 参照元
以下に本記事の用語などの参照元を記載します。
| No | 内容 | リンク |
|:-:|:-:|:-:|
| 1  | サーバ  | https://e-words.jp/w/%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88.html#:~:text=IT%E3%81%AE%E5%88%86%E9%87%8E%E3%81%A7%E3%81%AF%E3%80%81%E4%BB%96,%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E3%82%AF%E3%83%A9%E3%82%A4%E3%82%A2%E3%83%B3%E3%83%88%E3%81%A8%E3%81%84%E3%81%86%E3%80%82  |
| 2  | クライアント  | https://yougo.ascii.jp/caltar/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC  |
| 3  | サーバサイド  | https://yougo.ascii.jp/caltar/%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%B5%E3%82%A4%E3%83%89  |
| 4  | レスポンスの図  | https://medium-company.com/http-get-post-%E9%81%95%E3%81%84/  |
| 5  | サーバサイドの概要 <br>-Web開発を学ぶ-  | https://developer.mozilla.org/ja/docs/Learn/Server-side/First_steps/Introduction  |