エンジニアなら知っておきたいサーバーの基本
サーバーやネットワークについて勉強したのでざっくりと基本を説明します。
知らなくてもコードは書けますが、知っておくとエラーが起きた時の対応が早くなったり、コードを書く以外の部分で役に立つと思います。
1. Webアプリケーションが動く流れ
ブラウザにURL(https://example.com)を入力してから画面が表示されるまで、以下のプロセスが高速で行われています。
DNSによる名前解決
コンピューターはドメイン名(example.com など)のままでは通信相手を特定できません。まず、ドメインからIPアドレスを返す専用のサーバー(DNSサーバー)に問い合わせ、ドメインに対応するIPアドレスを取得します。
-
例:
example.com→104.18.27.120
HTTPリクエストとレスポンス
IPアドレスが判明すると、ブラウザ(クライアント)は取得したIPアドレスをもとにサーバーへ「このページ(データ)をください」というHTTPリクエストを送ります。
これに対し、サーバーは要求されたHTML、画像、JavaScriptなどのデータをHTTPレスポンスとして返します。
返されたデータを画面に表示することでWebサイトを表示することができます。
2. サーバーの正体
「サーバー」という言葉は抽象的に聞こえますが、その正体は実体のあるコンピューターです。
物理的な構成はPCと同じ
サーバーも、私たちが普段使うPCと同様に CPU・メモリ・ストレージ(SSD/HDD) を備えています。
- 高耐久・高信頼性: 24時間365日稼働し続けるため、ファン(冷却装置)の強化や、電源やディスクが壊れても動く「冗長化」が施されています。
- OS: デスクトップ用OSではなく、サーバー専用のWindows Serverや、安定性に優れたLinuxが主流です。
3. IPアドレスとポート番号
サーバーに正しくアクセスするためには、「どのコンピューターの」「どの窓口」に繋ぐかを指定する必要があります。
IPアドレス:ネットワーク上の住所
IPアドレスは、ネットワーク上のホスト(コンピューター)を一意に識別するための番号です。
- パブリック(グローバル)IPアドレス: インターネット上で世界中の誰とでも通信できる、一意の公的なアドレス。
- プライベートIPアドレス: 社内LANやクラウドの仮想ネットワーク(VPC)など、特定の閉じた範囲内で使われるアドレス。
ポート番号:プログラムごとの窓口
1台のサーバー内では複数のプログラム(Webサーバー、DBサーバー、メールサーバー等)が動いています。IPアドレスでサーバーまで辿り着いた通信を、サーバー内の特定のアプリケーションに振り分けるための「窓口番号」がポート番号です。
ポート番号は固定のものと変動するものがあり、0〜1023番はウェルノウンポートとして主要なサービスに割り当てられています。
- 80: HTTP(暗号化なしのWeb閲覧)
- 443: HTTPS(暗号化ありのWeb閲覧)
- 22: SSH(サーバーの遠隔操作用)
4. localhost について
開発中、自分の手元のコンピューター(ローカル環境)でWebアプリケーションを動かし、ブラウザで動作確認をすることがよくあります。このときに使われるのが localhost(ローカルホスト) です。
通常、通信はネットワークを介して外のサーバーへ向かいますが、localhostを指定すると、通信は外に出ることなく自分のコンピューター内で完結します。これは『ループバック』と呼ばれ、自分自身を指す特別なIPアドレス(127.0.0.1)が使われます。
ローカルで実行したWebアプリケーションは、http://localhost:3000 もしくは 127.0.0.1:3000 にアクセスすることで表示することができます。
5. Azure App Service について
セクション2で「サーバーの正体はコンピューターである」と説明しましたが、現代の開発では、物理的なサーバーを自分たちで用意・管理しないケースが増えています。その代表例が、Microsoft Azureが提供する Azure App Serviceです。
Azure App Service は PaaS(Platform as a Service) と呼ばれる形態のサービスです。AzureがOSやハードウェアの管理、セキュリティパッチの適用などを代行してくれるため、エンジニアはコードを書くことに集中できます。また、アクセス急増時に自動で処理能力を増やす『オートスケール』 などの運用も容易になります。
自分で作成したWebアプリケーションをサーバー上で動かすことで、ローカル内だけでなく、外のネットワークやデバイスからもアクセスすることができるようになります。
従来は物理サーバー(オンプレミス)で運用していましたが、最近ではAzureなどのサービスを利用してWebアプリケーションを動かすことが一般的となってきました。
まとめ
今回はWebアプリケーションがどのようにして稼働しているのか、どのようにしてユーザーのもとに表示しているのかをざっくりと説明しました。