バックエンド技術全般に関連する基礎知識を整理する #ネットワーク編
目次
目的
私が今後目指していくバックエンドエンジニアとしての技術に関する基礎知識を整理することを目的とする。 特に、就活やインターン参加などでの採用シーンにおいて、質問されそう若しくは談義として出そうなバックエンド技術話にフォーカスしようと思う。
ネットワーク、データベース、セキリュティ、プログラミング(設計)の4分野に分けて、それぞれ、深掘りをしていく。今回はネットワークにフォーカスする。
代表的な技術
Webサーバ
クラウド
API通信
ネットワークに関するトピック
TCPとUDPプロトコルについて。
TCPは、信頼性のあるデータ転送を実現するためのプロトコル。 信頼性とは、3wayハンドシェイクによる通信前の打診、ackによる相手の受信確認や再送処理、や通信効率の最適化機能(Windowによるフロー制御や輻輳制御)を提供できることからのもの。 ネットワークが混雑している場合でも、データのロスを最小限に抑えられる。
UDPは、データを分割せずに一度に送信するため、TCPと比べてデータ転送速度が高速である。しかし、送信したデータが正常に届いたかどうかを確認する仕組みがないため、データ転送の信頼性は低い。この特徴を利用して、UDPは音声や動画のストリーミングなど、リアルタイム性が重要で一部のデータロスが許容される場合に利用されます。
HTTPとHTTPSの違いについて。
データが暗号化されずに送受信されるかどうか。具体的には、HTTPSを利用する場合、Webサーバー側で証明書を取得し、ブラウザ側でその証明書を検証することで通信の秘匿性を確保する。
DNSとその仕組みについて。
IPアドレスとドメイン名を対応付けることによって、インターネット上でのコンピューターやサービスを特定するためのシステム。
トラフィック制御について。
トラフィック制御とは、ネットワーク上の通信量を制限する機能。トラフィック制御を行うことで、ネットワークが混雑しすぎて通信ができなくなることを防ぐことができる。
トラフィック制御には、以下のような方法が挙げられる。
帯域制御は、ある時間帯における通信量を制限することで、ネットワーク上の混雑を防ぐ。 ポリシングは、通信が正常に行われているかを監視し、異常な通信をブロックすることで、ネットワークの安全性を保つ。 キューイングは、通信が混雑している場合に、通信を順次処理するための仕組み。
社内通話ミーティングなどで、活躍する機能。
REST APIとGraphQL APIの違い
REST APIは、HTTPリクエストを使用してデータを取得するAPIである。一般的にシンプルで柔軟性が高い。
GraphQL APIは、クライアントが必要とするデータのみを取得できるようにするために設計されたAPIであり、一度に複数のエンドポイントにアクセスする必要がなく、パフォーマンスが向上を図れる。
ステータスコードについて
参考:https://zenn.dev/hidebon0630/articles/75022374e28cdf
200 成功レスポンス
300 リダイレクト
400 クライアントエラー
500 サーバーエラー
Cookieとローカルストレージについて
Cookieはウェブサイトがあなたのコンピューターやモバイルデバイスに保存する情報のことで、ウェブサイトを使用する際に特定の設定や操作を覚えておくことができる機能。ブラウザによって自動的に送信される。
ローカルストレージはJavaScriptコードによって必要に応じて読み書きされる機能。Cookieはブラウザが閉じられると消えるが、ローカルストレージはブラウザを閉じても保持される。これは、Cookieがセッションに関連したデータを保存するために使用されるのに対し、ローカルストレージは永続的なデータの保存に使用されるためである。
Cookieは通常、小さなデータを保存するために使用されますが、ローカルストレージは、大量のデータを保存することができます。Cookieは、データがブラウザに保存されるため、セキュリティ上のリスクがある一方、ローカルストレージはJavaScriptによって制御されるため、より安全なオプションと言える。さらに、Cookieはウェブサイトを訪問する際に、ブラウザが送信するHTTPヘッダーに含まれますが、ローカルストレージはサーバーには送信されないため、よりプライバシーに優れたオプションとなる。