릴리즈 8년차 서비스의 1800개 ERB 파일을 View Component로 이관한 방법과 그 결과

リリース8年目のサービスの1800個のERBファイルをViewComponentに移行した方法とその結果 / Naoyuki Kataoka - Kaigi on Rails 2024

3줄 요약

  • 8년차 Rails 서비스에서 1800개 ERB 파일의 뷰 레이어 기술 부채를 ViewComponent 도입으로 해결했습니다.
  • 기존 ERB 기반 ViewComponent 자동 생성 전략으로 대규모 이관을 효율적으로 수행했습니다.
  • 이관 결과 인터페이스 명확성, 코드 탐색 용이성, 테스트 가능성이 크게 향상되었습니다.

본 발표는 시로 주식회사의 CTO인 카타오카 나오이가 8년차 Ruby on Rails 서비스에서 겪은 뷰 레이어 기술 부채 문제와 그 해결 과정을 다룹니다. 서비스는 1만 회 이상의 릴리즈를 거치며 1800개 이상의 ERB 파일로 확장되었고, 개발 인력 변동과 함께 구현 일관성 부족, 불명확한 파라미터 정의, 템플릿 내 과도한 로직 등으로 인해 유지보수 및 재사용이 어려운 상황에 직면했습니다.

이러한 문제를 해결하기 위해 명확한 인터페이스와 테스트 용이성을 제공하는 ViewComponent 라이브러리 도입을 결정했습니다. ViewComponent는 클래스와 템플릿을 분리하고 생성자를 통해 파라미터를 명시적으로 전달하여 기존 ERB의 문제점을 개선합니다. 1800개의 방대한 파일을 수동으로 이관하는 것은 현실적으로 어렵고 지속적인 기능 개발에 방해가 되므로, 기존 ERB 파일을 기반으로 ViewComponent 코드를 자동 생성하는 전략을 채택했습니다. 자동 생성 스크립트는 ERB 파싱을 통해 뷰의 의존 관계와 필요한 파라미터를 분석한 후, ViewComponent 클래스, 템플릿, RSpec 테스트 파일 및 테스트 데이터를 생성합니다. 생성된 코드와 테스트 데이터의 미세 조정 과정이 가장 많은 시간을 소요했습니다. 안전한 배포를 위해 기존 뷰와 분리된 View Path를 사용하고, Feature Flag 및 Canary Release를 통해 단계적으로 새 뷰를 적용했습니다.

ViewComponent 도입 결과, 컴포넌트 호출 인터페이스가 명확해지고 코드 탐색이 용이해져 개발 생산성이 향상되었습니다. 무엇보다 모든 뷰 컴포넌트에 대한 테스트가 가능해져 구현 오류를 조기에 발견할 수 있게 되었습니다. 1800개 뷰의 렌더링 테스트를 수 분 내에 완료 가능합니다. 자동 생성 전략은 수동 이관보다 훨씬 효율적이었으며, 이관 기간 중 코드 변경에도 유연하게 대처할 수 있어 대규모 리팩토링에 효과적인 방법임을 입증했습니다. 성능 면에서는 Active Record 쿼리 시간이 지배적이어서 큰 변화는 없었습니다. 결론적으로 ViewComponent는 Rails 뷰 유지보수성을 높이는 유용한 도구이며, 자동 생성 기법은 대규모 레거시 코드 이관에 성공적인 전략입니다.