Rails 기본값이란 무엇인가?
Rails 기본값은 Rails의 동작에 영향을 미치는 설정값으로, Rails 팀이 제안하는 권장 값을 가집니다. 이는 config/application.rb
또는 초기화 파일에서 구성될 수 있으며, Rails 스택 전반에 걸쳐 영향을 미칩니다.
기본값 변경의 예시
- Rails 5 이전 vs. 이후:
config.active_record.belongs_to_required_by_default
는 Rails 5 이전에는false
였으나, 이후true
로 변경되어 자식 레코드 저장 시 부모 연관 관계의 존재를 필수로 만듭니다. - Rails 6:
action_dispatch.return_only_media_type_on_content_type
은false
에서true
로 변경되어 HTTP 응답에charset
정보를 포함하게 됩니다. - Rails 6.1:
action_dispatch.cookies_same_site_protection
은null
에서lax
로 변경되어 쿠키 보안 옵션이 기본으로 설정됩니다. - Rails 7:
action_view.button_to_generates_button_tag
는false
에서true
로 변경되어button_to
헬퍼가<input type="button">
대신 적절한<button>
태그를 생성합니다.
기본값이 변경되는 이유
- 더 나은 관행 수용: 데이터베이스 제약 조건 활용 등 개발 방식을 개선합니다.
- 상용구 코드 감소: 반복적인 설정 작업을 줄입니다.
- 향후 Deprecation 대비: 특정 기능의 단계적 폐지를 준비합니다.
Rails 프레임워크 기본값 관리
Rails는 config.load_defaults
설정과 new_framework_defaults_*.rb
파일을 통해 기본값을 관리합니다.
config.load_defaults
:application.rb
에 설정되며, 애플리케이션이 어떤 버전의 기본값을 사용할지 고정합니다. 이 값은 Rails 업그레이드 시 자동으로 변경되지 않아 기존 앱의 갑작스러운 동작 변경을 방지합니다.new_framework_defaults_*.rb
파일: Rails 업그레이드 과정에서 생성되며, 해당 버전에서 변경되거나 새로 추가된 기본값 목록을 포함합니다. 초기에는 모두 주석 처리되어 있으며, 개발자가 하나씩 주석을 해제하며 점진적으로 새로운 기본값을 적용하도록 유도합니다.- Rails 5.0 이전: 기본값이 주석 없이 이전 값으로 설정되어 수동으로 변경해야 했습니다.
- Rails 5.1 이후: 기본값이 주석 처리된 채 새로운 값으로 설정되어 점진적인 채택이 용이해졌습니다.
왜 기본값을 업그레이드해야 하는가?
오래된 기본값을 유지하는 것은 애플리케이션을 ‘시간 속에 고정’시키는 것과 같습니다. 이는 다음과 같은 문제를 야기합니다. * 새로운 기능, 성능, 보안 개선 사항 미적용: 최신 Rails 버전의 이점을 누릴 수 없습니다. * Deprecation 및 삭제: Rails가 오래된 기본값을 제거할 경우 수동으로 설정을 지정해야 합니다. * Gem 및 튜토리얼 호환성 문제: 대부분의 Gem과 자료는 최신 기본값을 가정하고 작동합니다. * 향후 업그레이드 난이도 증가: 여러 버전의 기본값 변경 사항이 누적되면 한 번에 처리하기 매우 어려워집니다.
기본값 업그레이드 계획: ‘느리고 꾸준하게’
- 준비 작업: 테스트 스위트 커버리지를 확인하고 모든 테스트가 통과하는지 확인합니다.
- 조사: Rails 업그레이드 가이드,
new_framework_defaults_*.rb
파일, Rails 소스 코드 및 Pull Request를 통해 각 기본값 변경의 맥락과 애플리케이션에 미칠 영향을 파악합니다. - 실행:
new_framework_defaults_*.rb
파일에서 기본값을 하나씩 주석 해제하여 적용합니다.- 불확실한 변경 사항에는 기능 플래그(feature flags)를 활용하여 런타임에 제어할 수 있도록 합니다.
- 애플리케이션에 특정 구버전의 동작이 필요한 경우, 해당 기본값을
application.rb
나 별도의 초기화 파일에 명시적으로 설정하여 오버라이드합니다. - 각 변경 후 테스트, 배포, 모니터링을 통해 문제점을 확인합니다.
- 모든 기본값이 적용되면
new_framework_defaults_*.rb
파일을 삭제하고config.load_defaults
버전을 최신으로 업데이트합니다.
Rails 코어팀에 대한 제안
업그레이드 가이드 및 new_framework_defaults_*.rb
파일 내에서 변경 사항에 대한 설명을 개선하고, 관련 PR이나 이슈 링크를 제공하여 개발자들이 변경의 배경과 영향을 쉽게 이해할 수 있도록 지원해야 합니다. 개발자가 소스 코드를 직접 파고들지 않고도 이러한 중요한 변경 사항을 파악할 수 있도록 명확한 문서화가 필수적입니다.