バックエンド基礎〜データベース編〜

プログラミング
スポンサーリンク

データベース

簡単に言えば、EXCELの表のようなものです。

例えば、ログイン情報なら。
メールアドレス/パスワード/名前書いてあってデータがいっぱいあると。
そういう風に簡単に理解していただければ良いです。

ただ、プログラミングの世界でもデータベースは大きく2種類あります。

リレーショナルデータベース
NoSQL

リレーショナルデータベース

ほぼほぼ多くのWEBサイトやWEBサービスで使わレテいるデータベースの仕掛けです。

細かい話をすると、エクセルで言う「シート1」と「シート2」が関連づいている。
関連性を持たせてシート持っている状態になります。

例えば、インスタグラムを使っていてみなさんのユーザー情報がありますと。
これがテーブル1ですよ。あなたがいいねしたデータってのはなんですか?って言うのがテーブル2に入っていてユーザーのIDをキーにこの2つのデータが紐づいている。
こう言うリレーションを打った形でデータを管理する方法を、リレーショナルデータベースと言います。

有名なところでいうと、

MySQL
PostgreSQL

NoSQL

ほとんど、皆さんは意識しなくても良いです。

SQLがないんです。
SQLがなくても繋がるデータベースです。

有名なところですと。

MongoDB

これどういうところで使われるかというと。
ビッグデータのように、大量のデータを解析したいときに使います。
NoSQLを使えば早い処理ができます。

ただですね、いっぱいの情報を普通のWEBサービスで持ちますか?というとあまり持たないと思います。
なので、まずはリレーショナルデータベースをしっかりと理解する。

性能の問題が発生した場合に、NoSQLが使えるんじゃないか?と思って調べてみる。というような手順で理解していただければと思います。

リレーショナルデータベースの理解がちゃんとできたかをチェックするために、6つのポイントを用意しております。
この6つについてちゃんと説明できれば、データベースとしての基礎知識は身についたとなります。

まずは、この知識を身につけてから、実際にデータベースを使ってみる。という風な手順で進めてください。

正規化
インデックス
トランザクション
ACID特性
ORM(オブジェクト関係マッピング)
n +1問題

これが何かを、グーグルで調べて自分なりにアウトプットして理解をしてください。

API

例えば、あなたがBさんに人参下さいと言えば人参がもらえる。
こういうアプリケーションの間、AさんとBさんのやり取りをする間(仕組み)をAPIと呼びます。

APIの有名どころは主に2つあります。

REST
GRAPHQL

RESTというのは色んな企業で使われているので、まずはRESTについてしっかりと理解していただきたい。

REST

3つの特性があります。

  • URLを指定してデータにアクセスできる
  • HTTPメソッドの使用方法が統一されている
  • 処理結果がHTTPステータスコードで通知される
  • ステートレスであること

URLを指定してデータにアクセスできる

例えば、KAZUHIROMOURIBLOGのページに接続したい。
URLの例として、https://kazuhiromouri.com/usersというようなアドレスがあったとします。

このRESTの世界では、usersという風な情報をもとに情報を判断している。

HTTPメソッド

大きく有名なのが4つあります。

  • GET
  • POST
  • PUT
  • DELETE

例えば、先ほどのURLでhttps://kazuhiromouri.com/usersとあったとします。
このときにGETメソッドを読んだ場合は、ユーザーのの情報が欲しいんだなとなります。

POSTはユーザーの情報をサーバーに登録したい。

PUTはユーザーの情報を更新したい

DELETEはユーザーの情報を削除したい。

usersに対してどんな処理をしたいのか?HTTPメソッドを使って表現する。

HTTPステータスコードで通知される

WEBページをアクセスした時に、404なんとかかんとかというページが出たときありませんか?

この404というのが、HTTPステータスコードで。
not found(リソースはない)。

そんなページは存在しませんという時に、404というのが出ます。

GETができれば200番を返すという風に、世界的なルールとして決められている。

ステートレス

ステートというのは、日本語でいうと状態。
それがレスっていうことは、ないということですね。

例えば、レストランに行ったとします。

店員さんに

なんのメニューにしますか?

と聞かれた時に

ハンバーグください

と言いますよね?そうすると店員さんは

お飲物何にしますか?

と聞かれたら。僕が

コーヒーください

そうすると店員さんは、

ご注文はハンバーグとコーヒーですね?

と尋ねますよね?
これは、店員さんが僕の言ったことを覚えているんですよ。
これをステートフル。注文を覚えている状態ですね。

じゃあステートレスっていうのは、店員さんが

ご注文は何にしますか?

ハンバーグをお願いします。

飲み物は何にしますか?

先ほど言った食べ物は、ハンバーグで。

そして飲み物は、コーヒーをください。

という風にさっき言った事もちゃんと伝えないと、店員さんはステートを持っていないので忘れてしまうんですね。
こういう風に、ステートを持たなくてもやり取りができるルールっていうのは、RESTの最大の特徴です。

