面接でポートフォリオはなんのwebサーバーで動かしているのか聞かれてよく分からなかったので調べた


面接でポートフォリオはなんのwebサーバーを使っているのか聞かれました

プログラミング教室で教えてもらったのは、rails sとすればlocalhost:3000にアクセスすれば動く。そんな感じだったので、webサーバーやアプリケーションサーバーについて意識することはありませんでした。なんのサーバーを使っているのか気にしたことがありませんでした。なので、なにも答えられずww
基本が分かっていなかったので、一体どういうことか調べてみました。

webの仕組みをさらっと復習

webの仕組みは下の図のようになっています。

クライアントが要求を出して、静的な処理ならwebサーバーがリクエストを返します。動的な処理の時、webサーバーはアプリケーションサーバーに処理を要求して、リクエストを返します。
非常にわかりやすい例があったので、引用します。

四則演算のアプリケーションが実装されているAPサーバでクライアントが「1+1は?」というリクエストを送ると、Webサーバはこれを「動的コンテンツ」と判別してAPサーバにリクエストを投げます。受け取ったAPサーバは四則演算ができるのでDBサーバにリクエストを投げなくても「1+1=2」という答えをWebサーバに返すことができます。
しかし、「リンゴとバナナの合計金額は?」というリクエストが飛んでくると、APサーバにはリンゴとバナナの値段のデータが存在しないため、DBサーバにリクエストする必要があります。そして、DBサーバからリンゴとバナナの値段が返ってきたらAPサーバは計算して結果をWebサーバに返します。
参考:ミドルウェアについて知ろう

Rubyのwebサーバーは?

自分でwebサーバーの設定をした記憶がなかったので、そもそもなぜlocalhost:3000にアクセスするとリクエストが返ってくるのかという疑問がでてきました。

webrickがwebサーバーみたいなもの

Rubyは標準でwebrickというwebサーバー用のフレームワークがあります。webサーバーとは違うようですが、webサーバーと同じような動きをすると認識しています。なので、手元で動かすだけなら、ApacheやNginxなどのwebサーバーは必要ないようです。webrickがあるから簡単にアプリケーションを動かすことができているという分けですね。

ApacheやNginxはどういう時に使うの?

ApacheやNginxは静的ファイルの配信やリクエストのバッファリング、レスポンスの圧縮など、アプリケーションではやらないHTTP上で起こる汎用的な問題を解決するミドルウェアです。
参考:Railsに標準装備されているWEBrickではなく、本番でNginxやApacheに変更するのは何故ですか?

とのことで実際に本番環境でパフォーマンスをあげるために使うというイメージで理解しました。
webサーバーはなくても動くみたいで、設計によって必要かどうか判断すると良いということで理解していますが、実際のところほとんどの場合webサーバーは使っているのではないでしょうか?

まとめ

webの仕組みについて改めて復習した次第です。webサーバーについて調べることができて少し理解が深まりました。

参考

webrickを使ったアプリケーションの起動
Rails開発におけるwebサーバーとアプリケーションサーバーの違い
webサーバー、アプリケーションサーバー、Rackといった仕様や概念と、WEBrick、Unicorn、Pumaといった実装の関係が頭の中で結びつきません
WEBrickを使ってみよう!