Rails 8의 Active Record 연관 관계 Deprecation 기능은 특정 연관 관계를 선언할 때 deprecated: true 옵션을 추가하는 방식으로 활성화됩니다. 예를 들어, has_many :meetings, deprecated: true와 같이 선언할 수 있습니다. 이렇게 Deprecated로 표시된 연관 관계가 호출되거나, 이를 참조하는 쿼리가 실행되거나, :dependent 또는 :touch와 같은 사이드 이펙트가 발생할 때 Rails는 설정된 보고 모드에 따라 사용자에게 알립니다.
모든 연관 관계 유형 지원
이 기능은 has_many, belongs_to, has_one, has_many through 등 모든 유형의 Active Record 연관 관계에 적용 가능합니다.
다양한 보고 모드
Deprecated된 연관 관계 사용 시 세 가지 보고 모드를 선택할 수 있습니다:
-
:warn(기본값): Active Record 로거에 경고를 기록합니다. -
:raise: 예외를 발생시켜 즉각적인 수정을 유도합니다. -
:notify:deprecated_association.active_record키로 Active Support 알림 이벤트를 발생시켜 외부 서비스 연동을 가능하게 합니다.
백트레이스 및 설정
백트레이스는 기본적으로 비활성화되어 있으나, backtrace: true 옵션으로 활성화할 수 있습니다. 이는 :warn 및 :notify 모드에서 클린 백트레이스를 제공하며, :raise 모드는 항상 스택 트레이스를 포함합니다. Deprecation 옵션은 config/initializers/deprecated_associations.rb에서 전역적으로, 또는 config/environments/*.rb에서 환경별로 설정 가능하여 유연한 관리를 지원합니다.
Deprecated 기능의 전략적 활용
이 기능은 대규모 코드베이스에서 특히 중요합니다. 연관 관계를 즉시 제거하는 대신 Deprecated 처리함으로써, 잠재적 문제를 사전에 식별하고 모든 사용처를 파악하여 점진적인 리팩토링을 통해 안전하게 제거할 수 있습니다. 이는 예기치 않은 프로덕션 오류를 방지하고 코드베이스의 건전성을 유지하는 데 기여합니다.