Rails 8에서는 애플리케이션 부트 타임 개선을 위해 다음 세 가지 핵심 영역에서 최적화가 이루어졌습니다.
1. 파일 와칭(File Watching) 최적화
기존 Rails는 개발 환경에서 번역 파일 감시 시 불필요한 파일 시스템 접근으로 부트 타임 지연을 유발했습니다. Rails 8은 Rails 루트 외부 파일 필터링 및 부트 시 불필요한 검사 제거로 약 5배 성능 향상을 달성했습니다. Rails 8.0부터 적용됩니다.
2. 라우팅(Routing) 최적화
대규모 Rails 애플리케이션에서 라우트 파일은 부트 시점에 모두 로드되어 상당한 시간을 소요했습니다. Rails 8은 LazyRouteSet
을 도입, 라우트가 실제로 필요할 때 지연 로드되도록 변경했습니다. 이는 개발/테스트 환경에만 적용되며, 부트 프로세스에서 라우트 로딩을 완전히 제거하여 성능을 크게 향상시켰습니다. Rails 8.0부터 적용됩니다.
3. 이니셜라이저(Initializer) 정렬 최적화
이니셜라이저는 제약 조건으로 인해 정렬(T-sort
) 과정에서 비효율이 발생했습니다. 기존 구현은 이니셜라이저 수 증가 시 반복적인 스캔으로 시간이 소요되었습니다. Rails 8.1에서는 InitializableCollection
내부 구현을 개선, 삽입 시점에 정렬 작업을 미리 처리하고 실제 정렬 시점에는 해시 조회를 통해 효율성을 높여 정렬 시간을 크게 단축시킵니다. Rails 8.1에서 정식 출시될 예정입니다.
이러한 다각적인 최적화 노력은 Shopify의 모놀리스 애플리케이션 부트 타임을 기존 12.5초에서 3.5초 수준으로 단축시키는 놀라운 성과를 가져왔습니다.