IT企業で働くための最低限の知識(前半戦)

インターネット業界で働く上で、そもそものパソコンに関する知識、コンピュータサイエンスの基礎は知っておかないといけないと考えた。この段階で、クックパットの新人研修用資料がとても参考になったので、自分のインターネットに関する知識のアウトプットとしてブログに書き記すことにした。

  • 目次
    • コンピュータ
    • クライアント
    • サーバー
    • ネットワーク
    • エンジニア
    • リクエストとレスポンス
    • セキュリティ

Top画面にデータが表示されるまでに起こっていること

ズバリ、「ネットワークを介してコンピュータ同士が通信をしている」のだ。

抽象的に流れを描くと、

1 クライアントがサイトにアクセスする

⇨クライアントとサーバ

2 データを要求する

⇨ネットワーク

3 サーバが色々処理する

⇨サーバ

4 クライアントにサーバがデータを送り返す

⇨サーバとネットワーク

5 受け取ったデータを画面に表示する

⇨ネットワークとクライアント

コンピュータ

ハードウェアとソフトウェアに分けることができる

ハードウェア

手にとって触れる機会、パソコンやスマートフォンタブレットなど

ソフトウェア

物理的に触れられないもの。

プログラミングを指す。OSやアプリケーションのこともさす。

OSとは、オペレーティングシステムの略。

アプリケーションとは、特定用途のために作られたものを指す

アプリケーションを作るには、プログラミング言語が必要になる。

プログラミング言語を効率よく使うための共通部品、ライブラリが存在する

  • 種類

    Facebookでログインするための部品

    Swiftで書かれた画像加工の共通部品

    検索機能を実装するための部品

ライブラリは、フレームワークの中に存在する。

クライアント

  • クライアントとは

    リクエストを送る役割のコンピュータや携帯のこと。

    こういうデータを送り返してほしいという依頼主を指す。URIにHTTPリクエストを記述してサーバにデータのリクエストを送っている。

具体的なクライアント

webにリクエストを送るブラウザをWebブラウザという

Internet Explorer

Safari

Chrome

Firefox

サーバ

リクエストを受け付けてレスポンスを返す役割を持つアプリケーションやコンピュータ

レスポンスとは

クライアントからの欲しい情報リクエストに対して応答すること

リクエストに応じて4つ種類がある

  • WEBサーバ

    APサーバ

    DBサーバ

    検索サーバ

WEBサーバ

クライアントからリクエストを受け付けてWebページや画像を返すサーバを指す。

あらかじめ用意しておいた、ページや画像ファイルなどの静的ファイルを送り返す役割を持つ。

  • NginX

    Apache HTTP Server

APサーバ

Webアプリケーションを動かすためのサーバ

リクエストに応じて内容が変化する動的ページを返す。

application.html.erbに書かれたページの<%= render %>部分がそうなのかも。同じレイアウトでも、ユーザーによって違うページを返す

DBサーバ

データを保存したり取り出したりする。

検索サーバ

大量のデータの中から索引する。

DBサーバからのリクエストに対して、ここにデータがあるよといったレスポンスを返す。

  • Elasticsearch

    Solr

クライアントがデータをリクエストしたときの流れ

クライアント⇨webサーバ→

APサーバ→検索サーバ→

APサーバ→DBサーバ→

APサーバ→webサーバ⇨クライアント

補足

webサーバは静的ファイルを作成している

動的ファイルはAPサーバが作成してレスポンスしている

ネットワーク

複数のコンピュータを繋いでデータを送受信するもの

コンピュータ同士をケーブル中継器で繋いている

エンジニアの種類

  • フロントエンド

    モバイルアプリやweb画面を作っているエンジニア

    主にiOSエンジニアやAndroidエンジニアと呼ばれることが多い。

  • バックエンド

    サーバで動くアプリケーションを作るエンジニア

  • サービス開発

    ユーザに向けてサービス(画面、機能)を作る

  • 基盤エンジニア

    サービス開発エンジニアに向けて開発環境を整えたり、複数のサービスで使われる共通部分を作ったりする。

  • SRE(インフラエンジニア)

    Site Reliability Engineeringをしている。

    サービスがいつでも快適に利用できるように保つ

    サービス開発エンジニアが素早くリリースできる仕組みを作っている

    「大量のアクセスに耐える仕組みを作る」「サービスが正常に動いているか24時間体制で簡易する」「素早くリリースできる環境を整える」

  • 研究開発エンジニア/リサーチャー

    サービス開発に活かすために新しい技術を研究・開発する。

    機械学習

    ・音声インターフェイス(Amazon echo)

技術基礎研修「クックパッドを支える仕組み」 / Introduction to the Internet