はじめに
私は今年にWebエンジニアとして働きはじめたばかりの新米エンジニアなのですが、IT関連の勉強をする中で専門用語の多さに圧倒されました。「冗長化?」「スケールアウト?」「フェイルオーバー?」「MFA?」——どれも聞いたことはない。あるいは聞いたことがあっても、いざ説明しようとすると口が止まる。というようなことがありました。
そのため、この記事では、私が 仕事や学習の中で少しずつ理解してきた Web開発やセキュリティの基礎などの用語 を、わかりやすい形で整理しています。
Webエンジニアを目指す方やこれからエンジニアとして働く方の参考になれば幸いです。
フェイルオーバー(Failover)
フェイルオーバーとは、障害が発生した際に自動的に待機系(スタンバイ)へ切り替える仕組みです。
フェイルオーバーを確実に行うには、サーバーやネットワークの状態を正確に検知できる監視が必要です。
ヘルスチェック機能などを使用し、数分以内に異常を検出して迅速に切り替えが行われる状態が理想です。
ちなみに、ヘルスチェック機能とはサービスの応答状況を定期的に確認し、異常を検知するための基本的な監視機能のことを指しています。
冗長化(Redundancy)
冗長化とは、一部の構成要素が故障してもサービス全体を止めないための設計です。
電源の二重化、複数サーバーの配置、離れた拠点へのデータ複製などが代表的な手法です。
冗長化には、障害時のサービス停止を抑えられるというメリットはありますが、一方で基本的には冗長化にはコストが伴うため、 システムの重要度に応じてどこまで冗長化するかを選択することが現実的です。
ロードバランシング(Load Balancing)
ロードバランシングとは、利用者からのリクエストを複数のサーバーへ振り分けて、特定のサーバーだけに負荷が集中しないようにする仕組みです。
アクセスが増えてもサービスが重くなりにくく、障害にも強くなるという特徴があります。
ロードバランシングを利用する際に大切なのが、
ヘルスチェック(サーバーが正常かどうかの確認)と タイムアウト設定(応答が遅いサーバーをどのタイミングで切り離すか)です。
これらの設定が不適切だと、本来は正常なサーバーを誤って異常扱いしてしまい、かえってサービスが不安定になる可能性があります。
スケーラビリティ(Scalability)
スケーラビリティとは、負荷の増減に応じてシステムの処理能力を柔軟に調整できる能力です。
アクセスが増えてもサービスを維持するために重要な考え方です。
スケールの方法には大きく2種類あります。
ひとつは、より性能の高いサーバーに乗り換える方法で、これを「垂直スケーリング」と呼びます。
もうひとつは、同じ役割のサーバーを複数台追加して処理を分担させる方法で、これが「水平スケーリング」です。
身近な例でいうと、垂直スケーリングは“一人でこなせる仕事量を増やす”イメージで、
水平スケーリングは“同じ作業ができる人を増やしてチームで分担する”イメージというイメージを持つとわかりやすいと思います。
スケールアウト/スケールイン
スケールアウトはサーバー台数を増やすこと、スケールインはサーバー台数を減らすことを指します。
アクセス量やCPU使用率などの指標をもとに、必要なタイミングで自動的に増減させる仕組みが一般的です。
レイテンシ(Latency)
レイテンシとは、リクエストを送ってから応答が返ってくるまでの時間を指します。
ネットワークの混雑、距離、システム内部の処理速度など、さまざまな要因で変動します。
レイテンシが高いと、ページの表示が遅くなったり、ユーザー体験の低下につながるため、
Web サービスの性能を考える上で重要な指標となります。
スループット(Throughput)
スループットとは、一定時間あたりに処理できるデータ量やリクエスト数を示す指標です。
例えば、「1秒間に何件のリクエストを処理できるか」のように表されます。
システムの処理能力を評価する際に使われ、
スループットが高いほど、より多くのアクセスをさばける強いシステムといえます。
バックアップとディザスタリカバリ(DR)
バックアップは、データを別の場所に保存して万が一に備える仕組みです。
一方でディザスタリカバリ(DR)は、災害や大規模障害が起きても
サービスを再開できるようにするための取り組み全体を指します。
DR では、どれくらいの時間で復旧したいか(RTO)、
どこまでのデータを失わずに復元したいか(RPO)といった基準を決めておくことが重要です。
Infrastructure as Code(IaC)
IaC とは、サーバー構成やネットワーク設定などのインフラ環境を
コードとして管理する仕組みです。
コード化することで、環境の再現性が高まり、構成変更の履歴も残せます。
構築・更新・削除といった作業を自動化できるため、
手作業によるミスを防ぎ、複数環境を安定して管理できる点が大きなメリットです。
IaaS(Infrastructure as a Service)
IaaS は、サーバー・ネットワーク・ストレージなどの
インフラそのものをクラウド上で提供するサービス形態です。
利用者は OS やミドルウェアを自由に構築・設定でき、柔軟性が高い一方で、
インフラの運用管理の多くを自分で行う必要があります。
PaaS(Platform as a Service)
PaaS は、アプリケーションを動かすための
実行環境(OS・ランタイム・ミドルウェアなど)をまとめて提供するサービスです。
インフラの管理を意識せず、アプリの開発やデプロイに集中できる点が特徴です。
SaaS(Software as a Service)
SaaS は、メール・チャット・管理ツールなどの
完成したアプリケーションをインターネット経由で提供するサービスです。
インストールやアップデートが不要で、ユーザーはすぐに利用を開始できます。
MFA(Multi-Factor Authentication)
MFA は、パスワードだけに頼らず、
複数の要素を組み合わせて本人確認を行う仕組みです。
- 知識要素(パスワード)
- 所持要素(スマホ・認証アプリ)
- 生体要素(指紋・顔認証)
これを組み合わせることで、不正ログインのリスクを大きく減らせます。
特に重要なシステムでは、あらゆるログイン経路に MFA を導入することが望ましいです。
暗号化(Encryption)
暗号化は、データを第三者に読まれない形に変換する技術です。
しかし、重要なのは 鍵(キー)の管理です。
どれだけ強い暗号方式を使っても、鍵が漏れれば意味がありません。
鍵管理ツールやセキュリティルールを活用し、
安全に鍵を取り扱うことが暗号化の前提となります。
ハッシュ(Hash)
ハッシュとは、あるデータを特定のルールにしたがって
固定長の値(ハッシュ値)に変換する仕組みです。
また、ハッシュは 一方向(元に戻せない) という特徴があります。
ハッシュ値から元のデータを復元することは基本的にできません。
暗号化との違い
暗号化は「後で元のデータに戻すこと」を前提にしており、
秘密鍵・公開鍵などを使って復号できる仕組みです。
一方ハッシュは、
戻せない(不可逆)変換であり「元に戻す必要がない用途」に使われます。
キャッシュ(Cache)
キャッシュは、よく使うデータを一時的に保存しておき、
次回のアクセスを高速化する仕組みです。
ブラウザ、アプリ、サーバーなどさまざまな場所にキャッシュが存在します。
コンテナ(Container)
コンテナは、アプリケーションとその実行に必要な環境を
ひとまとめにして動かせる軽量な仮想化技術です。
どこでも同じ動作環境を再現できるため、開発・本番間の差異をなくしやすくなります。
トランザクション(Transaction)
トランザクションとは、データベースの操作を「ひとまとまりの処理」として扱い、
途中で失敗しても矛盾が起きないようにする仕組みです。
これを実現するための考え方が ACID 特性(不可分性・一貫性・独立性・永続性)です。
ACID 特性とは
-
Atomicity(原子性)
すべての処理は “全部成功” か “全部失敗” のどちらかになる。
中途半端な状態のまま残らない。 -
Consistency(一貫性)
トランザクションの前後で、データの整合性が保たれている状態。
ルール違反のデータが作られない。 -
Isolation(分離性)
複数のトランザクションが同時に実行されても、
互いに影響せず 個別に実行されたかのように扱われる。 -
Durability(永続性)
一度「成功」したデータ変更は、障害が起きても消えずに保存される。
これらの性質によって、データベースの信頼性が保証されます。
データレイク(Data Lake)
データレイクとは、形式や種類を問わず、
生データをそのまま大量に保存しておくための仕組みです。
データベースのように最初から厳密な構造を決める必要がなく、
ログ・画像・CSV・イベントデータなどをまとめて蓄積できます。
BI(Business Intelligence)
BI とは、蓄積したデータを分析して可視化し、
ビジネスの判断に役立てるための仕組みです。
ダッシュボードやグラフを用いて、売上・利用状況・改善ポイントなどを
リアルタイムに把握できるようにします。
サーバーレス(Serverless)
サーバーレスとは「サーバーが存在しない」という意味ではなく、
サーバーの管理や運用を利用者が意識しなくてよい形でサービスが提供される仕組みを指します。
実際にはサーバーが動いていますが、その準備・監視・メンテナンスはプラットフォーム側が自動で行います。
サーバーレスの大きな特徴は、イベントが発生したタイミングで処理が実行され、
アクセス量に応じて処理能力が自動で増減する点です。
また、サーバーの構築やパッチ適用、スケール設定などの運用負荷が大幅に減るため、
開発者はアプリケーションの機能開発に集中できるという大きなメリットがあります。
AWS でもサーバーレス関連のサービスが数多く提供されています。
代表例として、AWS Lambda、DynamoDB などがあります。
DOS攻撃(Denial of Service Attack)
DOS攻撃とは、特定のサーバーに大量のリクエストを送りつけ、
通常の利用者からのアクセスを処理できない状態に追い込む攻撃です。
サーバーの性能を使い切らせ、サービスを停止させることを狙っています。
DDoS攻撃(Distributed Denial of Service Attack)
DDoS攻撃とは、DOS攻撃をさらに強化したもので、
複数のコンピュータから同時に行う攻撃です。
攻撃元が分散しているため遮断が難しいです。
ファイアウォール(Firewall)
ファイアウォールとは、ネットワークの「門番」のような役割を持つ仕組みです。
外から入ってくる通信や、内部から外へ出ていく通信をチェックし、
許可した通信だけ通して、怪しい通信はブロックします。
これにより、不正アクセスや攻撃からシステムを守り、
内部のネットワークに勝手に侵入されるのを防ぐことができます。
レート制限(Rate Limiting)
レート制限とは、一定時間内に受け付けるリクエスト数を制御する仕組みです。
レート制限を導入することで、
- 過剰アクセスを抑制し、サービスの安定性を確保する
- 不正アクセスの試行回数を物理的に制限することで、セキュリティを強化する
- バックエンドへの負荷を平準化する
といった効果があります。
相対パスと絶対パス(Relative Path / Absolute Path)
相対パスは「今いる場所(カレントディレクトリ)」を基準にしたファイルの指定方法のことです。
../images/logo.png のように、親フォルダをたどる形で指定します。
絶対パスは、ファイルシステムやURLのルート(最上位)から指定する方法のことです。
例:/usr/local/bin/ や https://example.com/assets/。
Web開発では、どこからアクセスしても同じ場所を指すのが絶対パスです。
エッジコンピューティング(Edge Computing)
エッジコンピューティングとは、すべての処理を遠くのサーバーに送るのではなく、ユーザーの近くにある機器(ブラウザ・スマホ・近距離のサーバーなど)で処理を行う仕組みです。これにより、サーバーとの距離が短くなるため、
応答が速くなり、サーバー側の負荷も軽減できます。
SQLインジェクション(SQL Injection)
Webアプリの入力値を悪用して、データベースに不正なSQL文を実行させる攻撃です。
たとえば、以下のようにユーザー入力を直接SQLに埋め込むと危険です。
$query = "SELECT * FROM users WHERE name = '$username'";
ここに ' OR '1'='1 を入力されると、全ユーザー情報が取得されてしまいます。
このように、開発者が意図していないSQL文が実行されることで、情報漏洩やデータ改ざん、最悪の場合はデータベース削除につながることもあります。
対策としては、プレースホルダー(Prepared Statement)を使う、
入力値を検証・エスケープ処理する などがあります。
ユーザー入力をそのままSQLに渡さないことが最も重要です。
まとめ
私自身、すべてを完全に理解しているわけではありませんが、
各用語が何を示し、どのような場面で関係してくるのかを知るだけでも、 学習の進み方が大きく変わる場合もあると感じています。
本記事が、これから IT や Web 開発を学ぶ方にとって、
基礎概念を整理する一助となれば幸いです。