きっかけ
バックエンド主体で開発しているが、失敗事例は覚えて置いたほうがいいと思って、内容をまとめようと思ったから。
原文
Top 10 Backend Development Mistakes to Avoid - DEV Community
意訳
バックエンド開発は、堅牢で効率的なWebアプリケーションを構築する上で重要な役割を担っています。サーバーサイドのロジック、データベース、統合機能を実装・管理している。
経験豊富な開発者であっても、パフォーマンスの問題やセキュリティの脆弱性、ユーザーの不満につながるようなミスを犯すことがあります。
避けるべきバックエンド開発の失敗事例トップ10を紹介し、開発を成功させるための実践的な解決策を提供します。
- 入力のバリデーションが不十分
- ユーザー入力に関しては、バリデーションが最も重要
- 入力のバリデーションを適切に行わないと、SQLインジェクションやクロスサイトスクリプティング(XSS)攻撃などのセキュリティ脆弱性が起きる
- 悪意のあるリクエストを防ぎ、サーバー側で常に入力内容を検証する必要がある
- 不十分なデータベース設計
- データベーススキーマの設計が不十分だと、効率が悪く、クエリが遅くなり、スケーリングが難しくなる
- 時間をかけてでも最適化されたデータベース構造を設計することが重要
- データを正規化し、適切なリレーションシップを確立し、インデックスを作成する
- キャッシングメカニズムの欠如
- キャッシングすることで、応答時間を短縮し、パフォーマンスを向上させられる
- キャッシュの実装を怠ると、アプリケーションのパフォーマンスが低下し、サーバーの負荷が増大する
- 安全でない認証と認可
- エラー処理とロギングを無視しない
- ソフトウェア開発においてエラーは避けられない
- どう処理するかで大きな違いが生まれる
- 適切なエラー処理とロギングを怠ると、問題のトラブルシューティングや根本的な原因の特定が困難になる
- 堅牢なエラー処理機構とロギング戦略を導入して、エラーを捕捉・追跡して問題解決を可能な状態にしておく
- APIコールを最適化する
- パフォーマンステストが不十分
- ボトルネックを特定し、リソースの利用を最適化し、アプリケーションが予想される負荷に対応できることを確認するために非常に重要
- パフォーマンステストを怠ると、満足のいくユーザー体験を提供できない
- 定期的にパフォーマンステストを実施し、問題を早期に発見することを心がける
- スケーラビリティ計画の欠如
- セキュリティアップデートする
- 適切なドキュメンテーションを行う
- バックエンド開発を成功させるために重要な役割を果たす
- ドキュメントが不十分だと、他の開発者があなたのコードを理解し、保守することが難しくなる
- コードを徹底的に文書化することで、オンボード開発、トラブルシューティング、将来の開発を容易にする
個人的な見解と感想
- 入力のバリデーションが不十分
- 実際、これがよく分かってない人が結構多い
- フロントの入力チェックで十分だと考える人が結構いる
- フロントとバックエンドは、疎結合になっているなので、フロント側を付け替えることも可能であることを頭に入れておく必要がある
- フロントでやっているから、担保できると思ったら、大間違い
- 不十分なデータベース設計
- データベース設計が不十分ってことは、あまり見受けられない
- ただ、正規化できてないケースが稀にある。。。
- 下手するとアーキテクチャより息が長いので、慎重にやる必要がある
- キャッシングメカニズムの欠如
- 実際に動かないと、どこが問題なのか分からない気がしないでもない
- 安全でない認証と認可
- 認証と認可って、いろんなやり取りをするから分かりづらいところではある
- 大まかな概念は理解しているけど、それをコードに落とすのが面倒だったりする
- エラー処理とロギングを無視しない
- 単体テストならいいけど、それ以降のフェーズだと、トレースするために必須
- エラー処理が適切じゃなくて、何をすればいいのか分からないケースがあるのは、よくある
- APIコールを最適化する
- これも、キャッシングに通じるものがある
- JavaScriptがグルーコードとして地位を確立しているのは、非同期処理が書きやすいからだろうなと、読んでて思った
- パフォーマンステストが不十分
- パフォーマンスをどれくらいやるかだよな。。。
- CI/CDで定期的にテストするのが妥当だろうか?
- スケーラビリティ計画の欠如
- アーキテクチャレベルで考えないと無理そう
- セキュリティアップデートする
- アップデートを可能にするために、マイクロサービスにして、リリースし易いようにしとけってことだろうか?
- ソフトウェアの規模によって、アーキテクチャを考え直すなどしなければいけない気がする
- 適切なドキュメンテーションを行う
- 分かってはいるけど、面倒くさくて手を抜きがち
- AIで自動でコメント生成するなどの技術が出てきて欲しい