SQL이란 무엇인가?

SQL이란 무엇인가? Rails에서는 SQL을 거의 쓰지 않는 이유와 ActiveRecord의 역할에 대한 설명. 초보 개발자들의 혼란 해소

bamchi 496

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로 할 수 있는 일은 딱 네 가지로 정리된다.

  1. Create — 데이터를 만들고

  2. Read — 데이터를 읽고

  3. Update — 데이터를 수정하고

  4. Delete — 데이터를 삭제한다

즉, CRUD.

모든 웹서비스는 결국

SQL을 통해 DB에 CRUD를 요청하는 구조다.


2⃣ 그런데 Rails에서는 SQL을 거의 쓰지 않는다. 왜? ActiveRecord가 있기 때문이다.

Rails의 핵심 구성 요소 중 하나가 바로 ActiveRecord다.

ActiveRecord는 ORM(Object Relational Mapping)이다.

이게 무슨 뜻이냐?


3⃣ ORM이란? “객체(오브젝트) ↔ 데이터베이스(테이블)”를 자동으로 연결해주는 시스템

프로그래밍 언어는 객체를 사용한다.

user = User.new(name: "bamcoding")

DB는 레코드를 사용한다.

users 테이블의 1번 row

ORM의 역할은 단 하나다:

“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을 안 써도 된다”가 아니다.

그건 표면적인 장점일 뿐이다.

진짜 핵심은 아래 네 가지다.


1) 모델(Model)과 DB 테이블이 자동으로 연결된다

User 모델을 만들면

자동으로 users 테이블과 연결된다.

  • 테이블 이름을 맞출 필요도 없고

  • 매핑을 따로 지정할 필요도 없다

  • Rails가 관례(convention)로 자동 연결

이 자체가 개발 속도를 폭발적으로 높인다.


2) 관계 설정이 압도적으로 직관적이다

예:

class Building < ApplicationRecord
  has_many :rooms
end

class Room < ApplicationRecord
  belongs_to :building
end

이 두 줄은

Rails가 기본적으로 다음을 수행하도록 만든다:

  • 적절한 SQL JOIN을 생성하고

  • building.rooms 호출을 지원하고

  • 자동 외래키 building_id를 관리하고

  • 관계 기반 조회를 최적화한다

이걸 SQL로 직접 구현하려면

수십 줄의 JOIN, INDEX, 조건식을 써야 한다.

ActiveRecord는 이 모든 것을

두 줄로 끝낸다.


3) 보안, 인젝션 방지, 쿼리 최적화를 Rails가 대신한다

직접 SQL을 쓰면 생기는 위험:

  • SQL Injection

  • 잘못된 쿼리로 인한 성능 저하

  • SELECT * 남발

  • 누락된 INDEX로 인한 느린 조회

ActiveRecord는

대부분의 문제를 사전에 방지하거나

안전한 SQL로 변환해준다.

웹 개발자의 안전망이다.


4) Ruby 문법과 완벽히 통합된 개발 경험

쿼리를 Ruby스럽게 조립할 수 있다:

User.where(active: true)
    .where("age > ?", 20)
    .order(created_at: :desc)
    .limit(10)

Ruby 코드처럼 보이지만

내부에서는 최적화된 SQL이 생성된다.

이 “코드 조합” 능력이

ActiveRecord를 가장 강력한 ORM 중 하나로 만든다.


7⃣ 결론 — Rails 개발자가 SQL을 거의 쓰지 않는 이유

SQL의 모든 복잡함을 ActiveRecord가 추상화해버렸기 때문이다

개발자는 Ruby 코드만 작성하면 되기 때문이다

모델-관계-조회-저장-삭제가 모두 Ruby 객체 조작처럼 느껴지기 때문이다

생산성, 안전성, 유지보수성이 압도적으로 좋아지기 때문이다

ActiveRecord는 단순한 ORM이 아니라

Rails 생산성의 핵심 엔진이다.

댓글

댓글 작성

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

이어서 읽어보세요

새 글 알림 받기

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

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