제안된 Rails.event
API는 Rails.event.notify
메서드를 통해 이벤트 이름과 데이터 해시를 전달하여 깔끔하고 구조화된 이벤트를 발행할 수 있도록 설계되었습니다. 예를 들어, 사용자 생성(user.created
)이나 주문 완료(order.completed
)와 같은 비즈니스 이벤트를 명확한 구조로 기록할 수 있습니다. 특히 이 시스템의 핵심 기능 중 하나는 Rails.event.tagged
를 활용한 계층적 컨텍스트 관리입니다. Fiber 기반 스토리지를 사용하여 자식 프로세스가 부모의 컨텍스트를 상속받고, 동시에 메인 스레드의 컨텍스트를 오염시키지 않으면서 Rails의 동시성 요청 처리와 완벽하게 작동하여 각 요청 또는 백그라운드 작업이 독립적인 컨텍스트를 가질 수 있도록 합니다. 또한, 복잡한 비즈니스 로직을 가진 이벤트를 위해 to_h
메서드를 구현하는 커스텀 이벤트 객체를 생성하여 이벤트 포맷팅 로직을 캡슐화하고 재사용성을 높일 수 있습니다. 직렬화 측면에서는 기본적으로 JSON 인코딩을 지원하며, 고주파 이벤트 처리를 위해 MessagePack 인코딩을 구독자 수준에서 구성하여 페이로드 크기를 줄이고 성능을 향상시킬 수 있습니다.
이벤트 발행만큼 중요한 것은 발행된 이벤트를 처리하는 것입니다. Rails.event
는 이 역할을 수행하는 ‘구독자(Subscribers)’ 시스템을 제공합니다. 구독자는 이벤트가 발행될 때 호출되는 이벤트 핸들러 역할을 하며, 구조화된 JSON 로깅, StatsD를 통한 메트릭 전송, 분석 플랫폼으로의 이벤트 전달 등 다양한 작업을 수행할 수 있습니다. 여러 구독자를 등록하여 동일한 이벤트를 동시에 여러 시스템으로 보낼 수 있어 유연성이 뛰어납니다. 실제 애플리케이션에서는 이커머스 컨트롤러에서 주문 생성/실패 이벤트를 추적하거나, 백그라운드 작업의 시작, 진행, 완료, 실패를 구조화된 데이터로 기록하여 모니터링 대시보드를 구축하는 데 활용될 수 있습니다. 이는 기존의 파편화된 로깅 방식으로는 얻기 어려웠던 풍부하고 의미 있는 데이터를 제공합니다.
Rails.event
는 기존 Rails의 ActiveSupport::Notifications
와는 다른 목적을 가집니다. ActiveSupport::Notifications
가 주로 성능 모니터링과 프레임워크 수준의 계측에 사용되는 반면, Rails.event
는 사용자 가입, 주문 완료, 기능 사용 등 실제 애플리케이션에서 발생하는 비즈니스 이벤트를 추적하는 데 특화되어 있습니다. 두 시스템은 상호 보완적으로 사용될 수 있으며, Rails.event
는 더 풍부한 컨텍스트 처리, 유연한 데이터 인코딩, 분석 플랫폼 연동에 최적화된 구독자 시스템을 제공합니다.
현재 이 기능은 활발히 개발 중이며, Rails.event.notify
API, Fiber 기반 컨텍스트, 커스텀 이벤트 객체, JSON/MessagePack 직렬화, 구독자 시스템은 거의 확정적입니다. 그러나 기본 로깅 동작, 민감 데이터 필터링, 고처리량 애플리케이션을 위한 성능 튜닝 등은 여전히 논의 중입니다. 이 기능이 Rails 코어에 포함될지는 아직 불확실하며, 만약 포함된다면 Rails 8.1 또는 그 이후 버전에 등장할 가능성이 있습니다. 개발자들은 이 기능이 도입되기 전에도 기존 코드베이스에서 구조화된 이벤트 로깅 기회를 모색하고, 이벤트 스키마를 설계하며, 구독자 전략을 미리 구상함으로써 대비할 수 있습니다.