質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.36%

  • サーバ

    632questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • Tomcat

    443questions

  • Java EE

    319questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

  • Go

    311questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

  • unicorn

    59questions

    Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。

Node.jsやGo言語でアプリケーションサーバー必要でないのはなぜでしょうか?

受付中

回答 1

投稿 2017/12/08 19:31

  • 評価
  • クリップ 1
  • VIEW 138

jimyo

score 206

普段Java EEを使ってアプリケーションを書いています。
Javaで書かれたサーバープログラムの場合Tomcatなど、Java EEだとWebSphereやGlassfishなどのアプリケーション・サーバー上にデプロイして動かすことになると思います。
RubyにもUnicornやThinなどがあると思います。

不勉強で申し訳ないのですが、私はずっと「サーバープログラムを動かすためにはアプリケーションサーバーが必要」だとばかり思っていました。
先日Node.jsの勉強を初めたのですが、Node.jsやGo言語にはアプリケーションサーバーがなく、ポートのlistenなどの処理を自分で書いて実行するものだと知りとても驚きました。

これを知ったとき、「デプロイが簡単そうだ」「処理が追いやすくてわかりやすい」など良い印象ばかり感じたのですが、同時に、「アプリケーションサーバーがなくて大丈夫なんだろうか」と疑問に思っています。

なんとなく自分の中で「アプリケーションサーバーがいい感じに処理していてくれている」という安心感があるため、いままでアプリケーション・サーバーが担当していた部分を自分で書くということに(この認識があっているのか心配ですが・・・)不安を感じています。(リッスンの仕方やメソッドの呼び方など)

なぜNode.jsやGo言語にはアプリケーション・サーバーが必要ではないのか、あるいは、なぜJavaやRubyではアプリケーション・サーバーが必要なのか教えていただきたいです。

また、アプリケーション・サーバーが存在することのメリット・デメリットもわかる方がいたら教えてほしいです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

単純にNode.jsとGo言語はシンプルな設計思想だからだと思いますよ。
Node.jsはJS譲りのイベントループを利用した怠惰なリクエスト待ちを実現してくれますし、
Go言語はGoルーチンという低コストでスレッドを発行出来る機能で並列処理が書きやすいです。

この辺が追い風になってC10K問題をあっさり解決してくれます。
超エコで超高速なやつらの性能比較: Go vs Node.js (vs Vert.x) - Qiita

不安を感じています。

当然Node.jsやGo言語も書き捨てるのではなく、
ある程度責任を持ったサーバーを運用するのであればどうしても行数が必要になります。

フレームワークがあるのでその辺は誤差だよ誤差。
Javaでサーバ建てる時もフルスクラッチで書いたりしないでしょ!

アプリケーション・サーバーが存在することのメリット

ApacheやNginXは静的コンテンツ配信やリバプロ目的でまだまだ使われるでしょう。
それ目的の為に作られたアプリは強いので餅は餅屋です。
1行たりとも書かなくても高速に動くのに、動作を保証してくれるのは強すぎるでしょう。


マイクロサービス的な思想が最近強いですね。
Docker等の登場でコンテナ運用に関して皆目を向けているのも追い風でしょう。

投稿 2017/12/08 21:20

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.36%

関連した質問

  • 受付中

    言語を使い分けてる方に質問です

    どういう時にどういう言語を使いますか? また、その理由も教えていただけるとうれしいです。 場合によっては仕方なくその言語を使っていたりするとおもいます。

  • 解決済

    (Java).warファイルと.earファイルの違いは?

    Java初心者です。 .warファイルと.earのファイルの違いをどなたか教えていただけませんか?

  • 解決済

    IoTの仕組みについて

    お世話になってます。 今後、全てのものがインターネットと繋がる・・・という事が速いスピードで移り変わってくるものだと思います。 とても興味のある事ですが、お恥ずかしい質問だとは

  • 受付中

    Eclipseで開発時のコンテキストルート名変更方法

    現在、Eclipse4.4.2(Luna)とWildFly8.2.1環境でJAVAのWebアプリケーションを開発しています。 WEBアプリは動的Webアプリケーションプロジェクトと

  • 解決済

    Javaservletを実際のWebサーバーへのデブロイする方法につきまして

    会社が用意してくれたWebサーバーへ開発したJava servlet並びにJSPをアップしたいと考えております。 使っている開発環境は下記の通りです ・Tomcat v8.

  • 受付中

    tomcatのダウンロード

    tomcatの 6.0.53 パッケージ情報 については、READMEファイルを参照して ください。すべてのディストリビューションに含まれるものについて説明します。 バイナ

  • 解決済

    Rails5 api モードのデプロイ

    Ruby on Rails 5のAPIモードで作成したアプリケーションをUnicorn + nginxでデプロイしようと考えております。 以下の参考サイトを見て、同じ手順を踏

  • 解決済

    開発環境の構築とデプロイまでの流れ

    閲覧ありがとうございます! 先日までDockerでVPSのデプロイ方法を質問させて頂いたのですが、いくら勉強してもdockerでのデプロイ方法が理解できなかったので、一旦docke

同じタグがついた質問を見る

  • サーバ

    632questions

    サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

  • Tomcat

    443questions

  • Java EE

    319questions

    Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

  • Go

    311questions

    Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

  • unicorn

    59questions

    Unicornは、汎用のRackアプリケーションサーバ。RackとWebサーバーの機能を併せ持ちます。レスポンス処理や、Nginx単体がRackの機能をサポートしていない事から、一般的にはNginx+Unicorn+Railsの構成を取って用います。