Zendesk Rails 모놀리스의 17년 역사: 아키텍처, 성능, 테스트 및 업그레이드 여정

C. Planas, A. Mikhaylov, "2000 engineers, 2 millions lines of code: the history of a Rails monolith"

작성자
jeff
발행일
2025년 01월 13일

핵심 요약

  • 1 Zendesk는 17년간 Ruby on Rails 모놀리스를 주력으로 사용하며 아키텍처, 데이터베이스, 테스트 전략을 발전시켜왔습니다.
  • 2 성능 병목은 Ruby가 아닌 데이터베이스에 있었으며, 방대한 테스트 스위트와 MiniTest 활용이 안정적인 운영에 기여했습니다.
  • 3 Rails 버전 업그레이드의 어려움과 '선발 주자 불이익'을 극복하며 지속적인 개선을 이뤄낸 경험을 공유합니다.

도입

본 발표는 Christian과 Anatoli가 Zendesk에서 17년간 Ruby on Rails 모놀리스를 운영하며 축적한 경험과 지혜를 공유하는 자리입니다. 이들은 단순히 Zendesk 모놀리스의 기술적 진화를 설명하는 것을 넘어, Ruby 및 Rails 커뮤니티의 독특한 문화와 개발자들이 기술에 대해 품는 열정, 그리고 그 과정에서 발생하는 '드라마'가 어떻게 개발자들을 성장시키고 기술 발전을 이끌었는지에 대해 언급합니다. Zendesk가 오랜 시간 동안 Ruby on Rails를 주력으로 사용하며 겪었던 아키텍처, 성능, 테스트, 그리고 업그레이드에 이르는 전반적인 여정을 심도 있게 다룹니다.

Zendesk의 아키텍처는 초기 다수의 Rails 애플리케이션이 공통 로직을 공유하는 형태에서 시작하여, 기업 인수합병을 계기로 서비스 간 데이터 공유 모델로 진화했습니다. 현재는 Kafka를 활용한 이벤트 기반 아키텍처를 도입하여 시스템 간의 유연한 상호작용을 구현하고 있습니다. 발표자는 마이크로서비스가 만능 해결책이 아니며, 모놀리스와 마이크로서비스는 기업의 성장 단계에 따라 적절히 선택되어야 하는 스펙트럼의 개념임을 강조합니다. 특히 스타트업 초기에는 모놀리스가 빠른 시장 적합성 탐색과 반복 개발에 유리하며, Zendesk 역시 필요에 따라 모놀리스를 점진적으로 분리하는 경로를 따랐다고 설명합니다.

성능 측면에서 Anatoli는 Zendesk와 같은 대규모 조직에서 진정한 병목은 Ruby 언어 자체가 아닌 데이터베이스라고 역설합니다. Zendesk는 샤딩된 데이터베이스 인프라를 통해 방대한 고객 데이터를 관리하며, 활성 데이터와 비활성 데이터를 명확히 구분하여 효율성을 높였습니다. ‘성능, 쿼리 처리 능력, 데이터 가용성’ 중 두 가지만 선택할 수 있다는 원칙을 통해, 대규모 시스템에서 데이터셋의 크기 관리가 성능에 미치는 지대한 영향을 강조합니다.

신뢰성 확보를 위해 Zendesk는 160만 라인 이상의 코드 베이스와 55,000개가 넘는 방대한 테스트 스위트를 운영하고 있습니다. Ruby 테스트 프레임워크인 MiniTest의 창시자이자 유지보수자인 Ryan Davis가 Zendesk 내부에서 테스트 문화를 선도하고 있으며, MiniTest가 빠르고, 간결하며, ‘마법’이 적어 대규모 테스트 환경에 최적화되어 있다고 설명합니다. 배포 파이프라인은 스테이징 환경에서의 통합 테스트와 카나리 배포를 포함하며, 각 단계에서 충분한 ‘베이크 타임’을 통해 잠재적 문제를 조기에 발견하고 시스템의 안정성을 극대화합니다. 또한, GitHub의 ‘Code Owners’ 기능을 활용하여 코드 소유권을 명확히 하고, 변경 사항에 대한 책임과 협업 효율성을 높이고 있습니다.

Rails 버전 업그레이드는 Zendesk의 오랜 모놀리스 운영에서 가장 큰 도전 중 하나였습니다. Rails 1.0부터 현재 7.x 버전까지의 업그레이드 과정에서 메타프로그래밍의 과도한 사용이 주요 난관으로 작용했습니다. 특히 Rails 4에서 5로의 업그레이드는 2년 반이라는 긴 시간이 소요되었는데, 이는 복잡한 ‘마법’ 코드를 단순화하고 제거하는 과정이 필요했기 때문입니다. Zendesk는 Rails의 핵심 기능이 공식적으로 도입되기 전에 자체적으로 구현했던 ‘선발 주자 불이익(First Move Disadvantage)’ 사례(예: Strong Parameters, Sharding)를 공유하며, Rails 커뮤니티와의 활발한 소통과 협업을 통해 이러한 문제를 극복할 수 있음을 제안합니다.

결론

발표자들은 대규모 Rails 애플리케이션을 성공적으로 운영하고 확장하는 데 있어 단순히 성능 최적화를 넘어, 조직의 작동 방식과 기술 역사에 대한 깊이 있는 이해가 필수적이라고 결론 내립니다. 과거의 경험으로부터 교훈을 얻되, 그 경험에 갇히지 않고 변화에 유연하게 대응하는 '역사와의 거리 두기'의 중요성을 강조합니다. Zendesk의 17년간의 Rails 모놀리스 운영 경험은 Ruby on Rails가 대규모 엔터프라이즈 환경에서도 강력하고 안정적인 플랫폼임을 입증하며, 끊임없는 학습과 개선을 통해 미래에도 성공적인 개발 문화를 이어갈 수 있다는 희망적인 메시지를 전달합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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