이전의 Rails는 SQL 경고를 이분법적으로 처리했습니다. 즉, 모든 경고를 보거나 전혀 보지 않는 방식이었습니다. 예를 들어, upsert 작업에서 발생하는 예상된 중복 키 경고(MySQL 1062)는 로그와 모니터링 시스템에 계속 나타나며, 시간이 지남에 따라 기본 노이즈가 되어 스키마 문제나 쿼리 성능 저하와 같은 실제 문제 신호를 가리게 됩니다. Rails는 경고에 대한 세분화된 제어 기능이 없어 특정 경고는 무시하고 다른 경고는 알림을 받도록 설정할 수 없었습니다. 개발자들은 데이터베이스 수준에서 경고를 억제하거나(위험), 로그를 사후 필터링하거나(취약), 단순히 노이즈를 감수하는 방식으로 대처해야 했습니다.
Rails 7.1은 config.active_record.db_warnings_ignore 설정 옵션을 도입하여 이러한 문제를 해결합니다. 이 옵션을 통해 억제할 경고를 지정할 수 있으며, 데이터베이스가 문제를 전달하는 표준화된 방식인 오류 코드를 사용하여 경고를 식별합니다.
경고 억제 설정 유형
이 설정은 세 가지 유형의 값을 허용합니다:
-
문자열: 정확한 오류 코드 일치 (예: MySQL 중복 키에 대한 “1062”)
-
정규 표현식: 관련 경고에 대한 패턴 기반 일치 (예: PostgreSQL ‘Feature not supported’에 대한
^0A000) -
배열: 여러 코드 또는 패턴을 지정할 수 있습니다.
실제 적용 예시
-
MySQL 중복 키 경고 무시:
# config/environments/production.rb config.active_record.db_warnings_ignore = ["1062"] -
PostgreSQL 경고 클래스 무시:
# config/environments/production.rb config.active_record.db_warnings_ignore = [/^0A000/] # PostgreSQL: Feature not supported -
패턴 기반 억제:
# config/environments/production.rb config.active_record.db_warnings_ignore = [ "1062", # MySQL: Duplicate entry /^0A000/, # PostgreSQL: Feature not supported /^42P01/ # PostgreSQL: Undefined table ]
이 기능은 upsert 시 예상되는 중복 키 경고, 레거시 데이터베이스의 무해한 경고, 공유 데이터베이스 환경에서 발생하는 관련 없는 경고 등 다양한 실제 시나리오에서 유용합니다. 단, 스키마 마이그레이션 문제, 성능 저하, 데이터 무결성 문제와 같은 중요한 경고는 절대 무시해서는 안 됩니다.