문제점: 경고 노이즈
이전 Rails 버전에서는 SQL 경고를 전체적으로 보거나 전혀 보지 않는 방식이었습니다. 예상된 중복 키 경고와 같은 반복적인 경고는 로그와 모니터링 시스템에 쌓여 실제 문제(스키마 오류, 쿼리 성능 저하)를 가리는 ‘기준 노이즈’가 되었습니다. 데이터베이스 수준에서 경고를 억제하거나, 로그를 사후 필터링하거나, 단순히 노이즈를 감수하는 방식은 한계가 있었습니다.
제어된 경고 억제 도입
Rails 7.1은 config.active_record.db_warnings_ignore 설정을 통해 이 문제를 해결합니다. 이 설정은 데이터베이스가 오류를 전달하는 표준 방식인 ‘오류 코드’를 사용하여 특정 경고를 억제할 수 있게 합니다. 설정 값은 세 가지 유형을 지원합니다:
-
문자열: 정확한 오류 코드 일치 (예: MySQL의 중복 키 오류 “1062”)
-
정규식: 관련 경고에 대한 패턴 기반 일치 (예: PostgreSQL의 “Feature not supported”
^0A000) -
배열: 여러 코드 또는 패턴을 동시에 지정
실제 적용 예시
- MySQL 중복 키 경고 무시:
config.active_record.db_warnings_ignore = ["1062"]User.upsert({ email: "test@example.com", name: "John" })실행 시 1062 오류 코드는 무시됩니다.
-
PostgreSQL 경고 클래스 무시:
config.active_record.db_warnings_ignore = [/^0A000/] - 패턴 기반 억제:
config.active_record.db_warnings_ignore = ["1062", /^0A000/, /^42P01/]
실제 사용 사례
-
Upsert 작업에서 예상되는 중복 키 경고
-
레거시 데이터베이스에서 발생하는 사용되지 않는 구문이나 인덱스 관련 경고
-
공유 데이터베이스 환경에서 다른 애플리케이션 스키마에서 발생하는 무관한 경고
경고를 무시하지 말아야 할 때
-
스키마 마이그레이션 문제, 성능 저하, 데이터 무결성 문제는 절대 무시해서는 안 됩니다.
-
각 경고를 무시하는 이유를 명확히 문서화하고 주기적으로 재검토해야 합니다.
-
경고 설정은 버전 관리 시스템에 포함하고 주석으로 의사결정을 기록해야 합니다.
-
공유 데이터베이스 환경에서는 다른 팀과 조율 후 경고를 억제해야 합니다.