エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Top 10 Backend Development Mistakes to Avoid の意訳と個人の見解+感想

きっかけ

バックエンド主体で開発しているが、失敗事例は覚えて置いたほうがいいと思って、内容をまとめようと思ったから。

原文

Top 10 Backend Development Mistakes to Avoid - DEV Community

意訳

バックエンド開発は、堅牢で効率的なWebアプリケーションを構築する上で重要な役割を担っています。サーバーサイドのロジック、データベース、統合機能を実装・管理している。
経験豊富な開発者であっても、パフォーマンスの問題やセキュリティの脆弱性、ユーザーの不満につながるようなミスを犯すことがあります。
避けるべきバックエンド開発の失敗事例トップ10を紹介し、開発を成功させるための実践的な解決策を提供します。

  1. 入力のバリデーションが不十分
  2. 不十分なデータベース設計
    • データベーススキーマの設計が不十分だと、効率が悪く、クエリが遅くなり、スケーリングが難しくなる
    • 時間をかけてでも最適化されたデータベース構造を設計することが重要
    • データを正規化し、適切なリレーションシップを確立し、インデックスを作成する
  3. キャッシングメカニズムの欠如
    • キャッシングすることで、応答時間を短縮し、パフォーマンスを向上させられる
    • キャッシュの実装を怠ると、アプリケーションのパフォーマンスが低下し、サーバーの負荷が増大する
  4. 安全でない認証と認可
    • 適切な認証と認可の仕組みを導入しないと、アプリケーションは不正アクセスやデータ漏洩の危険にさらされる
    • OAuthやJWT(JSON Web Tokens)のような業界標準プロトコルを利用して、安全なユーザー認証を確保し、適切な認証制御を実施する
  5. エラー処理とロギングを無視しない
    • ソフトウェア開発においてエラーは避けられない
    • どう処理するかで大きな違いが生まれる
    • 適切なエラー処理とロギングを怠ると、問題のトラブルシューティングや根本的な原因の特定が困難になる
    • 堅牢なエラー処理機構とロギング戦略を導入して、エラーを捕捉・追跡して問題解決を可能な状態にしておく
  6. APIコールを最適化する
    • APIコールの最適化を怠ると、パフォーマンスのボトルネックや不要なオーバーヘッドにつながる
    • APIリクエストの数を最小限に抑える
    • 必要に応じて非同期処理を検討する
  7. パフォーマンステストが不十分
    • ボトルネックを特定し、リソースの利用を最適化し、アプリケーションが予想される負荷に対応できることを確認するために非常に重要
    • パフォーマンステストを怠ると、満足のいくユーザー体験を提供できない
    • 定期的にパフォーマンステストを実施し、問題を早期に発見することを心がける
  8. スケーラビリティ計画の欠如
    • アプリケーションが成長すると、スケーラビリティが必要になる
    • 初期段階からスケーラビリティの計画を立てないと、トラフィックやユーザー負荷の増加に対応する際に課題が発生する可能性がある
    • ロードバランサー、水平スケーリング、クラウドベースのソリューションなどの技術の活用を考慮する
  9. セキュリティアップデートする
    • セキュリティの脅威は常に進化している
    • バックエンドのフレームワークやライブラリの脆弱性は定期的に発見されている
    • 最新の安全なバージョンに更新することを怠ると、アプリケーションを既知の脆弱性にさらすことになる
    • セキュリティに関する最新情報を入手し、速やかにパッチを適用し、バックエンドの依存関係を定期的に見直す
  10. 適切なドキュメンテーションを行う
    • バックエンド開発を成功させるために重要な役割を果たす
    • ドキュメントが不十分だと、他の開発者があなたのコードを理解し、保守することが難しくなる
    • コードを徹底的に文書化することで、オンボード開発、トラブルシューティング、将来の開発を容易にする

個人的な見解と感想

  1. 入力のバリデーションが不十分
    • 実際、これがよく分かってない人が結構多い
    • フロントの入力チェックで十分だと考える人が結構いる
    • フロントとバックエンドは、疎結合になっているなので、フロント側を付け替えることも可能であることを頭に入れておく必要がある
    • フロントでやっているから、担保できると思ったら、大間違い
  2. 不十分なデータベース設計
    • データベース設計が不十分ってことは、あまり見受けられない
    • ただ、正規化できてないケースが稀にある。。。
    • 下手するとアーキテクチャより息が長いので、慎重にやる必要がある
  3. キャッシングメカニズムの欠如
    • 実際に動かないと、どこが問題なのか分からない気がしないでもない
  4. 安全でない認証と認可
    • 認証と認可って、いろんなやり取りをするから分かりづらいところではある
    • 大まかな概念は理解しているけど、それをコードに落とすのが面倒だったりする
  5. エラー処理とロギングを無視しない
    • 単体テストならいいけど、それ以降のフェーズだと、トレースするために必須
    • エラー処理が適切じゃなくて、何をすればいいのか分からないケースがあるのは、よくある
  6. APIコールを最適化する
    • これも、キャッシングに通じるものがある
    • JavaScriptがグルーコードとして地位を確立しているのは、非同期処理が書きやすいからだろうなと、読んでて思った
  7. パフォーマンステストが不十分
    • パフォーマンスをどれくらいやるかだよな。。。
    • CI/CDで定期的にテストするのが妥当だろうか?
  8. スケーラビリティ計画の欠如
  9. セキュリティアップデートする
    • アップデートを可能にするために、マイクロサービスにして、リリースし易いようにしとけってことだろうか?
    • ソフトウェアの規模によって、アーキテクチャを考え直すなどしなければいけない気がする
  10. 適切なドキュメンテーションを行う
    • 分かってはいるけど、面倒くさくて手を抜きがち
    • AIで自動でコメント生成するなどの技術が出てきて欲しい