SQL이란 무엇인가? そしてRailsでなぜ私たちはSQLをほとんど使わないのか? — ActiveRecordの存在理由
多くの初心者開発者たちがこの点で混乱を感じる。
データベースを使えばSQLが必要なのでは?
しかしRailsではSQLをほとんど使わずにウェブサービスができるのは?
ActiveRecordが一体どんな役割をしているから可能なのだろう?
この記事はまさにその核心を明確に説明する。
1⃣ SQL이란 무엇인가? (본질만 요약)
SQL(Structured Query Language)は
データベースと対話する公式言語である。
DBに操作を要求する際にSQLを使用する。
例:
SELECT * FROM users WHERE age > 20;
この文は
“usersテーブルからageが20より大きいレコードを取得せよ”
という意味である。
SQLでできることは厳密に4つにまとめられる。
Create — データを作成し
Read — データを読み取り
Update — データを修正し
Delete — データを削除する
つまり、CRUD。
すべてのウェブサービスは最終的に
SQLを通じてDBにCRUDを要求する構造である。
2⃣ しかしRailsではSQLをほとんど使わない。なぜか? ActiveRecordがあるからだ。
Railsの中核構成要素の1つがまさにActiveRecordである。
ActiveRecordはORM(Object Relational Mapping)である。
これはどういう意味か?
3⃣ ORM이란? “객체(오브젝트) ↔ 데이터베이스(테이블)”를 자동으로 연결해주는 시스템
プログラミング言語はオブジェクトを使用する。
user = User.new(name: "bamcoding")
DBはレコードを使用する。
usersテーブルの1番row
ORMの役割はただ1つ:
“Rubyの世界のオブジェクト”を“DBの世界のレコード”と自動的に接続すること。
これにより、
オブジェクトを扱うようにデータベースも扱えるようになる。
4⃣ ActiveRecordでSQLを置き換える方法
例1) データの読み取り(Read)
SQL:
SELECT * FROM users;
Rails:
User.all
例2) 条件検索
SQL:
SELECT * FROM users WHERE age > 20;
Rails:
User.where("age > 20")
またはよりRubyらしく:
User.where(age: 21..)
例3) 作成(Create)
SQL:
INSERT INTO users (name, age) VALUES ('bamcoding', 34);
Rails:
User.create(name: "bamcoding", age: 34)
例4) 更新(Update)
SQL:
UPDATE users SET age = 35 WHERE id = 1;
Rails:
user = User.find(1)
user.update(age: 35)
例5) 削除(Delete)
SQL:
DELETE FROM users WHERE id = 1;
Rails:
user = User.find(1)
user.destroy
5⃣ Rails開発者はSQLではなく“Ruby”でDBを操作する
なぜならActiveRecordが
私が出すRubyの命令を
バックグラウンドでSQLに変換してくれるからだ。
つまり、
開発者がSQLを使わなくてもRailsは内部でSQLを生成し実行する。
そのおかげで開発者は
DBを直接制御する技術的負担なしに
ビジネスロジック設計に集中できる。
6⃣ ActiveRecordが“強力だ”と言う真の理由
ActiveRecordの利点は単に“SQLを使わなくてもよい”だけではない。
それは表面的な利点に過ぎない。
真の核心は以下の4つである。
1) モデル(Model)とDBテーブルが自動的に接続される
Userモデルを作成すると
自動的にusersテーブルと接続される。
テーブル名を合わせる必要もなく
マッピングを別途指定する必要もない
Railsが慣習に従って自動接続
これ自体が開発速度を爆発的に向上させる。
2) 関係設定が圧倒的に直感的である
例:
class Building < ApplicationRecord
has_many :rooms
end
class Room < ApplicationRecord
belongs_to :building
end
この2行は
Railsが基本的に次のことを行うようにする:
適切なSQL JOINを作成し
building.rooms呼び出しをサポートし
自動外部キーbuilding_idを管理し
関係ベースのクエリを最適化する
これをSQLで直接実装しようとすると
数十行のJOIN、INDEX、条件式を書かなければならない。
ActiveRecordはこれらすべてを
2行で終わらせる。
3) セキュリティ、インジェクション防止、クエリ最適化をRailsが代行する
直接SQLを書くと生じるリスク:
SQLインジェクション
誤ったクエリによるパフォーマンス低下
SELECT * の乱用
欠落したINDEXによる遅い検索
ActiveRecordは
ほとんどの問題を事前に防止するか
安全なSQLに変換してくれる。
ウェブ開発者のセーフティネットである。
4) Ruby構文と完全に統合された開発体験
クエリをRubyらしく組み立てることができる:
User.where(active: true)
.where("age > ?", 20)
.order(created_at: :desc)
.limit(10)
Rubyコードのように見えるが
内部では最適化されたSQLが生成される。
この“コード組み合わせ”能力が
ActiveRecordを最も強力なORMの1つにしている。
7⃣ 結論 — Rails開発者がSQLをほとんど使わない理由
SQLのすべての複雑さをActiveRecordが抽象化してしまったからだ
開発者はRubyコードだけを書けばよいからだ
モデル-関係-クエリ-保存-削除がすべてRubyオブジェクト操作のように感じられるからだ
生産性、安全性、保守性が圧倒的に向上するからだ
ActiveRecordは単なるORMではなく
Rails生産性の核心エンジンである。