과거 15-20년 전, Ruby는 가독성과 표현력으로 소프트웨어 개발에 혁명을 가져오며 Shopify, GitHub 등 여러 기업의 성장을 견인했습니다. 초기 Ruby는 웹 애플리케이션 수평 확장에 강했지만, GVL(Global Interpreter Lock)로 인한 멀티스레딩 제약으로 대량 데이터 처리(ETL) 같은 고성능 작업에는 한계가 있었습니다. Zendesk는 기존 Ruby 코드베이스를 유지하며 초당 5만 레코드의 높은 처리량을 목표로 ETL 서비스를 구축했고, 이를 위해 JRuby를 도입했습니다. JRuby는 JVM 위에서 실행되어 실제 스레드를 지원하며 GVL 영향을 받지 않았고, Java 라이브러리 활용도 가능하게 했습니다.
15년간 JRuby 기반 ETL 서비스를 운영하며 Zendesk는 몇 가지 교훈을 얻었습니다. Ruby와 Java 코드 스타일 통합의 어려움, JRuby/CRuby 간 라이브러리 호환성 문제(예: YAML 파서), 그리고 초기 Ruby 라이브러리의 스레드 안전성 부족이 주요 도전 과제였습니다. 이를 통해 스레드 안전한 Ruby 코드 작성의 중요성을 깨달았습니다.
현대 소프트웨어 개발에서 Ruby의 확장성 논의는 변화했습니다. 클라우드와 Kubernetes의 발전이 인프라 수준에서 확장성 문제를 크게 완화했으며, Kafka, Maxwell 같은 이벤트 소싱 기술은 데이터베이스 부하를 줄이고 효율적인 배치 처리를 가능하게 합니다. 가장 고무적인 변화는 CRuby 자체의 성능 향상입니다. YJIT 도입으로 Zendesk는 CPU 사용량을 20% 절감했고, Concurrent Ruby와 미래의 Ractors는 Ruby의 동시성 프로그래밍을 발전시킬 잠재력을 가집니다. 최신 Ruby 라이브러리들도 동시성을 적극 지원하며 커뮤니티의 성능 개선 노력을 보여줍니다.