CGIとAPサーバー上のアプリケーションとの違い

CGIで動くアプリケーションとアプリケーションサーバー(APサーバー)上のアプリケーションはどう違うのでしょうか。
今回はその点について考えていきます。

まず、CGIとは何なのかについて復習すると、
CGIは、Webブラウザからパラメータとともに送られた要求に対し、Webサーバーがプログラムを呼び出して処理を実行し、パラメータに応じた結果(HTML)を返すという仕組みのことです。

CGIのメリットとデメリットを簡単にまとめると下記のようになります。

メリット
開発が容易
データのインプットは標準入力、アウトプットは標準出力を使用するため、標準入力・標準出力が扱える言語であれば、どんな言語でも開発可能(言語を選ばない)。そのため、開発環境を無償で構築できます。
デメリット
処理負荷が高い
Webサーバーは、CGIが起動されるごとに、子プロセスを生成し、CGIプログラムを実行します。そのため、リクエストの数だけ、あらたな子プロセスが生成され、それだけサーバーリソースを消費するということです。また、プロセスの生成はそれだけで高負荷な処理であるため、処理速度が遅くなります。

セキュリティ上の懸念
メリットに「開発が容易」という点を上げましたが、正しい知識を持ってプログラミングをしないと、CGIプログラムが重大なセキュリティホールにつながります。例えば、バッファーオーバーフローを攻撃者が意図的に発生させることが可能だった場合、その影響はCGIプログラムのみでなくWebサーバーにも及んでしまいます。また、OSコマンドインジェクションにより危険なコマンドの実行を許してしまうこともあります。このような攻撃によりパスワード漏洩やシステムの乗っ取りなどの事件が過去に実際に発生しており、セキュリティに関して十分に注意する必要があります。セキュリティ確保のためCGIの使用を禁止することもよくあります。

ここまでが前置きであり、次からが本題なのですが、
CGIで動くアプリケーションとAPサーバー上で動くアプリケーションの違いは、
本来は、CGIプログラムの作り込みにより、改善しなければならないようなことが、APサーバーが代わってやってくれるということです。

APサーバーが上記のようなCGIのデメリットや他のさまざま問題を解決してくれ、プログラマーは本来の業務処理の実装に注力できるようになります。
つまり、APサーバーはWebアプリケーションの開発を容易にするために開発されたサーバーとも言えるでしょう。