社内の勉強会で発表した雑な資料です。
商用アプリケーション開発基本のキ
View Slide
アプリケーションアプリケーション
アプリケーションアプリケーションみんなとデータ共有したい ...
クライアントとサーバ通信クライアントサーバクライアントクライアントクライアントアプリケーションサーバアプリケーション専用線イントラネット
クライアントとサーバ通信クライアントサーバクライアントクライアントクライアントアプリケーションサーバアプリケーションクライアントアプリケーション作るの大変 ...みんなに配るの大変 ...専用線イントラネット
Webシステム(うちだとこんな感じ)通信AWS上のEC2とかECSブラウザクライアント サーバインターネット
Webシステム
クライアントでは何でもできる変なリクエスト送っちゃおー生年月日0000年00月00日ですね!はい、言われた通り動きます!
役割の違いクライアント側のバリデーション(制御)はユーザの補助のための機能サーバ側のバリデーション(制御)のみが不正なデータやリクエストを防ぐことができる
他にも
ネットワーク通信ネットワーク通信は色んなところで失敗する通信障害!!!PCが落ちた!!サーバが壊れた!!
上手く動かない時のことを考えるネットワーク通信は基本的に失敗する可能性があるまた他のサービスを使う場合、失敗する可能性が結構高い確率である(メンテ時間とか)
処理が失敗したときにどう振る舞うか?考えてみようslackに投稿してみよう
処理が失敗したときにどう振る舞うか?- リトライ処理をする- 人間に通知をして直してもらう- ログを吐く- 勝手に直るようにする- 何もせず処理を終了するあたりが出た?どれが正解?
処理が失敗したときにどう振る舞うか?- 何もせず処理を終了する- リトライ処理をする- 人間に通知をして直してもらうあたりが出た?どれが正解?場合による!!
処理を成功させるためにどうすればいいか確率で失敗する(Flakey)ならリトライ処理をすれば良い人間が対応する必要があれば通知をする自動で回復できるなら自動で回復するできることが何もないけど把握しておきたいならログを吐くできることが何もなく把握する必要もないなら何もせず終了する次の行動を考えて失敗時の処理を考えよう
失敗した時のことについて考える概念(一部)フェイルセーフフェイルソフト
フェイルセーフ故障しても大変なことにならないようにしようね→ 倒れると止まるストーブ→ 踏切の遮断機(故障時は重力で下がる=踏切に立ち入れないようにする)
フェイルセーフじゃない例調光フィルムを貼ったガラス張りで、利用者がいないときはフィルムに電気を流すことでガラスが透明となり、トイレ内に入り鍵を閉めることで電気が流れなくなりガラスが不透明になる仕組みとなっている。https://encount.press/archives/394259/
フェイルソフト故障しても(多少しょぼくなっても)動くようにしようね→ エンジンが壊れたら予備エンジンが動く飛行機
テストでもテストの観点にも失敗した時のことを考えよう正常系準正常系異常系
仕様本を借りるシステム一回に5冊まで借りれる借りる際にはアカウント登録が必要一日1回のみ借りれる
正常系1冊借りたら借りれる5冊借りたら借りれる
準正常系0冊借りたら失敗する。ユーザに借りれない旨をメッセージで伝える6冊借りたら失敗する。ユーザに1回5冊しか借りれないことをメッセージで伝える会員じゃなかったら失敗する。余談: 失敗時のエラーメッセージはユーザの次の行動につながるようにしようね
異常系アプリケーションが動いているサーバがぶっ壊れたときに- DBへのアクセスができなくなること- 他のサーバが自動的に復旧してくれること- 500画面が正常に表示されること
前職で聞いた格言正常系が動くようになって、ようやく2割