Rails 8.1의 새로운 기능 및 개선 사항

RailsConf 2025 New and Improved Features in Rails 8.1 by Andrew Novoselac

작성자
Ruby Central
발행일
2025년 07월 24일

핵심 요약

  • 1 Shopify의 Rails 인프라 팀은 Rails 8.1에서 도입되거나 개선된 주요 기능들을 소개합니다.
  • 2 주요 내용은 PostgreSQL 호환성 개선, 구조화된 이벤트 로깅, 민감 데이터 필터링, 테스트 신뢰성 향상 및 에러 리포팅 미들웨어입니다.
  • 3 이러한 기능들은 개발 편의성, 애플리케이션 보안, 성능 및 유지보수성을 크게 향상시킵니다.

도입

본 영상은 Shopify의 Rails 인프라 팀이 Ruby on Rails 프레임워크의 최신 버전인 Rails 8.1에 도입될 예정이거나 이미 개선된 주요 기능들에 대한 라이트닝 토크를 담고 있습니다. 이 팀은 Shopify 내부 및 외부 개발자들이 Ruby와 Rails를 더 잘 활용할 수 있도록 프레임워크와 언어, 관련 도구들을 개선하는 데 주력하고 있습니다. 이번 발표에서는 데이터베이스 호환성, 로깅 시스템, 보안, 테스트 방법론 및 에러 처리 방식에 대한 중요한 업데이트들이 소개되어, Rails 개발의 효율성과 안정성을 높이는 데 기여할 것으로 기대됩니다.

첫 번째 발표에서는 PostgreSQL NOT NULL 제약 조건 위반 문제를 해결하는 방안이 제시되었습니다. 기존 MySQL 환경에서는 insert_allupsert_allid 컬럼에 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의 새로운 에러 리포터 미들웨어는 에러 보고 과정 중간에 추가적인 메타데이터를 삽입하고 공유 로직을 실행할 수 있도록 하여, 여러 구독자 간에 코드 중복을 줄이고 에러 처리 아키텍처를 더욱 깔끔하게 분리할 수 있게 합니다. 이를 통해 에러 분류 및 귀속과 같은 공통 작업을 효율적으로 처리하고, 전체 시스템의 안정성과 관리 용이성을 향상시킵니다.

결론

결론적으로, 이번 라이트닝 토크에서 소개된 Rails 8.1의 새로운 기능들과 개선 사항들은 개발자들에게 더욱 강력하고 유연하며 안전한 개발 환경을 제공합니다. 데이터베이스 호환성 문제 해결은 멀티 데이터베이스 환경을 지원하는 애플리케이션 개발을 용이하게 하고, 구조화된 로깅은 운영 환경에서의 관측성과 문제 해결 속도를 향상시킵니다. 또한, 민감 데이터 로깅 필터링은 애플리케이션의 보안 수준을 높이고, 어설션 없는 테스트에 대한 경고는 테스트 스위트의 품질과 신뢰성을 보장합니다. 마지막으로, 에러 리포터 미들웨어는 복잡한 에러 처리 로직을 효율적으로 관리하고 재사용성을 높여줍니다. 이러한 발전들은 Ruby on Rails가 현대적인 웹 애플리케이션 개발 요구사항에 지속적으로 부응하며, 개발자들이 보다 안정적이고 효율적으로 코드를 작성할 수 있도록 지원하는 프레임워크임을 다시 한번 입증합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!