구조화된 이벤트의 필요성 및 개발 배경
기존 비구조화된 로그는 대규모 환경에서 가독성과 검색 효율성이 낮아 개발자 경험을 저해합니다. 구조화된 이벤트는 기계적 파싱과 효율적인 쿼리를 가능하게 하며 데이터 표준화를 통해 시스템 가시성을 향상시킵니다. Shopify는 이러한 문제 해결과 통일된 API, 중복 제거, 검색 최적화, 데이터 품질 향상을 목표로 Structured Event Reporter를 개발했습니다.
Structured Event Reporter API 주요 기능
Rails 8.1에 병합된 이 API는 Rails.Event를 통해 접근 가능한 이벤트 보고 API입니다.
-
구독 및 보고:
Rails.Event.subscribe로 구독자를 등록하고emit메서드를 통해 이벤트 해시(이름, 페이로드, 태그, 컨텍스트 등)를 수신합니다.Rails.Event.notify로 이벤트 이름과 구조화된 데이터 또는 스키마화된 이벤트 객체(예: Protobuf)를 보고합니다. -
컨텍스트 관리:
Rails.Event.tag로 블록 스코프 컨텍스트를,Rails.Event.set_context로 요청/작업 단위 전역 컨텍스트(예:request_id,shop_id)를 관리하며, Rails가 자동으로 컨텍스트 수명 주기를 제어합니다.
Rails 통합 및 향후 계획
향후 Rails 프레임워크는 Active Support Notifications를 활용하여 구조화된 이벤트를 발행하고, Rails Logger와의 통합을 강화하여 JSON 형식의 구조화된 로그 및 개발 환경을 위한 가독성 높은 로그를 기본으로 제공할 계획입니다. 이는 Rails 개발 전반의 이벤트 처리 표준을 높일 것입니다.