이번 주 Rails 업데이트는 다양한 영역에서 개발 편의성과 성능, 그리고 관측 가능성을 향상시키는 데 중점을 두었습니다.
1. 구조화된 이벤트 보고(Structured Event Reporting) 도입
Rails에 새로운 일급(first-class) 이벤트 리포터가 추가되어 구조화된 텔레메트리(telemetry)를 위한 통합 API를 제공합니다.
* Rails.event
를 통해 접근 가능하며, 컨텍스트와 태그를 포함하여 이벤트를 발행할 수 있습니다.
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
* 애플리케이션은 이벤트에 구독하여 원하는 인코더(예: JSON)를 선택하여 출력을 처리할 수 있습니다. 이는 시스템의 관측 가능성(observability)을 크게 향상시킵니다.
2. 새로운 테스트 헬퍼 #assert_events_reported
테스트 코드 내에서 특정 블록 안에서 여러 이벤트가 올바르게 보고되었는지 확인할 수 있는 새로운 테스트 헬퍼가 추가되었습니다. * 이벤트의 순서에 구애받지 않으며, 페이로드 및 태그 매칭을 지원하고, 추가적인 이벤트는 무시합니다. * 여러 계측 이벤트가 동시에 발생하는 워크플로우를 테스트하는 데 유용합니다.
3. 이메일 일괄 전송 기능 deliver_all_later
이제 여러 이메일을 한 번의 작업으로 큐에 추가할 수 있어 큐 백엔드와의 왕복 횟수를 줄여 성능을 향상시킵니다.
* MessageDelivery
객체 배열을 구성하여 ActionMailer.deliver_all_later
를 통해 한 번에 전송할 수 있습니다.
* 내부적으로 ActiveJob.perform_all_later
를 사용하며, 벌크 큐잉을 지원하지 않는 어댑터의 경우 개별 큐잉으로 자동 전환됩니다.
4. 개발자 경험 개선
- 에러 페이지 ‘Copy as Text’ 버튼: 개발 환경의 에러 페이지 헤더에 ‘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 및 속도 제한 개선
- Action Cable: 복합 채널 지원:
ActionCable::Channel#stream_for
및#broadcast_to
가 이제 배열을 통한 복합 대상(composite targets) 스트리밍 및 브로드캐스트를 지원합니다. 이를 통해 여러 모델에 동시에 스트림 범위를 지정할 수 있습니다. - 컨트롤러 간 속도 제한 공유:
rate_limit
에scope:
옵션을 전달하여 여러 컨트롤러 간에 단일 속도 제한 카운터를 공유할 수 있게 되었습니다.