Active Record는 Ruby 코드를 실제 SQL 쿼리로 변환하여 데이터베이스와 통신하는 ORM(Object-Relational Mapping) 역할을 수행합니다. 이는 Project.all
이나 Todo.find(id)
와 같은 간결한 Ruby 명령어가 내부적으로 복잡한 SELECT * FROM projects
또는 SELECT * FROM todos WHERE id = [id]
와 같은 SQL 쿼리를 생성함을 의미합니다. 이러한 추상화는 개발자가 데이터베이스 세부 사항에 덜 신경 쓰고 비즈니스 로직에 집중할 수 있게 합니다. Active Record의 핵심적인 작동 원리는 ‘상속’에 있습니다. Rails의 모든 모델(예: Project
, Todo
)은 ApplicationRecord
를 상속하며, ApplicationRecord
는 다시 ActiveRecord::Base
를 상속합니다. 이 상속 체인을 통해 ActiveRecord::Base
에 정의된 .where
, .find
, .create
, .destroy
와 같은 수많은 메서드들이 하위 모델에 자동으로 전달되어, 모델 클래스 정의가 비어 있더라도 강력한 데이터베이스 기능을 사용할 수 있습니다.
또한, 이 영상은 데이터베이스 스키마를 변경하는 Rails 마이그레이션의 중요성을 강조합니다. bin/rails generate migration
명령어를 사용하여 completed
(boolean), priority
(integer) 필드를 todos
테이블에, active
(boolean) 필드를 projects
테이블에 추가하는 과정을 시연합니다. 이 필드들에 default
값과 null: false
제약 조건을 설정하여 데이터 무결성을 확보하는 방법도 설명합니다. 마이그레이션 실행 후, schema.rb
파일을 통해 변경된 스키마를 확인할 수 있습니다. 새로운 속성들이 추가되면, Active Record의 유연한 쿼리 인터페이스를 사용하여 Todo.where(completed: false).order(priority: :desc)
와 같이 데이터를 효율적으로 조회할 수 있습니다. 특정 SQL 쿼리가 어떻게 생성되는지 확인하고 싶을 때는 .to_sql
메서드를 활용할 수 있으며, Active Record가 제공하지 않는 매우 복잡하거나 사용자 정의된 쿼리가 필요한 경우에는 find_by_sql
메서드를 통해 직접 SQL을 작성할 수도 있습니다. 다만, find_by_sql
사용 시에는 SQL 인젝션과 같은 보안 문제에 주의해야 함을 경고합니다.