이번 주 Rails 업데이트의 핵심 내용은 다음과 같습니다.
-
Dependabot 업데이트 빈도 조정: 새로 생성되는 Rails 애플리케이션의 Dependabot 업데이트 빈도가 기존 일간에서 주간으로 변경되었습니다. 이는 개발자들이 업데이트 알림에 대한 부담을 줄이고, 보다 효율적으로 의존성 관리를 할 수 있도록 돕습니다.
-
인증 제너레이터의 안전한 로그아웃:
SessionsController#destroy
액션에 ‘Clear-Site-Data’ 헤더가 추가되어 로그아웃 시 브라우저 캐시를 명확하게 비우도록 개선되었습니다. 이로써 브라우저의 ‘뒤로/앞으로 캐시’를 통한 잠재적인 데이터 유출 위험을 효과적으로 방지할 수 있습니다. -
delete_all
및update_all
메서드 일관성 강화:update_all
메서드에distinct
또는 CTE(Common Table Expression)를 사용하는 것이 Rails 8.2부터는 Deprecated(비권장)되며 오류를 발생시킬 예정입니다. 이는delete_all
의 동작과 일관성을 맞추기 위함으로, 개발자들은 이러한 변경 사항에 유의하여 코드를 업데이트해야 합니다. -
exists?
쿼리 재시도 가능: 기존에는exists?
쿼리가 문자열로 전달되어 재시도 불가능으로 표시되었으나, 이번 변경을 통해 재시도가 가능하도록 개선되었습니다. 이는 네트워크 문제 등 일시적인 오류 발생 시 쿼리의 안정성을 높이는 데 기여합니다. -
ActiveSupport::Cache::Store#fetch
만료 시간 버그 수정: 캐시 저장소에서 만료된 항목을 가져올 때 만료 시간이 올바르게 처리되지 않던 버그가 수정되었습니다. 이로써 캐시 무효화 및 데이터 일관성이 향상됩니다. -
Action Text 콘텐츠 처리 개선: Action Text 콘텐츠를 일반 텍스트로 변환할 때 ‘script’ 또는 ‘style’ 콘텐츠가 포함되지 않도록 변경되었습니다. 이는 렌더링 전에 추가적인 소독(sanitization)이 필요하다는 점을 다시 한번 상기시키며 보안을 강화합니다.
-
Flash.add_flash_types
헬퍼 메서드 접근성 조정:Flash.add_flash_types
가 헬퍼를 private으로 정의하도록 복원되어, Rails 7.0 이전의notice
및alert
액션을 컨트롤러에서 정의할 수 있었던 동작을 되찾았습니다. -
Model.respond_to?
호출 시 할당 제거: 모델 인스턴스화(Post.new
등) 비용을 줄이기 위해respond_to?
호출 시 불필요한 할당을 제거하도록 최적화되었습니다. 이는 애플리케이션의 전반적인 성능 향상에 기여합니다. -
Active Storage Filename
to_str
위임: Active Storage의Filename
객체가String#==
와 같은 문자열 동등성 비교를 지원하도록to_str
을to_s
로 위임했습니다. -
Active Storage ‘analyzers’ 설정 유효성 보장:
config.active_storage.variant_processor = nil
로 설정하여 Active Storage의 variant processor를 비활성화할 때 발생할 수 있는 문제를 해결하기 위해 ‘analyzers’ 설정에nil
이 포함되지 않도록 보장합니다.