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)’라는 철학을 확립했습니다.
이러한 영구적 업그레이드를 가능하게 하는 세 가지 핵심 요소는 다음과 같습니다:
-
Dependabot 그룹을 통한 개발 및 테스트 의존성 최신화: 대규모 젬 업데이트로 인해 발생하는 PR(Pull Request) 피로도를 해결하기 위해 Dependabot의 그룹 기능을 활용합니다. 이는 개발 및 테스트 전용 젬 업데이트 PR을 하나의 그룹으로 묶어 관리함으로써, 개발자들이 수많은 PR 검토에 들이는 시간과 심리적 부담을 크게 줄여줍니다. 이를 통해 기술 부채가 쌓이는 것을 효과적으로 방지하고, 개발자들이 주요 기능 개발에 집중할 수 있도록 돕습니다.
-
모든 지원 Rails 버전 및 Rails main에 대한 젬 일일 테스트: 업그레이드 과정에서 발생하는 젬 호환성 문제를 사전에 해결하기 위해, Zendesk는 자체 유지보수하는 젬들을 모든 지원 Rails 버전 및
Rails main
브랜치에 대해 매일 테스트합니다. 이 접근 방식은 젬의 버전 상한선(upper bound) 제약을 제거하여 향후 Rails 버전과의 호환성을 미리 확보하게 합니다. 현재 약 60개 이상의 젬에 이 전략이 적용되어 있으며, Zendesk의 테스트 스위트는 오픈소스 커뮤니티를 위한 ‘조기 경보 시스템’ 역할을 수행하며, 버그를 조기에 발견하고 해결책을 제시하는 데 기여하고 있습니다. -
CI, 스테이징, 프로덕션 환경에서의 듀얼 부팅 사용: 업그레이드 작업을 ‘끝내지 않고’ 지속적으로 다음 버전으로 나아가는 철학을 구현합니다. Shopify의
boot-boot
젬과 같은 도구를 활용하여 애플리케이션 수준에서 여러 Rails 버전을 대상으로 테스트를 실행하며, 특히 프로덕션 환경에서Rails main
을 대상으로 실행하여 출시 전에 잠재적인 문제를 파악합니다. 이 방식을 통해 Zendesk는 Rails 8.0으로의 전환을 마치 ‘하룻밤’ 만에 완료하는 것과 같은 빠른 속도로 달성할 수 있었습니다. 이는 업그레이드를 일회성 이벤트가 아닌 지속적인 통합 프로세스로 전환하는 핵심 전략입니다.
이러한 지속적인 업그레이드 작업은 비즈니스에 필수적이며, 경영진의 인식과 투자가 매우 중요하다고 강조합니다. 기술 부채 관리에 대한 투자가 부족하면 결국 핵심 비즈니스에 심각한 문제가 발생할 수 있으며, 어떤 프레임워크를 사용하든 유지보수 부담은 존재하기 때문에 이에 대한 투자는 장기적으로 더 저렴한 위험을 감수하는 것과 같다고 설명합니다.