$30 off During Our Annual Pro Sale. View Details »

商用アプリケーション開発基本のキ

bayashi
April 13, 2023

 商用アプリケーション開発基本のキ

社内の勉強会で発表した雑な資料です。

bayashi

April 13, 2023
Tweet

More Decks by bayashi

Other Decks in Programming

Transcript

  1. 商用アプリケーション開発
    基本のキ

    View Slide

  2. アプリケーション
    アプリケーション

    View Slide

  3. アプリケーション
    アプリケーション
    みんなとデータ共有したい ...

    View Slide

  4. クライアントとサーバ
    通信
    クライアント
    サーバ
    クライアント
    クライアント
    クライアントアプリケーション
    サーバアプリケーション
    専用線
    イントラネット

    View Slide

  5. クライアントとサーバ
    通信
    クライアント
    サーバ
    クライアント
    クライアント
    クライアントアプリケーション
    サーバアプリケーション
    クライアントアプリケーション作るの大変 ...
    みんなに配るの大変 ...
    専用線
    イントラネット

    View Slide

  6. Webシステム(うちだとこんな感じ)
    通信
    AWS上の
    EC2とかECS
    ブラウザ
    クライアント サーバ
    インターネット

    View Slide

  7. Webシステム

    View Slide

  8. クライアントでは何でもできる
    変なリクエスト送っちゃおー
    生年月日0000年00
    月00日ですね!
    はい、言われた通り
    動きます!

    View Slide

  9. 役割の違い
    クライアント側の
    バリデーション(制御)は
    ユーザの補助のための機能
    サーバ側の
    バリデーション(制御)のみが不正
    なデータやリクエストを防ぐことが
    できる

    View Slide

  10. 他にも

    View Slide

  11. ネットワーク通信
    ネットワーク通信は色んなところで失敗する
    通信障害!!!
    PCが落ちた!!
    サーバが壊れた!!

    View Slide

  12. 上手く動かない時のことを考える
    ネットワーク通信は基本的に失敗する可能性がある
    また他のサービスを使う場合、
    失敗する可能性が結構高い確率である
    (メンテ時間とか)

    View Slide

  13. 処理が失敗したときにどう振る舞うか?
    考えてみよう
    slackに投稿してみよう

    View Slide

  14. 処理が失敗したときにどう振る舞うか?
    - リトライ処理をする
    - 人間に通知をして直してもらう
    - ログを吐く
    - 勝手に直るようにする
    - 何もせず処理を終了する
    あたりが出た?
    どれが正解?

    View Slide

  15. 処理が失敗したときにどう振る舞うか?
    - 何もせず処理を終了する
    - リトライ処理をする
    - 人間に通知をして直してもらう
    あたりが出た?
    どれが正解?
    場合による!!

    View Slide

  16. 処理を成功させるためにどうすればいいか
    確率で失敗する(Flakey)ならリトライ処理をすれば良い
    人間が対応する必要があれば通知をする
    自動で回復できるなら自動で回復する
    できることが何もないけど把握しておきたいならログを吐く
    できることが何もなく把握する必要もないなら何もせず終了する
    次の行動を考えて失敗時の処理を考えよう

    View Slide

  17. 失敗した時のことについて考える概念(一部)
    フェイルセーフ
    フェイルソフト

    View Slide

  18. フェイルセーフ
    故障しても大変なことにならないようにしようね
    → 倒れると止まるストーブ
    → 踏切の遮断機(故障時は重力で下がる=踏切に立ち入れないようにする)

    View Slide

  19. フェイルセーフじゃない例
    調光フィルムを貼ったガラス張りで、利用者がいな
    いときはフィルムに電気を流すことでガラスが透明
    となり、トイレ内に入り鍵を閉めることで電気が流れ
    なくなりガラスが不透明になる仕組みとなっている。
    https://encount.press/archives/394259/

    View Slide

  20. フェイルソフト
    故障しても(多少しょぼくなっても)動くようにしようね
    → エンジンが壊れたら予備エンジンが動く飛行機

    View Slide

  21. テストでも
    テストの観点にも失敗した時のことを考えよう
    正常系
    準正常系
    異常系

    View Slide

  22. 仕様
    本を借りるシステム
    一回に5冊まで借りれる
    借りる際にはアカウント登録が必要
    一日1回のみ借りれる

    View Slide

  23. 正常系
    1冊借りたら借りれる
    5冊借りたら借りれる

    View Slide

  24. 準正常系
    0冊借りたら失敗する。ユーザに借りれない旨をメッセージで伝える
    6冊借りたら失敗する。ユーザに1回5冊しか借りれないことをメッセージで伝える
    会員じゃなかったら失敗する。
    余談: 失敗時のエラーメッセージはユーザの次の行動につながるようにしようね

    View Slide

  25. 異常系
    アプリケーションが動いているサーバがぶっ壊れたときに
    - DBへのアクセスができなくなること
    - 他のサーバが自動的に復旧してくれること
    - 500画面が正常に表示されること

    View Slide

  26. 前職で聞いた格言
    正常系が動くようになって、ようやく2割

    View Slide