groooovin'

ログという名の溝を彫ります

Webサーバを実装してみました

タイトルの通り、Webサーバを実装してみました。

と言っても全てを自分で考えたわけではなく、以下の本に記載されているソースコードの写経をしました。

ソースコードを全て実装しつつ、ソースコードの意味を解釈しつつ、本の本文を読みながら進めていったので、なかなか時間がかかりました。年末ということもあり、色々な行事も重なっていたので、確か二週間ほどかかったと思います。

動機

動機は、以下の通りです。

  • 仕事でWebアプリケーションに携わる機会が多くなり、Webの仕組みなどに興味を持った。
  • 時の試練に耐えている技術なので、一度学ぶことにより長い間活用することができると思われる。
  • ソースコードjavaで1000step程とのことなので、ちょうどいい量だと思った。※特に最近は、ゴリゴリコードを書く機会が乏しかったので。

感想

結論から言うと、とても勉強になりました。

Webアプリケーションに携わるうえでは、欠かすことのできない、HTTPの仕組み、CookieやSessionの実装などについて、とても丁寧に解説されています。

今まで概念レベル、利用する側としての利用方法などは知っていましたが、実装をしたことがなかったので、割と曖昧な理解しかしていませんでした。 しかし、この本を読みながら、記載されているソースコードを自分で実装することによって、ソースレベルで理解することができるようになったと思います。

特に理解できたこと

特に以下のことが理解できて、とてもスッキリしました。

  • 簡単なTCPサーバとTCPクライアントの実装
    TCPによるアクセスをログに出力するような簡易なサーバと、TCPサーバを叩くだけのクライアントであれば、javaでソケット(Socket)ライブラリを使用することで、数行の実装で実現することができる。

  • アプリケーションでのSessionの実現方法
    アプリケーション内で複数のSessionを管理するSessionManagerと、SessionとCookieの関連を実装レベルで知ることができた。なんとなく実装だとこうだろうなというイメージは浮かんでいたが、実際に実装をしたことはなかった。 実装を見たときに、おおよその方針は間違っていないということを確認できたことで、自分の自信になった。

  • サーブレットの実現方法
    doGetというメソッドをOverrideしていい感じに書けば動く、という程度の認識だった。今回実装したことで、アクセスされたURLを解析して、対応するサーブレットのクラスをClassLoaderで読み込むという詳細な動き、web.xmlの記載がどのように使われているのかを知ることができた。

私は、「"知っている"と"できる"の間には、大きな隔たりがある」、という言葉を普段から意識しています。今回の実装でWebアプリケーションについて、少しだけ"できる"側に近づいたのではないかと思います。

苦労した点

本の通りに実装していく中で苦労したのが、eclipseで実装した時とそれ以外の時の挙動の違いでした。この本は、特にIDEの指定などはなく、さくらエディタ等のシンプルなエディタで実装することを想定しています。しかし、私は普段コードを書く時eclipseを使っているので、eclipseを使って実装しました。なので、クラスパスやパッケージ等を意識することがほとんどありません。そのことが原因でいくつかの箇所で詰まりました。まぁ、それも含めていい勉強になりましたが。。。普段eclipseがどれだけのことを隠ぺいしているのかを実感するいい機会になりました。

自分の興味の再認識

自分が面白いと思えるものを再認識することができました。それは、「普段何気なく存在しているものの、裏側の仕組み」です。 Web開発者にとって、Webサーバというのは、正に「普段何気なく存在しているもの」に当てはまるものだと思います。その「普段何気なく存在しているもの」の「裏側の仕組み」について書いてある本を面白がりながら読むことができたことで、自分が物事の仕組みに興味があるということを再認識することができました。これは、自分にとって結構大きな気づきでした。

Web開発者にとてもお勧めします

Webアプリケーションの開発者にとてもお勧めします。想像以上に学びが多い本でした。Webの開発に携わって半年から一年した頃に読むととても学びがあるのではないでしょうか。特に、画面側の設計や実装はいくつも経験しているけど、CookieやSessionの仕組みはよく理解できていないという人。FWが普段隠蔽しているので、ほとんど意識することがない人などは、この本を読むことでとてもすっきりすると思います。 私ももう少し早く、できれば二年目の春頃にこの本を読んでいたら、もう少し当時の苦労を減らせただろうなと思います。

以上が、簡単な感想などです。後日、面白いと思ったところやなるほどと思った箇所を部分的に抜き出して詳細を書くつもりです。 (一周しただけだと知識の定着が弱いと思いますので。。。)