Rails는 has_many, belongs_to 등 연관 관계 선언 시 :deprecated 옵션을 추가하여 해당 연관 관계를 폐기된 것으로 표시할 수 있도록 합니다. 예를 들어, class Client < ApplicationRecord; has_many :projects, deprecated: true; end와 같이 설정하면, projects 연관 관계가 사용될 때마다 Active Record는 이를 보고하기 시작합니다.
이 기능은 세 가지 보고 모드를 지원하여 사용자가 필요에 따라 동작 방식을 선택할 수 있습니다.
보고 모드 (Reporting Modes)
-
:warn (기본값): Active Record 로거를 통해 경고 메시지를 기록합니다. 필요한 경우 클린 백트레이스(clean backtrace)를 활성화하여 경고의 출처를 쉽게 추적할 수 있습니다.
-
:raise:
ActiveRecord::DeprecatedAssociationError예외를 발생시킵니다. 이는 개발 및 테스트 환경에서 폐기된 연관 관계 사용 시 즉시 실패하도록 하여 문제를 빠르게 인지하는 데 가장 적합합니다. 이 모드에서는 항상 클린 스택 트레이스가 포함됩니다. -
:notify:
deprecated_association.active_recordActive Support 알림을 발생시킵니다. Sentry, New Relic과 같은 커스텀 모니터링 시스템이나 기타 관측 가능성(observability) 도구와 통합하기에 이상적입니다. 알림 페이로드에는 연관 관계 객체(:reflection), 사용 유형(:message), 발생 위치(:location), 그리고 선택적으로 전체 컨텍스트를 위한 백트레이스(:backtrace)가 포함됩니다.
백트레이스(Backtrace) 설정
기본적으로 백트레이스는 비활성화되어 있습니다. 그러나 간접적인 사용이나 공유 코드에서 트리거되는 경우, 백트레이스를 활성화하면 문제의 근원을 파악하는 데 큰 도움이 됩니다. config/application.rb 파일에서 config.active_record.deprecated_associations_options = { mode: :warn, backtrace: true }와 같이 설정하여 백트레이스를 활성화할 수 있습니다. Rails.backtrace_cleaner를 사용하여 필터링되므로, 노이즈 없이 애플리케이션 수준의 관련 위치를 얻을 수 있습니다.
전역 설정
애플리케이션 전반에 걸쳐 모든 폐기된 연관 관계에 대한 동작을 전역적으로 설정할 수 있습니다. 예를 들어 config.active_record.deprecated_associations_options = { mode: :notify, backtrace: true }와 같이 설정하여 모든 환경에서 일관성을 유지하고 대규모 폐기 작업의 배포를 간소화할 수 있습니다.