Rails 8 개발 속도 최적화

RailsConf 2025 Development Speed Optimizations in Rails 8 by Gannon McGibbon

작성자
Ruby Central
발행일
2025년 07월 24일

핵심 요약

  • 1 Rails 애플리케이션의 부트 타임 최적화는 개발 생산성과 직결됩니다.
  • 2 Rails 8은 파일 와칭, 라우팅, 이니셜라이저 처리 방식 개선을 통해 부트 타임을 획기적으로 단축했습니다.
  • 3 Shopify의 실제 사례를 통해 12.5초에서 3.5초로 부트 타임이 줄어든 성능 향상을 입증했습니다.

도입

Rails 애플리케이션의 규모가 커질수록 초기 구동 시간(부트 타임)은 개발 생산성과 개발자 경험을 저하시키는 주요 원인입니다. Shopify 모놀리스와 같은 대규모 애플리케이션은 이러한 문제에 직면했습니다. 본 발표는 Rails 8에서 이루어진 개발 속도 최적화 노력과 그 성과를 다룹니다. `bin/rails boot` 명령어를 통한 프로파일링은 성능 병목 현상 식별의 핵심 도구입니다.

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초 수준으로 단축시키는 놀라운 성과를 가져왔습니다.

결론

결론적으로, Rails 8의 파일 와칭, 라우팅, 이니셜라이저 정렬 최적화는 대규모 Rails 애플리케이션의 개발 생산성과 경험을 획기적으로 개선합니다. 이 개선 사항들은 오픈 소스로 공개되었으며, Rails 8로 업그레이드하는 모든 애플리케이션은 성능 향상의 혜택을 누릴 수 있습니다. 발표자는 주기적인 프로파일링 및 자동화된 시스템 구축을 통해 대규모 애플리케이션에서 성능을 지속적으로 유지하는 것이 중요하다고 강조합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!