강연은 Rails 애플리케이션의 부트 타임 프로파일링 방법과 세 가지 주요 최적화 영역을 다룹니다.
1. 부트 타임 프로파일링
bin/rails boot
: Rails 8.0+에 추가된 명령으로 부팅 과정을 격리하여 프로파일링을 용이하게 합니다.- 프로파일러 활용:
stackprof
로 데이터 수집 후speedscope
로 플레임 그래프 분석. Rails 초기화 섹션에 집중합니다.
2. 파일 감시(File Watching) 최적화
- 문제:
i18n
번역 파일(config/locales
) 감시가 개발 환경에서file stat
체크로 인한 병목을 유발합니다. - 해결:
Rails.root
외부 젬 파일 감시 제외, 누락 파일 처리 로직 개선, 부트 시 불필요한 파일 감시 로직 제거. - 결과: 약 5배 성능 향상, Rails 8.0부터 적용.
3. 라우팅(Routing) 최적화
- 문제:
config/routes.rb
및 엔진 라우트가 부트 시 모두 평가되어 시간 소요가 발생합니다. - 해결: Lazy Route Set 도입.
Rails.application.routes
접근 시에만 라우트를 지연 로딩합니다. 개발 및 테스트 환경에서만 활성화됩니다. - 결과: 부트 과정에서 라우트 로딩이 제거, Rails 8.0부터 적용.
4. 초기화(Initializer) 정렬 최적화
- 문제:
ActiveSupport::Initializable::Collection
의Tsort
기반 정렬 시each_child
메서드에서 비효율적인 배열 스캔이 발생합니다. - 해결:
Collection
구현 변경. 초기화 삽입 시 정렬 정보를 해시에 미리 매핑하여each_child
에서 빠른 조회를 가능하게 합니다. - 결과:
t-sort
병목 제거, Rails 8.1에 포함될 예정.