サーバという名前を聞いて、皆様はどのようなものをイメージするでしょうか?学校で知識として学んだ方もいらっしゃるかもしれませんが、
なんとなく難しそう、なんとなく高度なことをやってるんだろうな、許可がないと触れることができないもの、とか。
どことなく遠い世界のものと感じている方も多いかもしれません。あるいは、クラウドやコンテナ技術の普及に伴って身近に感じている人もいるかもしれません。
サーバをすごくシンプルにいえば、サービスを提供するコンピュータのことです。実質はただのコンピュータです。皆さんの持ってるデバイスにWindowsやMacやChromeOSやAndroidやiOSが入っているように、サーバにはサーバ用のOSが入っています。サーバOSとして広く用いられているのが、LinuxやUnixです。コマンドラインでの操作を行うので敷居が高いように言われることも多いですが、ただのコンピュータなので使い方さえわかれば普段使ってるOSと同じくらい流暢に操作できるようになります。操作を覚えるまでのハードルが高いだけなのです。
インフラの領域では、ネットワークとサーバーの両方を扱えるエンジニアは非常に重宝されます。「ネットワークを作る」ことが「道路工事」だとしたら、「サーバーを作る」ことは「建物づくり」に近いことと言えます。
例えば、新しく街を作ろう、というプロジェクトが発足したとして、道路工事はあの業者に、建物はあの業者に、と分けて依頼することになります。ですが、もしこれをひとつの業者、ひとりのエンジニアに任せることができるとしたら…?いろんなところに発注を出すと、それだけ費用がかかります。ひとつの業者にワンストップ(全部まとめて)で依頼した場合も、当然費用は上がります。ですが、複数の業者に依頼するよりは安く済むことがほとんどです。
インフラのお仕事は、単にネットワークを作って終わりではありません。ネットワークは、そもそもデバイス間で通信したり、サーバにアクセスするために作るものです。一般的にはサーバを構築するところまでがインフラエンジニアの仕事です。
サーバを作ったら、その中で動いているアプリケーションソフトウェアを開発(Development:プログラマーの領域)し、動作させます。ユーザーはサーバにアクセスすることで、アプリケーションを利用することが出来ます。この関係性を頭に入れておきましょう。
Network、Server、Developmentといった様々な分野を統合的に行うことが出来るエンジニアは、それだけ高度な仕事を行うことが出来るとみなされ評価されるわけです。また、クラウドを業務レベルで最大限有効活用するためには、これらに加えIT基礎やハードウェア・コンピュータの知識が必要になります。(クラウドは『総合格闘技』です)
▲ 分野ごとに構築する部分が違う
クライアント(ユーザー)のデバイスは、ネットワーク経由で通信してサーバからコンテンツを受け取ります。この時、クライアント⇒サーバの通信だけでなく、サーバ⇒クライアントの返信となる通信も含めた双方向の通信が必要となることに気を付けてください。例外はありますが、一般的にはコンテンツを要求し、それに対する返事としてコンテンツを受け取るところまでが通信になります。これをクライアント・サーバ方式の通信といい、現在のインターネット上の通信のほとんどがクライアント・サーバ方式の通信とされています。そして、クライアントからの要求をRequest、サーバからの返信をResponse(もしくはReplyなど)と呼びます。
▲ テイクアウト前提
実際のWebページを閲覧するときも、これと同じことが起こっています。インターネット上のWebサーバにアクセスし、Webページのデータを要求します。
そして、WebサーバからのレスポンスとしてWebページが送られてきます。これを、Webブラウザで受け取り画面上に表示しています。
『行き』だけでなく、『帰り』の通信も成立しなければサーバからWebページを取得することはできません。
▲ Webサーバはリクエストに対してHTMLファイルを返す
また、提供するサービスによってはアクセスの情報を記録しておくこともあります。これにより、サービスの利用状況やアクセス状況によってクライアントに異なるレスポンスを返すことができます。上記のお店の例えで言うのであれば、「お得意さんの顔を覚えていて『いつもの』で注文が通じるお店」です。こういった性質をステートフル(Stateful)といいます。
逆に情報を保持せず、アクセスごとに毎回まったく同じ結果を返すような性質をステートレス(Stateless)といいます。ステートレスな通信では、毎回セッションごとに処理が完結するため処理としてはシンプルになります。そのため動作自体はステートレスの方が軽快と言えます。
例えばHTTP/HTTPSの通信はステートレスで処理され、ログインが必要なアプリケーションなどは「Cookie」を使ってセッション情報を保持しています。