1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

webサーバーやapplicationサーバーの指すものが人によって違う件

Posted at

はじめに

「webサーバー」「アプリケーションサーバー」という用語について、ページによって指しているものが異なっていたりして、「あれ、私の認識って間違っているの?」というような不安に駆られました。
そこで、本記事では、これら用語がどういった内容を指して使われているのか、目についた範囲でまとめました。

webサーバーとapplicationサーバー の基本的な説明

まずは、最もオーソドックスだと思われる定義を記載します。

webサーバー

webにおける様々な操作は、httpリクエストを介して行われます。このhttpリクエストを受け付け、clientにレスポンスを返すサーバーをwebサーバーと呼びます[1]。webサーバーを構築するために、サーバーにはwebサーバーソフトウェア (ミドルウェア) をインストールします。静的なコンテンツならば、webサーバーのみで配信ができます[2]。
スライド1.PNG

webサーバーソフトウェアの代表例として、以下の2つが挙げられます。

  • Apache Http Server (以降、誤解がない場合は、Apacheと記載する)
  • Nginx

これらの違いは、以下のqiita記事を参照してください[3]。

アプリケーションサーバー

アプリケーションサーバーは、ビジネスロジックを有し、動的処理を実現するサーバーないしそのミドルウェアを指します[2,4]。
アプリケーションサーバー単体でも、HTTPリクエストを処理することは可能な場合もありますが、様々な事情・制約により([5]を参照)、webサーバー(ソフトウェア) で最初に処理を受け、その後に必要に応じてアプリケーションサーバー(ソフトウェア)に、という流れが一般的です。

(備考:利用言語ごとのアプリケーションサーバーの構築方法については、末尾の「参考」に記しました。)

webサーバーとアプリケーションサーバーの指すものの違い

前述のように、根本的には、Nginxの公式サイト[2]の記述するように、

  • webサーバーは、HTTPリクエストを受け付け、静的コンテンツの配信が可能
  • applicationサーバーは、動的な処理を実行するソフトウェアやそれを有する環境

というように解釈できます。
ただ、人によっては解釈に幅があります。以下にこれらの用語がどういう内容を示す場合があるのか、記します。
用語の利用として、どこまでが許容でどこからが間違えなのかは個々人の判断ですが、少なくともweb記事ではこれらの解釈が見られました、という話です。

理解のため、以下にwebサーバーとアプリケーションサーバーの図を記載しました。
上側は、1つのマシンが両方の機能を兼ねている場合 (もしくは、アプリケーションサーバー単体でどうにかする場合)を指します。
下側は、所謂web3層構造[6] に従って、2つを分離した場合です。
こちらの図と見つつ、以降の話を進めていきます。

スライド2.PNG

webサーバー

以下の4つの事例が見られました。
注) 末尾のアルファベットは、アプリケーションサーバーの図内の(A)-(E) に対応します

  1. 静的なリクエストを配信するための専用サーバーもしくは構築に必要なミドルウェア自体を指す場合 (D)
  2. ApacheやNginxのインストールされたマシン内でこれらの担う担当範囲を指す場合 (B, D)
  3. ApacheやNginxがインストールされた、サーバー環境をさす場合 (A, D)
  4. webでの処理に関連するサーバー全体のざっくりとした総称 (A, D, E)

アプリケーションサーバー

以下の3つの事例が見られました。

  1. 動的なリクエストを配信するための専用サーバーもしくは構築に必要なミドルウェア自体を指す場合 (E)
  2. アプリケーションサーバーソフトウェアのインストールするマシンの中で、後者の担当範囲を指す場合 (C, E)
  3. アプリケーションの動くマシン全体を指す場合 (A, E)

3のことを、特にwebアプリケーションサーバーと呼んでいる場合もいるし、webアプリケーションサーバー = アプリケーションサーバーとみなしている場合もありました。

備考:言語ごとのアプリケーションサーバー

以下では、各言語においてアプリケーションサーバーがどのような環境で成り立つのか調べました。

Javaの場合

web上で動く、JavaアプリケーションをJava Servlet (以下、サーブレット) と呼ぶ。
似たような言葉で、Java Appletがあるが、これはクライアント側のブラウザで動くJavaアプリケーションを指す。ただし、JavaAppletは、Java11から廃止されている[7]。

サーブレットはそれ単体では動かず、それを動かすための規約を設定したミドルウェアが必要であり、これをサーブレットコンテナ (ウェブコンテナ) と呼ぶ。サーブレットコンテナには、tomcat, jetty, nettyなどが存在している[8]。

Javaの場合、このサーブレットコンテナ (e.g. tomcat) とサーブレット (e.g. javaプログラム) を合わせたものが、アプリケーションサーバーだと考えられます。

Node.jsの場合

Node.jsとは、「Chrome の V8 JavaScript エンジン で動作する JavaScript 環境」「Node.js はスケーラブルなネットワークアプリケーションを構築するために設計された非同期型のイベント駆動の JavaScript 環境」です[9]。
すなわち、Node.js本体でアプリケーションサーバーになるというよりかは、Node.jsおよびその環境で動くJavascript (最近ではTypescriptからの変換も多いですが) が、アプリケーションサーバーだと考えられます。

PHPの場合

PHPの場合は、アプリケーションサーバー用のソフトウェアは不要で、Apacheやnginxがあればよいとのこと[10]。

最後に

俺はこういう意味でつかっている、などありましたら、ご意見ください。

参考文献

[1] Jonathan Rasmusson 「初めての自動テスト」 O'Reilly Japan
[2] https://www.nginx.com/resources/glossary/application-server-vs-web-server/
[3] https://qiita.com/kamihork/items/49e2a363da7d840a4149
[4] https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%90
[5] https://qiita.com/tanayasu1228/items/11e22a18dbfa796745b5
[6] https://qiita.com/mk185/items/e914683410fd4ecaf0af
[7] https://xtech.nikkei.com/atcl/nxt/column/18/00294/051900003/
[8] https://techacademy.jp/magazine/17688
[9] https://nodejs.org/ja/
[10] https://www.sejuku.net/blog/96713

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?