Rails 애플리케이션 부팅은 단순히 서버를 시작하는 것을 넘어, Active Record나 Active Job과 같은 모든 구성 요소를 준비하고 조율하는 복잡한 과정입니다. 본 영상은 주요 `config` 파일, Railties, Engines, 그리고 초기화 과정을 통해 Rails 애플리케이션이 어떻게 완벽하게 준비되는지에 대해 심층적으로 설명합니다.
Rails 애플리케이션의 부팅은 웹 서버 없이도 rails console
처럼 모든 기능이 즉시 사용 가능한 상태를 의미하며, 이는 require 'config/environment.rb'
호출로 시작됩니다. 부팅 과정의 핵심 개념은 Lazy Load Hooks (프레임워크가 로딩 시점 결정)와 Initialization Hooks (config.after_initialize
처럼 특정 체크포인트 실행)입니다.
부팅은 config/boot.rb
, config/environment.rb
, config/application.rb
세 파일을 중심으로 진행됩니다. config/environment.rb
는 config/application.rb
를 로드하고 애플리케이션 싱글톤(Rails.application
)의 initialize!
메서드를 호출합니다. config/application.rb
는 먼저 config/boot.rb
를 로드하여 Bundler.setup
및 Bootsnap.setup
을 수행합니다. 이어서 require 'rails/all'
이 실행되면서 Railties와 Engines가 로드되고, 모든 초기화 블록들이 등록됩니다. class Application < Rails::Application
정의 시 Ruby의 inherited
훅이 호출되어 Rails.application
, Rails.root
, 오토로더 등 핵심 객체와 설정이 활성화됩니다.
부팅 과정의 정점은 Rails::Application#initialize!
메서드입니다. 이 메서드는 등록된 초기화 블록들을 의존성에 따라 위상 정렬(topological sort)한 후 순서대로 실행합니다. 초기화 블록은 크게 세 가지 세트로 나뉩니다:
- Bootstrap 초기화 세트: 환경별 설정 로드,
ActiveSupport
로드, 로거 설정,once
오토로더 준비 등이 이루어집니다. - Railties 및 Engines 초기화 세트: Rails 컴포넌트와 Engines에서 정의된 초기화 블록들이 실행되며,
Rails.application
구성 값을 기반으로 해당 컴포넌트 자체를 설정합니다. - Finisher 초기화 세트: 메인 오토로더 설정, 미들웨어 스택 구축,
to_prepare
훅 실행, 애플리케이션 코드 미리 로드 및 라우트 로드,after_initialize
훅 호출, JIT 컴파일러 활성화 등이 포함됩니다.
Rails 애플리케이션의 부팅 과정은 `config` 파일 로드, Railties와 Engines의 초기화 블록 등록, 그리고 `Rails::Application#initialize!`를 통한 체계적인 실행으로 이루어집니다. 이 정교하고 단계적인 설계는 Rails가 제공하는 모듈성과 개발 편의성의 기반이 됩니다.