레거시에서 최신으로: Zendesk가 모놀리스를 Rails 8.0으로 업그레이드한 방법

[EN] From Legacy to Latest: How Zendesk Upgraded a Monolith to Rails 8.0 Overnight - Thomas Countz

작성자
Visuality.pl
발행일
2025년 03월 17일

핵심 요약

  • 1 Zendesk의 Ruby Platform Core 팀은 대규모 Rails 모놀리스를 대상으로 '영구적 업그레이드' 전략을 성공적으로 구현했습니다.
  • 2 이 전략은 Dependabot 그룹을 통한 의존성 관리, Rails main에 대한 젬의 일일 테스트, 그리고 CI/프로덕션 환경에서의 듀얼 부팅 활용을 핵심으로 합니다.
  • 3 지속적인 업그레이드는 기술 부채를 최소화하고 장기적인 비즈니스 지속 가능성을 보장하며, 이는 조직의 인식과 투자가 필수적임을 강조합니다.

도입

Zendesk의 토마스 카운츠(Thomas Counts)는 Ruby Platform Core 팀의 일원으로서, Zendesk의 방대한 Ruby on Rails 생태계, 특히 대규모 모놀리스 애플리케이션을 최신 버전으로 지속적으로 업그레이드한 과정을 공유합니다. 그는 Rails 3.2 버전이 10년 전의 문제와 동일하다는 아일린 우타셀(Eileen Utasel)의 인용문을 통해 기술 스택을 최신으로 유지하는 것의 중요성을 역설합니다. Ruby 플랫폼 엔지니어의 핵심 역할은 Ruby와 Rails가 기업의 비즈니스 요구사항과 개발자들의 효율성 및 만족도를 동시에 충족하도록 보장하는 것이며, 이는 단순한 기술적 작업을 넘어선 전략적 과제임을 강조합니다.

Zendesk의 Ruby Platform Core 팀은 2020년 3명의 엔지니어로 시작하여 현재 6명으로 확장되었으며, 기술 부채 관리와 Rails 업그레이드에 전념하고 있습니다. 이 팀의 설립은 Zendesk가 이러한 필수적인 유지보수 작업에 대한 투자를 공식적으로 인정했음을 의미합니다. 2022년 기준 Zendesk는 두 개의 주요 모놀리스(모놀리스 A, 모놀리스 B)와 약 100개의 서비스, 1,800개에 달하는 젬(Gem)을 관리하고 있었습니다. 특히 모놀리스 B는 480명의 기여자와 200만 라인의 Ruby 코드를 포함하며, Rails 2에서 시작하여 1,200시간 이상의 노력 끝에 Rails 6.1로 업그레이드된 대규모 애플리케이션입니다. 이 팀은 Rails 6.1 달성 직후 Rails 7을 목표로 하는 ‘영구적 업그레이드(perpetual upgrades)’라는 철학을 확립했습니다.

이러한 영구적 업그레이드를 가능하게 하는 세 가지 핵심 요소는 다음과 같습니다:

  1. Dependabot 그룹을 통한 개발 및 테스트 의존성 최신화: 대규모 젬 업데이트로 인해 발생하는 PR(Pull Request) 피로도를 해결하기 위해 Dependabot의 그룹 기능을 활용합니다. 이는 개발 및 테스트 전용 젬 업데이트 PR을 하나의 그룹으로 묶어 관리함으로써, 개발자들이 수많은 PR 검토에 들이는 시간과 심리적 부담을 크게 줄여줍니다. 이를 통해 기술 부채가 쌓이는 것을 효과적으로 방지하고, 개발자들이 주요 기능 개발에 집중할 수 있도록 돕습니다.

  2. 모든 지원 Rails 버전 및 Rails main에 대한 젬 일일 테스트: 업그레이드 과정에서 발생하는 젬 호환성 문제를 사전에 해결하기 위해, Zendesk는 자체 유지보수하는 젬들을 모든 지원 Rails 버전 및 Rails main 브랜치에 대해 매일 테스트합니다. 이 접근 방식은 젬의 버전 상한선(upper bound) 제약을 제거하여 향후 Rails 버전과의 호환성을 미리 확보하게 합니다. 현재 약 60개 이상의 젬에 이 전략이 적용되어 있으며, Zendesk의 테스트 스위트는 오픈소스 커뮤니티를 위한 ‘조기 경보 시스템’ 역할을 수행하며, 버그를 조기에 발견하고 해결책을 제시하는 데 기여하고 있습니다.

  3. CI, 스테이징, 프로덕션 환경에서의 듀얼 부팅 사용: 업그레이드 작업을 ‘끝내지 않고’ 지속적으로 다음 버전으로 나아가는 철학을 구현합니다. Shopify의 boot-boot 젬과 같은 도구를 활용하여 애플리케이션 수준에서 여러 Rails 버전을 대상으로 테스트를 실행하며, 특히 프로덕션 환경에서 Rails main을 대상으로 실행하여 출시 전에 잠재적인 문제를 파악합니다. 이 방식을 통해 Zendesk는 Rails 8.0으로의 전환을 마치 ‘하룻밤’ 만에 완료하는 것과 같은 빠른 속도로 달성할 수 있었습니다. 이는 업그레이드를 일회성 이벤트가 아닌 지속적인 통합 프로세스로 전환하는 핵심 전략입니다.

이러한 지속적인 업그레이드 작업은 비즈니스에 필수적이며, 경영진의 인식과 투자가 매우 중요하다고 강조합니다. 기술 부채 관리에 대한 투자가 부족하면 결국 핵심 비즈니스에 심각한 문제가 발생할 수 있으며, 어떤 프레임워크를 사용하든 유지보수 부담은 존재하기 때문에 이에 대한 투자는 장기적으로 더 저렴한 위험을 감수하는 것과 같다고 설명합니다.

결론

Zendesk는 가장 큰 모놀리스 애플리케이션을 '실험장'으로 삼아 얻은 귀중한 교훈과 경험을 다른 서비스와 제품에 확산시키는 전략을 성공적으로 사용했습니다. 향후 Zendesk는 이러한 학습과 발견을 더 광범위하게 공유하고, 오픈소스 커뮤니티에 적극적으로 기여하며, 자체 개발한 유용한 도구들을 오픈소스화할 계획입니다. 궁극적인 목표는 Rails 업그레이드가 더 이상 두렵거나 오랜 시간이 걸리는 작업이 아니라는 인식을 확산시키는 것입니다. 초기에 상당한 투자가 필요하지만, 일단 체계적인 시스템이 구축되면 유지보수 비용이 훨씬 절감된다는 점을 강조하며, 이러한 접근 방식이 Zendesk의 Rails 8.0으로의 빠른 전환을 가능하게 했음을 역설하며 발표를 마무리합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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