【つらつらメモ】【#1】アーキテクチャについて
久々の更新となります。
ここ1年かなり忙しいプロジェクトに参画しており勉強する暇がないので更新が滞っていました。今は平和なSIプロジェクトになり少し余裕ができてきたので日々学んでいることのアウトプットとして何かしら投稿していきたいと思います。
【背景】
現プロジェクトにて今時にしては珍しく(?)フルスクラッチ開発をすることになり、まずどいうアーキテクチャがいいんだろうかという話から始まっております。
僕は開発者としてコーディングしたことはあるのですが、どんなミドルウェアがいいとか、そもそもアーキテクチャって何だ?の状態であることにいまさらながら気づきまして、改めて1からわからないことを調べていこうと思った次第です。
【結果】
アーキテクチャは一言でいうとシステムの全体図です。
じゃあシステムって何だ、というと下図のようなハード、OS、ミドル、アプリの構成で作られているものだと思っています。
アーキテクチャはそれぞれの箱をより詳細化したもののイメージととらえています。
[アプリケーション]
ユーザの目に触れる部分、一般的にアプリと言われてイメージする部分
詳細化した場合は、アプリケーションの箱にMVCモデルやAction、Store、Stateなどの役割を表した箱を置いていくイメージです。
[ミドルウェア]
ミドルウェアはアプリケーションとOSの間をとりもつ存在
OSにミドルウェアがインストールされることでアプリケーションを作れるようになります。各サーバにミドルウェア製品をインストールすることでシステムを構築していきます。
-webサーバ(apacheやnginx):画面描画などの静的コンテンツを返す、APサーバから返却された動的情報の表示など
-apサーバ(tomcatなど):webサーバから来たリクエストを処置処理
-dbサーバ(postgreSQLやMySQLなど):dbを入れる箱
詳細化した場合は、フロントエンドからバックエンドまでを構成する箱の下にそれぞれのサーバ上で使用するミドルウェア製品を書いていくイメージです。
[OS]
WindowsやMac、Linuxなど、PCやサーバとして動作させる基本的なソフトウェア
詳細化した場合は、使用するOSソフトウェアを記載するイメージです。
[ハードウェア]
サーバなどの物理的なもの
詳細化した場合は・・あまり詳細化して書くものではないような気もします。
以上が僕が調べたアーキテクチャについてです。
【補足】
調べていく中で出てきた疑問として、ソフトウェアという言葉があります。
ミドルウェアやハードウェアはシステムの構成図に表れていますが、ソフトウェアは同じような言葉なのにどこにも出てきていないと思い調べてみました。
簡単に言うとソフトウェアはハードウェアと対比される言葉でした。
つまりシステムを構成する中で物理的(ハード)なもの以外はすべてソフトウェアというとらえ方になると思います。
なのでミドルウェア製品もすべてソフトウェアになります。同じような言葉なのに使われ方が違うので混乱するときもありましたが、これで少し頭がすっきりしました。