ActiveRecord가 진짜 멋진 이유 — DB를 ‘추상화’하기 때문에 우리는 어떤 DB든 다룰 수 있다
프로그래밍에서 가장 어려운 문제는
서로 다른 시스템을 일관된 방식으로 다루는 것이다.
데이터베이스는 특히 그렇다.
MySQL은 이런 문법
PostgreSQL은 저런 문법
SQLite는 또 다르고
Oracle은 완전히 별 세계
이들을 모두 직접 다루려면
개발자는 DB 문법, SQL 방언(dialect), 인덱싱 특성, 타입 시스템, 트랜잭션 처리 방식까지
매번 모두 기억해야 한다.
하지만 Rails는 이 모든 문제를
ActiveRecord라는 단 한 레이어로 해결했다.
이것이 바로 추상화(abstraction)다.
추상화란 무엇인가? (비유 없이 개념 자체로)
추상화의 핵심은 단순하다.
복잡한 시스템을 단 하나의 공통 인터페이스(API)로 통일시키는 것.
즉,
동작 방식은 다양해도
사용하는 방식은 하나로 만드는 것.
추상화는 엔지니어링 세계에서
가장 강력한 기술 중 하나다.
ActiveRecord는 무엇을 추상화했는가?
정답은 하나다.
DB마다 제각각인 SQL 문법과 동작을 Ruby 객체 조작으로 통일했다.
다시 말해,
“DB마다 다른 세계”를
“Ruby 코드라는 하나의 세계”로 바꿔버린 것이다.
이게 얼마나 강력한가? 예제로 증명해보자
예를 들어, 우리가 User 목록을 가져오고 싶다고 해보자.
직접 SQL을 쓴다면:
MySQL
SELECT * FROM `users` ORDER BY `created_at` DESC LIMIT 10;
PostgreSQL
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
Oracle
SELECT * FROM users WHERE ROWNUM <= 10 ORDER BY created_at DESC;
문법이 다 다르다.
LIMIT도 다르고, 쿼리 규칙도 다르고, 예약어도 다르다.
하지만 ActiveRecord를 쓰면?
Rails
User.order(created_at: :desc).limit(10)
끝.
ActiveRecord는 이 Ruby 코드 하나를 기반으로
각 DB에 맞는 SQL로 자동 변환한다.
MySQL이면 MySQL 맞춤 SQL
PostgreSQL이면 PostgreSQL 맞춤 SQL
SQLite면 SQLite 맞춤 SQL
즉, 개발자는 Ruby만 알면 된다.
추상화가 제공하는 실제 가치
ActiveRecord가 추상화를 통해 얻어내는 이점은 다음과 같다.
1) DB 교체가 자유롭다
예를 들어 SQLite → PostgreSQL로 갈아탄다고 해보자.
보통이라면:
모든 SQL 수정
모든 타입 변경
모든 트랜잭션 처리 수정
모든 LIMIT/OFFSET 문법 수정
하지만 Rails에서는…
아무것도 바꿀 필요가 없다.
Rails config에서 adapter만 바꾸면 된다.
adapter: postgresql
코드는 그대로:
User.where(active: true)
이게 제대로 돌아간다.
2) DB에 대한 지식을 몰라도 개발할 수 있다
ActiveRecord는 다음을 자동 처리한다:
데이터 저장
수정
조회
삭제
트랜잭션
관계설정
외래키 처리
JOIN 최적화
개발자는 이렇게만 하면 된다.
user = User.find(5)
user.update(name: "New Name")
하지만 실제 DB에서는 내부적으로
복잡한 SQL이 자동 실행된다:
UPDATE users SET name = 'New Name' WHERE id = 5;
개발자는 이것을 몰라도 된다.
3) 모델 중심 사고(Model-driven Thinking)를 가능하게 한다
SQL은 데이터 중심 사고다.
하지만 Rails는 객체 중심 사고다.
즉, 우리는 User 모델을 진짜 객체처럼 다룬다.
user.posts
이 한 줄은
JOIN, WHERE, INDEX, 관계 해석…
모든 걸 다 처리한다.
ActiveRecord가 있기 때문에
개발자는 비즈니스 로직 설계에 집중할 수 있다.
추상화를 이해하는 순간 ActiveRecord가 얼마나 기괴하게 천재적인지 보인다
아래 Ruby 코드를 보자.
users = User.where("age > ?", 18).order(:created_at)
이 코드가 실행되면 내부에서는:
모델의 구조를 보고
DB 종류를 확인하고
WHERE 조건을 안전하게 escape 하고
정렬 방식을 적용하고
해당 DB가 이해하는 SQL 문법으로 변환하고
SQL을 실행하고
반환된 값을 레코드가 아니라 Ruby 객체(User)로 변환한다
이 모든 과정은 개발자가 의식할 필요가 없다.
즉,
ActiveRecord = DB라는 다른 세계를 Ruby 세계로 완전히 동화시키는 도구
이 추상화 덕분에
Rails 개발자는
DB 전문가가 아니어도
단 몇 줄의 Ruby만으로
서비스 전체의 데이터를 다룰 수 있다.
결론 — ActiveRecord는 ORM이 아니라 ‘DB 추상화 엔진’이다
왜 ActiveRecord가 “진짜 멋진 놈”인가?
그 이유는 단 하나다.
ActiveRecord는 개발자로 하여금 DB마다 다른 복잡성과 규칙을 모두 잊게 해준다.
그리고 Ruby라는 단일한 언어로 온갖 종류의 DB를 동일한 방식으로 다룰 수 있게 한다.
이것이 추상화의 힘이다.
이것이 Rails의 철학이다.
이것이 왜 ActiveRecord가 역대급 ORM인지에 대한 답이다.