JRuby 10 및 최적화: Ruby를 위한 Java 플랫폼의 힘

[EN] Optimizing JRuby 10 / Charles Nutter @headius

작성자
RubyKaigi
발행일
2025년 05월 27일

핵심 요약

  • 1 JRuby 10은 Ruby 3.4 호환성 및 Java 21 이상을 지원하며, 시작 시간, 성능, 동시성 등 여러 측면에서 상당한 최적화를 이루었습니다.
  • 2 JVM의 강력한 기능과 최적화 기술을 활용하여 순수 Ruby 코드 및 C 확장에서도 C Ruby 대비 우수한 성능을 제공합니다.
  • 3 JRuby는 Ruby 애플리케이션을 Java 생태계로 확장하고 다양한 환경에서 활용할 기회를 제공하며, 프로젝트의 지속적인 발전을 위한 커뮤니티의 지원을 강조합니다.

도입

본 발표는 20년간 JRuby 개발 및 유지보수를 담당해온 발표자가 JRuby 10의 주요 업데이트와 다양한 최적화 방안을 소개하는 자리입니다. 발표자는 Red Hat의 후원이 중단된 이후 루비 커뮤니티의 지원을 통해 프로젝트를 이어가고 있음을 밝히며, JRuby 10이 루비 3.4 호환성과 자바 21 이상의 최소 요구사항을 갖추게 되었음을 강조했습니다. JRuby의 최적화는 단순히 성능 향상을 넘어 개발자 경험, 호환성, 시작 및 워밍업 시간 단축, 멀티코어 활용 등 다방면에서 이루어지고 있습니다.

JRuby는 루비 버전 업데이트를 추적하는 데 있어 지속적인 도전에 직면해 왔으나, JRuby 10은 루비 3.4와의 호환성을 확보하여 C 루비와의 격차를 성공적으로 줄였습니다. 특히, 레일스(Rails)의 액티브 레코드(Active Record)와 같은 데이터베이스 어댑터 호환성 유지가 가장 많은 노력을 요구하며, 소규모 팀의 한계로 인해 커뮤니티의 적극적인 기여가 필요하다고 역설합니다.

JRuby의 전통적인 약점이었던 시작 시간은 자바 17 이후 도입된 AppCDS(Application Class Data Store) 기능을 활용하여 C 루비에 버금가는 수준으로 단축되었습니다. 향후 Project Leyden의 AOT 캐싱과 Project CRaC(Coordinated Restore at Checkpoint) 또한 시작 시간 개선에 크게 기여할 것으로 기대됩니다. 성능 측면에서 JRuby는 JVM의 수십 년간 축적된 최적화 기술을 바탕으로 순수 루비 코드(예: Red-Black Tree 벤치마크)는 물론, C 확장(예: OJ JSON 파서)에서도 C 루비의 YJIT보다 뛰어난 성능을 보여줍니다. 이는 JVM이 C 코드를 효율적으로 인라인하고 런타임에 최적화하는 능력 덕분입니다.

파이버(Fibers) 구현에 있어서 JRuby는 과거 네이티브 스레드 의존성으로 인한 제약이 있었으나, Project Loom의 가상 스레드 도입으로 훨씬 빠르고 효율적인 파이버 생성이 가능해졌습니다. 또한, 루비의 Class#newData 객체 생성 시 JVM의 최적화된 객체 할당 덕분에 C 루비 대비 월등히 빠른 성능을 제공하며, GraalVM과 같은 JIT 컴파일러를 통해 불필요한 객체 할당을 제거하는 이점까지 누릴 수 있습니다.

동시성(Concurrency) 측면에서 JRuby는 ractors와 같은 복잡한 모델 대신 일반 스레드를 사용하여 시스템의 모든 코어를 효과적으로 활용할 수 있음을 강조합니다. JSON 파싱 벤치마크를 통해 C 루비의 스레드 및 ractors 대비 JRuby 스레드가 월등한 성능을 보였으며, 레일스 애플리케이션에서도 단일 프로세스에서 더 적은 메모리로 더 많은 요청을 처리할 수 있어 높은 효율성을 자랑합니다.

마지막으로, JRuby는 자바가 실행되는 모든 환경에서 루비 애플리케이션을 배포할 수 있는 기회를 제공하여 루비의 활용 범위를 넓힙니다. 자바 스윙(Java Swing)을 활용한 GUI 애플리케이션, Shoes 4, Glimmer, 마인크래프트(Minecraft) 플러그인, 안드로이드(Android) 애플리케이션(Ruboto) 등 다양한 분야에서 루비를 활용할 수 있음을 보여주며, 이는 루비 개발자들이 기존 지식과 라이브러리를 활용하여 새로운 시장과 엔터프라이즈 환경에 진출할 수 있는 중요한 통로가 됨을 시사합니다.

결론

JRuby 10.x 버전에서는 키워드 인자 최적화, AOT 캐시, Project Panama를 통한 FFI(Foreign Function Interface) 속도 향상 등 추가적인 최적화가 계획되어 있습니다. 발표자는 JRuby가 루비 커뮤니티가 직면한 성능 문제와 엔터프라이즈 환경 배포 문제를 해결하고, 루비의 활용 영역을 확장하는 데 핵심적인 역할을 할 것이라고 강조합니다. JRuby 프로젝트의 지속적인 발전을 위해서는 사용자들의 적극적인 시도와 피드백, 그리고 기업들의 후원 및 파트너십이 절실함을 역설하며, 루비 커뮤니티의 지속적인 관심과 지원을 요청하며 발표를 마무리합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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