お金をかけずにサーバーの勉強をしよう

サーバーエンジニアの範囲

2022年7月14日

メニューへ戻る

そもそもサーバーエンジニアって何をしている人なのかですが、とりあえず以下の図をご覧ください。
スタック図

私が仕事をしてきた経験からだけですが、それぞれのエンジニアの活動範囲は対象の技術的にはこの図のようになっていました。

この図には現れていませんが、ネットワークエンジニアはネットワークだけの世界もお守りしています。

それぞれのエンジニアが顧客との付き合いがありますけれども、そこには触れておらずあくまで技術スタック上の保守範囲を描いています。

サーバーエンジニアっていうのは、コンピューターでサービスを提供するシステムの中では間に位置するところに生きていますので、アプリケーション開発エンジニアと話をするためにアプリケーション開発の知識が必要で、ネットワークも同様です。

そういう訳で比較的広範囲の知識を必要とするのですが、人間の能力には限界がありますので、どうしてもそれぞれが浅くなってしまうのを避けることができません。

残念ながら、開発の知識はアプリケーション開発エンジニアには及ばず、ネットワークの知識はネットワークエンジニアには及ばない、そんな感じになってしまいます。

そんな状況もあってか、最初からサーバーエンジニアを目指す人がいなくて、大体はアプリケーションエンジニアかネットワークエンジニアが会社で命令されて嫌々ながら転身してくるケースが多いかと思います。

それだけに未経験でこの世界に入ってくる事が少なく、それも敷居を高くしている原因かも知れません。


サーバエンジニアはサーバー環境の設計・構築をしますが、何故だか運用に携わっている人も多いようです。

運用は別にサーバーエンジニアでなくても良かろうと思うのですが、きっとそのシステムの上から下まで通して見ているのがサーバーエンジニアだけだからなんだと思います。

運用は技術が身につかないと捉える向きもありますが、運用を経験しているからこそ障害対応を通して障害に強いシステムはどうやれば作れるのか?という大事な点に対しての意識が他の誰よりも高くなることは間違いありません。
なにせシステムの障害で一番苦労するのは運用している人なのですから。

障害はそうそう起きるものではないので、実は障害対応から得られる経験と知見はレアであり他にない強みです。

運用に関わるサーバーエンジニアは、アプリケーションのバグでも出動ですし、ネットワークの障害でも出動です。

カバー範囲が広いだけに障害に巻き込まれる確率が高いので、望む望まないに関わらず障害対応の経験を積むのに事欠きません。


サーバーエンジニアをやってきた私がこのサイトで開発環境の構築をよく書くのは、アプリケーション実行環境を本番・開発と分けて設計・構築するのも仕事だからです。

この際にサーバーエンジニアだけで設計するはずもなく、アプリケーション開発チームと協議しながら彼等が欲しい環境を作っていきます。

開発環境と言っても、アプリケーション開発チームにとっては止まってしまえば開発が滞る訳ですから、サーバー運用チームとしては本番に準じた運用をしなければなりません。
開発環境というのはサーバー運用チームにとっては本番環境と大差ない感じです。

それを運用するのに「サーバーの稼働に関係ない Javaの実行環境なんてどうなってるか分からない」とかいう類の事を言うわけには行きません。

開発環境の整備に必要な知識は持っておいた方が良いというのが私の経験から言えることです。

サーバーエンジニアは Linuxならシェルスクリプト、Windowsなら Powershellでサーバー運用のためのスクリプトを書くことはありつつも開発言語でガリガリとコーディングをする必要性に迫られることは余りないのですが、アプリケーション開発エンジニアであるプログラマと話をするためには、彼等と同じ開発言語でのコーディングを経験していると大変良いと思います。


翻ってネットワークエンジニアとの共生についてです。

彼等はネットワークで常に通信ができる状態をキープしてくれる存在ですが、基本的に個々のサーバーがどんなデータをどれだけ通信するかまでは見ていないと思います。

これはOSIの7階層に代表されるネットワークプロトコルの仕組みのおかげで、責任範囲が綺麗に分かれるからだと思います。

IPでのデータのやり取りまでを担保するのが彼等の責任範囲で、TCP/UDPから上はサーバーとアプリケーションの責任範囲になります。

ネットワークという深遠な世界では専門知識が膨大ですから、サーバーエンジニアとネットワークエンジニアは同じインフラ属にいますが、大体別な人がやってる印象です。

だからと言ってサーバーエンジニアは「通信できればイイ」のではなく、ネットワークエンジニアと話をするために、イーサーネットから上のプロトコルについて勉強しておくと良いと思います。

「通信ができない…」という障害は良くありますが、その際にネットワーク言葉が通じるようになっていると、ネットワークエンジニアからの説明も咀嚼することができると思います。

サーバーエンジニアでもアプリケーション開発出身の人だと、IPアドレスで通信元と先を特定していることまでは理解していても、OSが提供する TCP/UDPがどういう仕組みなのかまでは押さえていない人は多いです。

通信プロトコルについては理論の勉強をし、Wiresharkなどで実際のパケットの中身を見てみるくらいのことは必須だろうと思っています。

何でかというと、障害対応の時に「パケットを拾えりゃなぁ…」と思ったことが何度もあったから。


以上、つらつらと書いていますが、サーバーエンジニアが他のエンジニアに比べて技術的に劣るものでもないと言いたかったのです。

そしてサーバーエンジニアはインフラですから、いなくなったらシステムは終わります。
結構大事なポジションなんですね。

それにしては世間の評価が低いのが気になりますが、それゆえに在野に絶対数が少ないものですから貴重な人材ではありますね。

ITエンジニアを目指している人に、こういう世界もあるということを知ってもらえれば幸いです。