Rails 주요 기능 업데이트 내용
1. 구조화된 이벤트 보고 (Structured Event Reporting)
Rails는 이제 통합된 API를 통해 구조화된 원격 측정(telemetry)을 위한 일급(first-class) 이벤트 리포터 기능을 제공합니다.
* Rails.event
API: Rails.event.set_context
를 통해 컨텍스트 정보를 설정하고, Rails.event.tagged
블록 내에서 Rails.event.notify
를 사용하여 이벤트와 관련 데이터를 쉽게 발생시킬 수 있습니다.
ruby
Rails.event.set_context(request_id: "abc123", shop_id: 456)
Rails.event.tagged("graphql") do
Rails.event.notify("user.signup", user_id: 123, email: "user@example.com")
end
* 이벤트 구독 및 인코딩: 애플리케이션은 이벤트를 구독하고 ActiveSupport::EventReporter.encoder
를 사용하여 JSON과 같은 형식으로 이벤트를 인코딩하여 외부 시스템으로 내보낼 수 있습니다. 이를 통해 시스템의 상태를 보다 체계적으로 모니터링하고 분석할 수 있습니다.
2. 테스트 헬퍼 개선: assert_events_reported
새로운 테스트 헬퍼 assert_events_reported
가 추가되어 개발자가 블록 내에서 여러 이벤트가 보고되었는지 여부를 유연하게 검증할 수 있게 되었습니다.
* 주요 특징:
* 순서에 관계없이 이벤트를 검증합니다.
* 페이로드(payload) 및 태그 매칭을 지원합니다.
* 추가적인 이벤트를 무시하여 테스트의 견고성을 높입니다.
이 기능은 여러 계측 이벤트가 동시에 발생하는 워크플로우를 테스트하는 데 유용합니다.
3. 다중 이메일 대기열 추가: deliver_all_later
ActionMailer
에 deliver_all_later
메서드가 추가되어 여러 이메일을 한 번에 대기열에 추가할 수 있게 되었습니다.
* 장점: 큐 백엔드(queue backend)와의 왕복 횟수를 줄여 성능을 향상시킵니다.
* 작동 방식: MessageDelivery
객체 배열을 빌드하여 한 번에 푸시하며, ActiveJob.perform_all_later
를 내부적으로 사용합니다. 어댑터가 대량 대기열을 지원하지 않는 경우 개별적으로 대기열에 추가하는 방식으로 자동 전환됩니다.
4. 개발자 경험 개선 사항
- 오류 페이지 ‘텍스트로 복사’ 버튼: 개발 환경의 오류 페이지 헤더에 ‘Copy as text’ 버튼이 추가되어 예외 정보를 간결한 일반 텍스트 형식으로 클립보드에 복사할 수 있습니다.
- 숨겨진 입력 필드
autocomplete="off"
제거:form_tag
,token_tag
,method_tag
,button_to
내의 숨겨진 입력 필드에서 더 이상autocomplete="off"
속성을 강제하지 않습니다.config.action_view.remove_hidden_field_autocomplete
새 설정을 통해 이 동작을 제어할 수 있습니다.
5. Action Cable 및 Rate Limit 개선
- Action Cable
stream_for
복합 채널 지원:ActionCable::Channel#stream_for
및#broadcast_to
에 배열을 전달하여 복합 대상(composite targets)으로 스트리밍 및 브로드캐스팅을 할 수 있게 되어, 여러 모델에 동시에 스트림 범위를 지정할 수 있습니다. scope:
를 통한 Rate Limit 공유:rate_limit
에scope:
옵션을 전달하여 여러 컨트롤러 간에 단일 Rate Limit 카운터를 공유할 수 있습니다. 기본적으로 컨트롤러별로 제한되지만, 동일한scope
값을 사용하면 다른 컨트롤러가 동일한 버킷을 공유하게 됩니다.