본 강연은 Christian 씨가 Zendesk에서 15년간 운영해온 고성능 ETL(Extract, Transform, Load) 서비스 구축 경험을 바탕으로, Ruby 및 JRuby의 성능과 확장성에 대한 심도 있는 통찰을 제공합니다. 특히, Ruby가 '느리고 확장성이 떨어진다'는 오랜 편견에 도전하며, 실제 대규모 시스템에서 Ruby가 어떻게 성공적으로 활용될 수 있었는지를 구체적인 사례와 기술적 논의를 통해 설명합니다. 강연자는 과거 Ruby의 황금기부터 현재에 이르기까지 Ruby의 기술적 진화와 커뮤니티의 노력을 조명하며, 개발자 생산성과 비즈니스 요구사항에 부합하는 기술 선택의 중요성을 강조합니다.
초기 Ruby는 가독성과 표현력으로 개발자들에게 큰 인기를 얻었으며, Shopify, GitHub, Twitter(초기), Zendesk와 같은 혁신적인 서비스들의 기반이 되었습니다. 이 시기 Ruby는 기술 혁명을 이끌며 빠르게 성장하는 기업들의 요구사항을 충족시켰습니다. 그러나 성장과 함께 확장성이라는 새로운 과제에 직면했습니다. Zendesk는 기존 Ruby 코드베이스를 활용하여 MySQL, React, DynamoDB에서 데이터를 추출하고 변환한 뒤 Elasticsearch로 로드하는 ETL 마이크로서비스를 구축하고자 했습니다. 이 과정에서 Ruby의 전통적인 문제점으로 지적되던 메모리 관리와 GVL(Global Interpreter Lock)로 인한 멀티스레딩의 한계에 부딪혔습니다.
이러한 난관을 극복하기 위해 Zendesk는 JRuby를 도입하는 과감한 결정을 내렸습니다. JRuby는 진정한 운영체제 스레드를 제공하여 멀티스레딩 성능을 향상시켰을 뿐만 아니라, Java 라이브러리 생태계에 대한 접근성을 열어주었습니다. 특히, 텍스트 검색을 위한 언어 감지 기능과 대규모 데이터 처리에 필수적인 Elasticsearch Java 클라이언트의 ‘벌크 프로세서’ 기능을 활용할 수 있게 되면서, Zendesk의 ETL 서비스는 최대 초당 5만 건의 업데이트를 처리하며 15년간 안정적으로 운영될 수 있었습니다. 이는 Ruby가 고성능 시스템에서도 충분히 경쟁력을 가질 수 있음을 입증하는 중요한 사례입니다.
하지만 JRuby 환경에서의 운영은 새로운 도전 과제들을 수반했습니다. Ruby와 Java 코드 스타일을 통합하는 과정에서의 어려움(‘Java 스타일 Ruby’), 특정 라이브러리(예: Psych와 Syck)의 행동 차이로 인한 문제, 그리고 스레드 안전성(thread safety)에 대한 지속적인 고려가 필요했습니다. 특히, 스레드 안전하지 않은 Ruby 라이브러리를 다루거나, 기존 Java 라이브러리에 대한 의존성 때문에 순수 Ruby 대안으로의 전환이 어려운 경우가 발생했습니다.
강연자는 Ruby의 미래와 확장성 개선 방향에 대해서도 논합니다. 최근에는 모놀리식 아키텍처로의 회귀 경향과 함께 클라우드, 쿠버네티스, 그리고 이벤트 소싱(Kafka, Maxwell)과 같은 기술들이 Ruby 애플리케이션의 확장성을 크게 향상시키고 있다고 강조합니다. 또한, C Ruby 자체의 성능 개선 노력(YJIT를 통한 CPU 사용량 20% 감소, Concurrent Ruby, Ractors)과 Ruby 커뮤니티 내에서의 성능 및 동시성(concurrency)에 대한 높은 관심(Karafka 라이브러리의 동시성 문서화 등)이 활발하게 이루어지고 있음을 보여줍니다. 이는 Ruby가 더 이상 과거의 성능 문제에 갇혀 있지 않으며, 지속적으로 발전하고 있음을 시사합니다.
결론적으로, 강연자는 Ruby의 성능 및 확장성 한계에 대한 대중적 담론이 과장된 측면이 있으며, 이는 종종 Ruby 1.7이나 Rails 2 시절의 구시대적인 문제에 머물러 있다고 지적합니다. 대부분의 비즈니스는 Twitter와 같은 초거대 규모의 확장성을 필요로 하지 않으며, Ruby 커뮤니티는 수년간 이러한 문제 해결에 적극적으로 투자해왔습니다. 궁극적으로, 프로젝트에 가장 적합한 도구를 선택하는 것이 중요하며, 때로는 가장 빠른 도구보다 팀의 생산성과 개발자 행복에 기여하는 도구가 더 나은 선택일 수 있음을 강조합니다. Matt의 “Ruby는 프로그래머를 행복하게 만들기 위해 설계되었다”는 인용구는 Ruby가 제공하는 핵심 가치를 명확하게 전달하며 강연을 마무리합니다.