全てのエンジニアが知っておきたいサーバ入門

# 初めに
現在 [AWS CloudTech](https://aws-cloud-tech.com/) でAWSについて学んでいますが、AWSについて学ぶ前に**「サーバとは」**について纏めようと思い本記事を作成しました。こちらの記事に対して、質問や間違っている点などありましたら是非コメント頂けたら嬉しいです。

# 1.サーバとは
**サーバ**という用語について誰しも一度は聞いた事があるかもしれないですが、一言でサーバといっても実際は複数の種類のサーバが存在します。例えば身近な例でいうと以下のような物。

* インターネットで何か調べたい物がある時に情報を提示してくれる**Webサーバ**
* 家族や友人などとメールの送受信をする時に利用される**メールサーバ**
* 情報を蓄積・管理を行う**データベースサーバ**

今回は上記3つの中で、**Webサーバ**と**データベースサーバ**の仕組みについて深堀していきます。

## 1-1.Webサーバへのアクセス
最初に例として[Yahoo](https://www.yahoo.co.jp/)のWebサーバにアクセスしてみます。

###### 1.ブラウザを開いてyahooと検索し、以下赤枠の箇所をクリックする。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/8087b972-302a-98fe-1b18-f91949f4c188.png)

##### 2.YahooのWebサイトにアクセス出来る事を確認します。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/fb939d98-8021-f01e-7874-573c12583cf5.png)
これで貴方はYahooのWebサーバにたどり着きました。より厳密にいうとWebサイトのソースコードを格納しているサーバにアクセスしている事になります。

##### 3.次に右クリックを実行して「ページのソースを表示」を実行します。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/3d749718-99ae-e439-f67a-169ac47cc097.png)

何やら恐ろしい文字列が表示されましたが、これが先ほどの手順2のWebサイトの画面を表示する際に使われているプログラムになります。

まぁ、こちらも厳密には**Hyper Text Markup Language**と**プログラミング言語**では少々意味が異なるのですが、今回の例では一括して以下のように覚えて貰えればOKです。

* プログラム : Webサイトの画面を表示する際に使われている恐ろしい文字列
* Webサーバ : Webサイトのプログラムを格納しているサーバ

## 1-2. Webサーバへのアクセスの仕組み
先程実際に[Yahoo](https://www.yahoo.co.jp/)のWebサーバにアクセスしましたが、今回は我々には見えない所で行われていた事について解説していきます。以下の図を参照下さい。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/22782e5f-1d9a-8dee-697a-247422bf5035.png)
ここから上記の図の流れについて1つずつ紐解いていきます。上記の通り今回YahooのWebサーバにアクセスする際のURLの欄(1-1-2.赤枠箇所)に**yahoo.co.jp**と表示されていましたがこの文字列を**ドメイン**と言います。

このドメインを利用して普段私達はWebサーバにアクセスしているのですが、実はこのドメインとは**IPアドレス**というサーバの住所を人間に分かりやすくした物になります。何故こんな面倒臭い事になっているのかについては以下を見て下さい。

```ruby:ドメインとIPの対応付け
yahoo.co.jp ⇄ 183.79.135.206
```
上記の**yahoo.co.jp**と**183.79.135.206**のどちらをURL欄に入れて検索を実行しても、YahooのTOPページにアクセスする事は出来ます。但し**2つを対比した際にどちらがYahooのサイトの物か分かりやすいか**については、間違いなく前者のドメインかと思います。

* 人間にとってはドメインの方がアクセス先を判断しやすい
* 一方でコンピューターはIPアドレスでしか判断出来ない

この問題を解決する為に先ほどの図の①と②の仲介を行なっています。そしてこの問題を解消してくれる物を**DNSサーバ**と呼び、これもまた**ユーザーがドメインでアクセスした時にコンピューターに理解出来るようIPアドレスに変換を行うサーバ**の1種です。

## 1-3.データベースサーバ とは
次にデータベースサーバについて解説していきます。こちらから[Amazon会員登録画面](https://www.amazon.co.jp/ap/register?_encoding=UTF8&openid.assoc_handle=jpflex&openid.claimed_id=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.identity=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0%2Fidentifier_select&openid.mode=checkid_setup&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.ns.pape=http%3A%2F%2Fspecs.openid.net%2Fextensions%2Fpape%2F1.0&openid.pape.max_auth_age=0&openid.return_to=https%3A%2F%2Fwww.amazon.co.jp%2Fgp%2Fyourstore%2Fhome%3Fie%3DUTF8%26ref_%3Drhf_custrec_newcust)にアクセスして下さい。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/3ee74d82-f5a3-26d1-e56e-70e3066aa3ee.png)
こちらもYahooの時と同様の仕組みでAmazonのWebサーバにアクセスしていますが、今回の場合は**ユーザーが入力したアカウント情報をサーバ側で保存する必要**があります。この情報を保存する時に利用されるのがデータベースサーバになります。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1173407/9fa14f18-74e5-4955-c65f-17c8bdb46fd7.png)
具体的にWebサーバとデータベースサーバのやり取りは上記のようなイメージで、会員登録画面で入力されたユーザー情報をデータベースサーバに保存します。また登録されているユーザ情報を抽出する時もデータベースサーバから情報を抽出します。

ざっくりと解説しましたが、以上がサーバについての解説となります。

#終わりに
今回はサーバを中心に解説しておりネットワークについてはあまり触れていませんが、以前[こちらの記事](https://qiita.com/kenmatsu201225/items/5671180d7f826f176227)でネットワークについても解説しているので良かったら読んでみて下さい。また[Twitter](https://twitter.com/kenmatsu201225)もやっているので是非絡んで貰えると嬉しいです。それではまたどこかで 以上。