ActiveRecord가 진짜 멋진 이유

ActiveRecord가 DB를 추상화하여 어떤 DB든 다룰 수 있도록 해주는 이유를 설명합니다. 추상화의 강력함과 가치를 알아봅니다.

bamchi 440

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)

이 코드가 실행되면 내부에서는:

  1. 모델의 구조를 보고

  2. DB 종류를 확인하고

  3. WHERE 조건을 안전하게 escape 하고

  4. 정렬 방식을 적용하고

  5. 해당 DB가 이해하는 SQL 문법으로 변환하고

  6. SQL을 실행하고

  7. 반환된 값을 레코드가 아니라 Ruby 객체(User)로 변환한다

이 모든 과정은 개발자가 의식할 필요가 없다.

즉,

ActiveRecord = DB라는 다른 세계를 Ruby 세계로 완전히 동화시키는 도구

이 추상화 덕분에

Rails 개발자는

DB 전문가가 아니어도

단 몇 줄의 Ruby만으로

서비스 전체의 데이터를 다룰 수 있다.


결론 — ActiveRecord는 ORM이 아니라 ‘DB 추상화 엔진’이다

왜 ActiveRecord가 “진짜 멋진 놈”인가?

그 이유는 단 하나다.

ActiveRecord는 개발자로 하여금 DB마다 다른 복잡성과 규칙을 모두 잊게 해준다.
그리고 Ruby라는 단일한 언어로 온갖 종류의 DB를 동일한 방식으로 다룰 수 있게 한다.

이것이 추상화의 힘이다.

이것이 Rails의 철학이다.

이것이 왜 ActiveRecord가 역대급 ORM인지에 대한 답이다.

댓글

댓글 작성

이메일은 공개되지 않으며, 답글 알림에만 사용됩니다.

이어서 읽어보세요

새 글 알림 받기

Bamchi Blog의 새 글이 발행되면 이메일로 알려드립니다.

이메일은 새 글 알림에만 사용됩니다.