Ruby 3.5의 Ractor와 ZJIT: 병렬 처리 및 성능 최적화를 위한 새로운 지평

Aaron Patterson - Rails World 2025 Closing Keynote

작성자
HackerNews
발행일
2025년 09월 13일

핵심 요약

  • 1 Ruby 3.5에서는 Ractor를 통해 CPU 바운드 작업을 위한 진정한 병렬 처리를 제공하며, 이는 기존 C 확장과 유사하게 GVL을 해제하는 'No GVL 블록'처럼 활용될 수 있습니다.
  • 2 새로운 JIT 컴파일러인 ZJIT은 메서드 기반 접근 방식을 통해 단일 코어 성능을 향상시키며, JIT 친화적인 코드를 작성하기 위해 호출 사이트 단형화(monomorphization)와 일관된 인스턴스 변수 설정이 중요합니다.
  • 3 Ractor 내부의 전역 해시 테이블 잠금 경합 문제 해결 및 객체 할당 속도 70% 개선 등, Ruby 3.5는 상당한 성능 향상을 제공하여 즉각적인 업그레이드가 권장됩니다.

도입

Rails World 키노트에서 Eric Patterson(Tenderlove)은 Ruby 개발자들이 직면한 성능 및 병렬 처리 문제를 다루며, Ruby 3.5에서 도입될 Ractor와 ZJIT을 통해 이러한 과제를 어떻게 해결할 수 있는지 설명합니다. Shopify의 루비 온 레일즈 인프라 팀에서 진행 중인 작업에 대한 배경을 제시하며, 머신 활용도를 높이고 지연 시간 증가 없이 병렬 작업을 늘리는 것이 목표임을 강조합니다. 현재 Ruby의 스레드와 파이버가 I/O 바운드 작업에 적합한 반면, CPU 바운드 작업에는 프로세스만이 진정한 병렬 처리를 제공한다는 한계를 지적하며 새로운 해결책의 필요성을 역설합니다.

본 발표에서는 Ruby 3.5의 핵심 성능 개선 요소인 Ractor와 ZJIT에 대해 심도 깊게 다룹니다.

Ractor: 진정한 병렬 처리의 구현

Ractor는 독립적인 GVL을 통해 CPU 바운드 작업에 진정한 병렬 처리를 제공하며, 기존 스레드/파이버 대비 최대 4배 속도 향상을 보였습니다. Ruby 3.5에서 API 안정화 및 구현 문제 해결을 통해 프로덕션 사용을 목표로 합니다. 가변 객체는 복사, 불변 객체는 참조로 공유되며, ‘포트’를 통한 Ractor 간 통신은 락/뮤텍스 없는 생산자-소비자 패턴을 가능하게 합니다. Ractor는 ‘No GVL 블록’처럼 활용되어 CPU 집약적 작업을 병렬화하고 웹 서버 동시 처리량을 높일 수 있습니다. 내부적으로 전역 해시 테이블 잠금 경합 문제를 락-프리 방식으로 해결하여 JSON 파싱 속도를 12배 향상시키는 등 최적화가 이루어졌습니다.

ZJIT: 차세대 JIT 컴파일러

ZJIT은 Ruby 3.5의 메서드 기반 JIT 컴파일러로, 런타임에 기계어 코드를 생성하여 인터프리터 오버헤드를 줄이고 코드 실행 속도를 높입니다. YJIT의 경험을 바탕으로 효율적인 레지스터 사용과 상수 폴딩을 목표로 합니다. JIT 친화적인 코드를 작성하기 위해서는 호출 사이트 단형화(메서드 호출 시 동일 타입 객체 전달), 일관된 인스턴스 변수 설정, 그리고 불필요한 다형성 제거가 중요합니다.

결론

Eric Patterson은 Ruby 3.5에서 Ractor와 ZJIT이 Ruby 애플리케이션의 성능과 확장성을 크게 향상시킬 잠재력을 가지고 있음을 강조했습니다. Ractor는 진정한 병렬 처리를 통해 CPU 바운드 작업의 효율을 극대화하고, ZJIT은 단일 코어 성능을 최적화하여 전반적인 애플리케이션 응답성을 개선할 것입니다. 특히 Ractor를 'No GVL 블록'처럼 활용하여 기존 코드에 최소한의 변경으로 병렬 처리 이점을 얻는 방법과, JIT 컴파일러의 효율을 높이는 '호출 사이트 단형화'와 같은 JIT 친화적인 코딩 기법은 모든 Ruby 개발자에게 유용한 통찰을 제공합니다. 또한, Ruby 3.5에서 객체 할당 속도가 70% 빨라지는 등 전반적인 성능 개선이 이루어졌으므로, 개발자들에게 즉시 Ruby 3.5로 업그레이드할 것을 강력히 권장합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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