1. Ruby 환경 업그레이드 및 준비
Rails 7 업그레이드에 앞서 Ruby 버전을 먼저 관리해야 합니다.
- 최소 요구 사양: Ruby 2.7.0 이상이 필수적이며, 성능 최적화를 위해 Ruby 3.1 이상을 권장합니다.
- Ruby 3.0의 주요 변화: YJIT 도입으로 인한 20~40% 성능 향상, Ractor를 통한 병렬 실행, 그리고 가장 중요한 키워드 인자(Keyword Arguments)의 엄격한 분리 처리가 필요합니다. Ruby 2.7에서 경고로 처리되던 방식이 Ruby 3.0에서는 에러로 발생하므로 **options 형태의 명시적 전달이 필요합니다.
- YJIT 활성화: config/boot.rb에서 ENV['RUBY_YJIT_ENABLE'] = '1' 설정을 통해 프로덕션 환경의 요청 처리 속도를 대폭 개선할 수 있습니다.
2. JavaScript 전략의 변화: Import Maps와 Hotwire
Rails 7의 가장 큰 특징은 JavaScript 번들링 방식의 변화와 Node.js 의존성 탈피입니다. - Import Maps: Node.js나 Webpack 없이 브라우저에서 직접 모듈을 로드하는 방식입니다. 복잡한 빌드 과정이 생략되어 개발 생산성이 크게 향상됩니다. - Hotwire (Turbo & Stimulus): 복잡한 SPA 프레임워크 없이도 빠른 반응형 UI를 구축할 수 있게 해줍니다. - Turbo Drive: 페이지 이동 시 전체 새로고침 없이 빠른 전환을 지원합니다. - Turbo Frames/Streams: 페이지의 특정 부분만 비동기적으로 업데이트하거나 실시간 데이터를 반영하여 사용자 경험을 개선합니다. - Stimulus: HTML 기반의 가벼운 JavaScript 컨트롤러를 제공하여 가독성 높은 코드를 유지합니다.
3. 데이터 보안 및 쿼리 기능 강화
- ActiveRecord Encryption: 데이터베이스 수준의 암호화를 내장하여 민감한 정보를 안전하게 저장합니다.
deterministic: true옵션을 사용하면 암호화된 데이터에 대한 검색도 가능하여 보안과 편의성을 모두 챙겼습니다. - 새로운 쿼리 메서드:
sole,find_sole_by: 정확히 하나의 레코드만 존재해야 할 때 사용하며, 0개 또는 2개 이상일 경우 에러를 발생시켜 데이터 정합성을 보장합니다.excluding: 특정 레코드나 ID를 결과에서 제외할 때 유용합니다.load_async: 여러 쿼리를 병렬로 실행하여 전체 응답 시간을 단축합니다.
4. 주요 변경 사항 및 주의점
- ActiveStorage:
ActiveStorage::Current.host설정 방식이 제거되었으므로, 설정 파일에서default_url_options를 직접 관리해야 합니다. - Autoloader: 기존의
classic모드가 완전히 제거되고Zeitwerk가 유일한 오토로더로 사용됩니다. - UI 렌더링:
button_to메서드가 기존<input>태그 대신<button>태그를 생성하므로 기존 CSS 스타일링에 영향이 있는지 확인이 필요합니다. - 테스트: Turbo Drive와 Turbo Streams를 사용하는 경우 시스템 테스트를 통해 비동기 업데이트가 정상적으로 작동하는지 검증해야 합니다.