첫 번째 발표에서는 PostgreSQL NOT NULL
제약 조건 위반 문제를 해결하는 방안이 제시되었습니다. 기존 MySQL 환경에서는 insert_all
및 upsert_all
시 id
컬럼에 nil
값이 들어와도 자동 증가(auto-increment) 기능이 작동하여 문제가 없었으나, PostgreSQL에서는 nil
이 명시적으로 삽입되려 시도되어 오류가 발생했습니다. Rails 8.1에서는 PR을 통해 기본 키 컬럼의 nil
값을 자동으로 SQL DEFAULT
키워드로 대체하여 데이터베이스 간 호환성을 확보하고 개발자가 직접 nil
값을 처리할 필요가 없도록 개선됩니다.
두 번째 발표는 새로운 구조화된 이벤트 리포터인 Rails.events
에 대한 내용입니다. 기존 Rails의 로그는 사람이 읽기에는 좋지만, 관측성(observability) 플랫폼에서 데이터를 집계하고 쿼리하기에는 부적합한 비구조화된 형태였습니다. Rails.events
는 명확하게 정의된 이벤트 이름과 키워드 인수로 구성된 페이로드를 통해 구조화된 로깅을 지원하여, 로그를 데이터베이스에 쉽게 저장하고 실시간으로 쿼리할 수 있게 함으로써 개발 및 운영 환경에서의 문제 해결 능력을 향상시킵니다.
세 번째 발표는 민감한 정보의 로깅을 방지하는 필터링 개선에 초점을 맞춥니다. Rails는 기본적으로 요청 파라미터를 로그에 기록하여 디버깅에 유용하지만, 신용카드 번호와 같은 민감한 데이터가 포함될 경우 보안 문제가 발생할 수 있습니다. 기존 filter_parameters
설정은 중앙 집중식으로 관리되어 대규모 애플리케이션에서는 유지보수가 어려웠습니다. Rails 8.1에서는 모델에 직접 filter_attributes
를 정의할 수 있는 기능이 추가되어, 개발자가 모델 수준에서 민감한 속성을 쉽게 지정하고 로그에서 자동으로 필터링되도록 하여 보안을 강화하고 관리 편의성을 높입니다.
네 번째 발표는 ‘테스트를 테스트하는’ 중요성에 대해 다룹니다. Rails 7.1에 도입된 기능으로, 어떠한 어설션(assertion)도 수행하지 않는 테스트 케이스에 대해 경고를 발생시킵니다. 이는 테스트가 단순히 코드를 실행만 하고 실제로는 아무것도 검증하지 않아 버그를 놓칠 수 있는 상황을 방지합니다. 발표에서는 예외 발생 여부에만 의존하는 테스트, 환경 의존적인 테스트, 빈 컬렉션을 순회하는 테스트, 그리고 과도한 모킹/스터빙으로 인해 실제 애플리케이션 동작을 검증하지 못하는 테스트 등 어설션이 없는 테스트의 일반적인 사례들을 제시하고, 이를 개선하기 위한 구체적인 방법들을 소개하여 테스트 스위트의 신뢰성을 높이는 데 기여합니다.
마지막으로, Rails 에러 리포터 미들웨어에 대한 발표가 이어졌습니다. Rails 7에서 도입된 에러 리포터는 애플리케이션 내에서 에러를 보고하는 통합적인 방법을 제공하지만, Shopify의 경우 단일 구독자(subscriber)에 모든 로깅, 메트릭, 버그 추적 로직이 혼재되어 유지보수가 어려웠습니다. Rails 8.1의 새로운 에러 리포터 미들웨어는 에러 보고 과정 중간에 추가적인 메타데이터를 삽입하고 공유 로직을 실행할 수 있도록 하여, 여러 구독자 간에 코드 중복을 줄이고 에러 처리 아키텍처를 더욱 깔끔하게 분리할 수 있게 합니다. 이를 통해 에러 분류 및 귀속과 같은 공통 작업을 효율적으로 처리하고, 전체 시스템의 안정성과 관리 용이성을 향상시킵니다.