利点は?

例えば、WEBサーバーが一個ありますと。
WEBサーバーに対して、アプリケーションサーバーが3つありますと。
という時に、ステートレスだと、どのサーバーに行こうが自由なんですよ。
ただ、ステートを持っていたら、注文してから終わるまで必ずそのサーバーにしないといけないんですよ。
でもこのサーバーが途中で壊れちゃうかもしれない。
色んな原因で、通じなくなっちゃう可能性があります。

そうすると、この通信全部やり直しになっちゃうんですね。
それだとユーザーの利便性が悪いということで。
ステートレスだと、1個のサーバーがダメでも他のサーバーで生きているので。
ユーザーの体験が上がるということでRESTとい事が使われています。

GRAPHQL

RESTにも課題があります。

例えば、さっきのhttps://kazuhiromouri.com/usersにアクセスしようとすると。
userに関連した項目がたくさん出てくる。

今必要なのは、2〜3個の項目なのに。
いっぱいきたら、ネットワークが無駄だろうという事があります。

GRAPHQLは、必要なデータだけを指定して表示できる。
この事で、ネットワークの無駄が省ける事ができる。

若干実装が難しいため。
まずはRESTをしっかり覚えましょう。

認証

ログインや新規ユーザー登録などですね。

これが結構難しい。

  • パスワードが盗まれる可能性
  • 別場所からのログイン(なりすまし)

っていうのがあるんですね。なので、認証というのはちゃんと決められた手続きに従って実装するという事が大切になります。

メジャーなところが

Oauth
Basic認証
JWT(JSON WEB TOKEN)

この3つを説明するとまた長文になりますので。この3つはググって欲しいです。
ただ、ググったとしてもこれをそのまま実装しましょうっていうとめちゃくちゃ大変なんですよ。

なのでここで今回簡単に実装するためのツールというのを紹介します。

これが

Firebase Authentication

Firebaseはグーグルが提供しているサービスなんですけども。
難しい部分を全部やってくれる。
書いている通りにプログラムすれば良い。

そうすれば、早く作れて。セキュリティも安全。

セキュリティ

ある会社ではセキュリティの事故により500億円の損失などありました。

セキュリティの扱いはとても大事。

気をつけるべき代表的なセキュリティともっと深く学ぶための参考書を今回紹介します。

暗号化

漏れてはいけない情報は絶対にそのままの状態で保存しない事
必ず暗号化する。

暗号化にもメジャーな仕組みが3つあります。

SHA(Secured Hash Algorithm)
Sscript
bcrypt

もしもっと知りたいという人がいましたら、

MD5

も学んでおいて欲しいです。
現在使われておりません。セキュリティ上の問題があるから。

ここで学んでおいて欲しいのは、どういうセキュリティ上の問題があってこれを使わなくなったのか?を学んで欲しいんです。
そうすると、セキュリティをただ学ぶだけじゃなくてどのようなことに気をつけないといけないか?など裏側まで学ぶことのできると今後自分で実装するときに。
このケースがあるから、これを気をつけないといけないかもって気付けたります。

SQLインジェクション

データベースにアクセスをする際SQLという言語を使ってアクセスをします。
このSQLに不正な文字列により取れてはいけない情報が取れてしまうという事がSQLインジェクションと呼ばれています。

この防ぎ方は、めちゃくちゃ簡単で。
フレームワークを使用してください。
自分で、SQLを書くようなプログラムを書いたら絶対にバグが仕込まれます。
そういうのを百戦錬磨を経たフレームワークっていうのが世の中にはあるので、それを必ず使って自分でSQL文を書かない事でSQLインジェクションというのを防げると思います。

クロスサイトスクリプティング

不正な情報が埋め込みにより、AにアクセスしたつもりがBに情報は送られてしまった。

これもフレームワークを使う事で除去できます。

DOS攻撃

過度のアクセスによりサーバーが機能しなくなる。

ブルートフォースアタック

例えば、パスワードが”ABCDE”だとします。

このパスワードをやみくもに試す総当たりな攻撃。

制限回数を設けることによって防げる。

ショルダーハッキング

背後から画面を盗み見る
カフェで開発していて、背中から見られて大事な情報が盗まれるというケース。
これ社内でもおきます。

周りに注意を配る。覗き見防止フィルターを貼るなどして対策

セキュリティは奥が深い。今回1個めちゃくちゃ参考になる本を紹介します。

「体系的に学ぶ安全なWEBアプリケーションの作り方第2版」

めちゃくちゃわかりやすく網羅的に、セキュリティの対策が載っているので。

ある程度プログラミングが書けるという風に思います。

セキュリティは一回破られると一巻の終わりです。
セキュリティの専門家になるのは、めちゃくちゃ時間がかかる。
自分が作ったアプリケーションに個人情報や大事な情報を持つのであれば、必ずリリース前にセキュリティの専門会社でチェックをするということをして欲しいです。

コメント