LoginSignup
4
2
記事投稿キャンペーン 「2024年!初アウトプットをしよう」

AWSの勉強する前に大事なこと:プログラミングを学んで日がまだ浅い人へ

Last updated at Posted at 2024-01-27

後輩: 「先輩、AWSの資格取りたいんで、VPCとか勉強してる所なんですけど、それが何の為にあるかいまいちわかりません。いろんな機能あるし、必要なんですか?」

先輩: 「うーむ。ネットワークの基礎が分かってないと、AWSのVPCみたいな応用の部分、ちっとも腑に落ちないんだよ。🚫」

後輩: 「え、そうなんですか?」

先輩: 「うん。だってさ、ネットワークの基本って、道路や電車の線路みたいなもの。データがどうやって流れるか、どこを通って目的地に着くか、そういうことが基本になるんだよ。🚄🛤️」

後輩: 「なるほど、基本の流れを知らないと...」

先輩: 「そうそう、例えばさ、VPCってのは、AWS上にプライベートなネットワーク空間を作ること。でも、この「プライベートなネットワーク空間」という概念がピンとこないと、VPCの真価が理解できないんだ。」

後輩: 「プライベートなネットワーク空間...」

先輩: 「そう。VPCでやるのは、自分だけの安全なエリアを作って、そこにサーバーやデータベースを配置するわけ。だから、外部からのアクセスをどう制御するか、内部でのデータのやり取りがどうなってるか、そういうネットワークの知識がないと、VPCを上手く設計するのは難しいんだよ。🏗️🔒」

後輩: 「そういうことか。ネットワークの知識が先に必要なんですね。(汗)」

先輩: 「まさにその通り!🎯 VPCはただのツール。そのツールを使いこなすには、基本の「土台」が必要なんだ。ネットワークの基本を理解していれば、VPCを使って、セキュリティが高く、効率的なシステムを作れるようになるんだ。」

後輩: 「でも、そんなの知ってますよ!ソーシャルネットワークとか、人脈が広い時にネットワークが広いっていう、あれですよね!」

先輩: 「それは日常生活で使う「ネットワーク」で、俺が言っているのはシステム開発という文脈でのネットワーク! 」

後輩: 「それでしたら多分大学の時の講義でやったから多分いけます!」

先輩: 「じゃあ、今後輩くんが繋がってるパソコンは、ネットワーク層から見てどういう経路を辿ってインターネットにアクセスして、どうやって戻ってくるか説明できる?」

後輩: 「ネットワーク層...?(何それ)ちょっとわかりません」

先輩: 「ざっとこんな感じ⭐︎↓」

  1. 後輩くんがパソコンでウェブブラウザを開く
  2. ウェブサイトのURLを入力
  3. ブラウザがDNSリクエストを生成
  4. DNSリクエストがローカルネットワークを通じてデフォルトゲートウェイに送信される
  5. デフォルトゲートウェイがリクエストをISPのDNSサーバーに転送
  6. DNSサーバーがURLをIPアドレスに解決
  7. 解決されたIPアドレスがパソコンに戻る
  8. ブラウザがHTTPリクエストを生成(IPアドレスを使用)
  9. HTTPリクエストがデフォルトゲートウェイを通じてISPのルーターに送信される
  10. ISPのルーターがリクエストをインターネットに転送
  11. リクエストが複数の外部ルーターを経由
  12. リクエストが目的地のサーバーのネットワークに到達
  13. サーバーのローカルルーターがリクエストをサーバーに転送
  14. サーバーがリクエストを受け取る
  15. サーバーがリクエストを処理
  16. 必要なデータがデータベースやファイルシステムから取得される
  17. サーバーがHTTPレスポンスを生成
  18. HTTPレスポンスがサーバーのローカルルーターに送信される
  19. レスポンスがサーバーのネットワークを通じてインターネットに転送される
  20. レスポンスが複数の外部ルーターを経由
  21. レスポンスがISPのルーターに到達
  22. ISPのルーターがレスポンスをデフォルトゲートウェイに転送
  23. デフォルトゲートウェイがレスポンスをパソコンに転送
  24. ブラウザがレスポンスを受け取る
  25. ブラウザがレスポンスを解析
  26. ウェブページがブラウザに表示される
  27. ユーザーがウェブページを閲覧
  28. 追加リクエスト(画像やスクリプトのロード)が必要な場合は、再度リクエスト
  29. 各追加リクエストに対して、同様のプロセスが繰り返される
  30. ブラウザセッションの終了

後輩「ネットワーク勉強します」

なんかいっぱいステップがあるのはわかったけど、結局何で大切なの?

後輩「僕はプログラミングがしたいのに!!!」

先輩「まあその気持ちもわからなくもないけど、ソフトウェア開発、システム開発の観点からもとても大切なんだよ」

後輩「正直あまりピンときません。。(僕はpythonとかNext.jsとか、かっこいい言語を使って働きたい、ハァハァ」

先輩: 「ネットワークが大切な理由を説明する前に、まずはレストランの例え話から始めようか。🍴」

後輩: 「レストラン?どういうことですか?」

先輩: 「ソフトウェア開発って、実はレストランで料理を作るプロセスに似てるんだ。考えてみて。レストランでは、一人のシェフがすべてをやるわけじゃないよね。仕込み担当、調理担当、盛り付け担当...と、それぞれの専門家が協力して一つの料理を完成させる。」

後輩: 「なるほど、チームワークが大事ってことですね。」

先輩: 「そうそう、そのチームワークが、まさにネットワークの役割なんだ。開発では、各々のコンピュータやシステムがチームメンバーのように機能して、データをやり取りしたり、命令を出したり受け取ったりして、プロジェクトを進めるんだよ。」

後輩: 「それで、ネットワークが上手くいってないと、全体の作業が滞るってことですか?」

先輩: 「正解!🎯 例えば、ソフトウェア開発では、コードだけじゃなくて、そのコードがどうやって他のシステムやサービスと連携するかが重要なんだ。ウェブアプリを作る時に、データベースや認証サービス、メールサービスなど、さまざまな外部システムとやり取りするでしょ?」

後輩: 「はい、そうですね。」

先輩: 「このときネットワークが上手く設定されていないと、サービス間でのデータのやり取りが遅くなったり、最悪繋がらなかったりするんだ。データベースからのレスポンスが遅れば、ユーザーの待ち時間が長くなるし、メールサービスが繋がらないと、重要な通知が届かない。これじゃあ、ユーザー満足度は下がるばかりだよね。」

後輩: 「確かに、それは良くないですね...」

先輩: 「さらに、セキュリティの面でもネットワークは重要だよ。ネットワークがしっかりしていないと、外部からの攻撃に弱くなるんだ。データの流れをコントロールして、不正なアクセスを防ぐのもネットワークの大事な役割だからね。」

後輩: 「セキュリティは大事ですよね。」

先輩: 「そしてね、クラウドサービスを使う現代の開発では、ネットワークの設計が直接コストにも影響するんだ。データ転送量が多いと料金が高くなるから、効率的なネットワーク設計はコスト削減にもつながるよ。」

後輩: 「へー、経済的な側面もあるんですね。」

先輩: 「まとめると、ネットワークはデータのやり取りを効率的にするため、セキュリティを保ち、コストを管理するために不可欠なんだ。だから、ネットワークを理解することは、良いソフトウェアを作る上で絶対に必要なスキルなんだよ。🌟」

後輩: 「なるほど、ネットワークって本当に色んなところで大切なんですね。勉強してみます!」

先輩: 「いいね!分からないことがあったらいつでも聞いてくれ。一緒に学んでいこう!👍」

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2