Zoe는 Rails를 사용하여 웹 애플리케이션을 구축하면서, 자신이 입력한 데이터가 SQLite 데이터베이스에 저장된다는 사실을 발견합니다. 그녀는 관계형 데이터베이스의 개념, 테이블, 그리고 여러 테이블 간의 관계를 설정하는 조인(Join) 테이블의 중요성을 이해하게 됩니다. 여기서 Active Record는 Ruby 코드와 데이터베이스 사이의 다리 역할을 하며, Ruby 명령어를 SQL 쿼리로 변환하여 데이터베이스와 상호작용하는 ORM의 핵심 기능을 수행합니다. Zoe는 Idea.all
, count
, where
와 같은 Active Record 메서드를 통해 데이터베이스에서 데이터를 조회하고 조작하는 과정을 콘솔에서 직접 확인합니다. 이 과정에서 Active Record가 Ruby 명령어를 SQL 쿼리로 변환하여 보여주는 것을 통해 내부 작동 방식을 엿볼 수 있었습니다.
강연은 Active Record의 내부를 네 가지 주요 영역으로 나누어 탐색합니다. 첫째, Gemfile 분석을 통해 Rails gem이 Active Record gem을 포함하는 종속성 관계를 파악하고, Gemfile.lock이 애플리케이션에서 사용되는 정확한 gem 버전을 관리하는 중요성을 설명합니다. 둘째, 기본 설정(application.rb
)에서는 require 'rails/all'
명령이 Active Record를 포함한 모든 Rails 컴포넌트를 로드하며, 각 컴포넌트가 railtie
파일을 통해 Rails 애플리케이션에 연결되는 과정을 Rails 소스 코드를 직접 따라가며 보여줍니다. 셋째, 데이터베이스 설정(database.yml
)에서는 Active Record가 이 파일을 통해 데이터베이스 어댑터(SQLite3)와 연결 경로를 파악하며, Zoe가 개발 환경의 SQLite 데이터베이스 파일(development.sqlite3
)을 직접 탐색하여 테이블과 데이터 내용을 확인하는 과정을 시연합니다. 넷째, 모델 생성(application_record.rb
)에서는 Idea
모델이 ApplicationRecord
를 상속하고, ApplicationRecord
가 다시 ActiveRecord::Base
를 상속함으로써 일반 Ruby 클래스가 Active Record 모델로 전환되어 데이터베이스와의 강력한 상호작용 기능을 얻게 되는 핵심적인 메커니즘을 설명합니다.
특히, 강연은 데이터 유효성 검사(Validations)와 레코드 생성(Record Creation) 과정에 대한 심층 분석에 초점을 맞춥니다. Zoe는 presence
및 uniqueness
유효성 검사를 예시로 들어, 레코드 생성 시 유효성 검사가 어떻게 작동하는지 코드 흐름을 추적합니다. 이 과정에서 ActiveRecord::Persistence
, ActiveRecord::Validations
, ActiveModel::Validations
, ActiveModel::EachValidator
등 여러 클래스를 거쳐 유효성 검사 로직이 실행됨을 보여주며, 특히 ActiveModel
에 유효성 검사 로직이 있어 데이터베이스 계층 외부에서도 활용 가능함을 강조합니다. 또한, 유효한 레코드가 데이터베이스에 저장되는 과정을 create
-> save
-> create_or_update
-> create_record
-> insert_record
의 흐름으로 추적하며, 최종적으로 connection.insert
메서드를 통해 SQL 쿼리가 실행되어 데이터가 데이터베이스에 삽입되는 과정을 상세히 설명합니다.