Ruby 업그레이드 (3.1.4 -> 3.4.4)
Ruby 업그레이드 과정에서는 Gemfile 업데이트 및 bundle install 후 다양한 테스트 및 자산 사전 컴파일 관련 오류가 발생했습니다. 주요 해결 사례는 다음과 같습니다.
-
기본 라이브러리 로딩 변경:
OpenStruct및Logger가 더 이상 기본으로 로드되지 않아config/application.rb에require 'ostruct'및require 'logger'를 추가했습니다. -
Gem 호환성 문제:
bootstrapgem으로 인한Sass engine오류는sassc-railsgem 추가로 해결되었으며,sidekiq-cron및drbgem은 최신 버전으로 업그레이드하거나Gemfile에 명시적으로 추가했습니다. -
자산 사전 컴파일 오류: Heroku 배포 시
digital envelope routines::unsupported오류는NODE_OPTIONS=--openssl-legacy-provider환경 변수 설정으로 임시 해결했습니다. -
Ruby 내부 변경:
Regexp.new의 인자 변경으로 인한 오류는Regexp.new('...', Regexp::FIXEDENCODING | Regexp::NOENCODING)와 같이 수정했습니다. -
Rubocop:
RSpec/BeEqcop은 비활성화하고,Rubocop v1.76.0의Lint/EmptyInterpolationcop 버그는 오픈소스에 기여하여v1.76.1에서 해결되었습니다.
Rails 업그레이드 (6.1.7.6 -> 7.2)
Rails 업그레이드 시에는 여러 Gem의 호환성 문제가 발생했으며, Zeitwerk 코드 로더 도입으로 인한 구조적 변경이 가장 큰 도전이었습니다.
-
Gem 업그레이드:
paper_trail,paranoia,devise,listen,graphql등 다수의 Gem을 Rails 7.2와 호환되는 최신 버전으로 업그레이드했습니다. -
JavaScript 컴프레서:
Uglifier::Error발생으로uglifier를terser로 대체하고config.assets.js_compressor = :terser로 설정했습니다. -
Zeitwerk 코드 로더: Rails 7.2의 기본 코드 로더인 Zeitwerk의 엄격한 규칙으로 인해 많은 문제가 발생했습니다.
config/initializers/zeitwerk.rb를 생성하여 커스텀 클래스의 인플렉션 매핑을 정의하고, Zeitwerk 규칙을 따르지 않는 특정 폴더는 무시한 후 파일을 수동으로require하는 방식으로 해결했습니다. -
메서드 변경:
to_s메서드가 더 이상 포맷 인자를 받지 않아to_fs로 변경했으며,ActiveRecord오류 처리 방식(errors.each,object.errors.add) 및alias_attribute사용법도 Rails 7.2에 맞춰 수정했습니다. -
YAML 역직렬화: PaperTrail에서 발생한
Psych::DisallowedClass오류는config.active_record.use_yaml_unsafe_load = true설정으로 해결했습니다.
AI 도구 활용 및 결론
AI 도구는 to_s를 to_fs로 변경하는 등 반복적이고 정형화된 작업에서 유용했으나, Zeitwerk 설정이나 dry-auto_inject와 같은 복잡한 문제 해결에는 한계가 있었습니다. AI는 개발자를 완전히 대체하기보다는 효율성을 높이는 도구로 활용될 것이며, 엔지니어는 AI의 한계를 인지하고 효과적으로 활용하는 능력을 키워야 합니다. 업그레이드 과정에서 Rubocop에 풀 리퀘스트를 제출하는 등 오픈소스 커뮤니티에 기여한 경험도 공유되었습니다.