Webアプリケーションやらかし集(その1)
Webアプリケーションの開発に関連していままで見たことあるやつや、やってしまったことがあるやらかし集。
アンチパターンと言っても良いと思う…。
というわけで、尊敬すべき愛読書"SQLアンチパターン"の記法に沿って解説していみます。
- 作者: Bill Karwin,和田卓人,和田省二,児島修
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/01/26
- メディア: 大型本
- 購入: 9人 クリック: 698回
- この商品を含むブログ (41件) を見る
SQLアンチパターンでは対象のアンチパターンを以下の項目に分けて詳述しています。
[やらかし] upload, download 時にサーバーサイドのファイルシステム上にファイルを保存
本家アンチパターンのようにイカした名前がつけられない・・・。
目的
Webアプリケーションでファイルのアップロード処理やダウンロード処理を実装する
アンチパターン
upload, download 時にサーバーサイドのファイルシステム上に一旦ファイルを保存し、その後処理を継続する。
たとえばアップロード時ならば、アップロードファイルを一旦ファイルとして保存してからそのファイルをDBに格納する。
ダウンロードの場合はDBから取得したファイルを一旦ファイルに保存してからダウンロード処理に渡す。
アンチパターンの見つけ方
Webサーバーを運用続けて停止開始を繰り返すと特定のディレクトリにゴミがたまるという苦情を受ける。
あるいは、時々アップロードやダウンロードに失敗するという不具合報告を受ける。
アンチパターンを用いても良い場合
このアンチパターンを用いても良い場合が果たしてあるのか?よっぽど限定的な場面や要件だと思う・・・。*1
解決策
個人的にはメモリ上からstreamで返すような形が良いのではないかと思うのだけど、よく見かけるこのパターン
いくつか問題がある上にメリットらしいメリットがほとんど思い浮かばない。*2
ちなみに自分に思い浮かぶ問題点
- ディスクIOが挟まるのでレイテンシに負のインパクトがある
- ディレクトリ構成とファイル名のつけ方次第だがファイルがかぶる可能性がある
- Webサーバーの停止タイミングによってはサーバー上にゴミが残る上、それがゴミかどうか認識すしづらい。
うーん。
でも、同じ人が何度もやるとかそういうわけではなく時期も場所も人も異なる幾つかの現場で見たことがあるんだな…。
もしかして人は通常この実装をやりたくなるなんか心理的な要因があったりするのかも…。
真面目に考えるとクラサバ系からWebアプリ作るようになって日が浅い不慣れなひとがやりがちなパターンなのかなぁ?