Ruby에서 JavaScript 실행하기: QuickJS RB 개발 및 활용 사례

[EN] Running JavaScript within Ruby / Kengo Hamasaki @hmsk

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

핵심 요약

  • 1 QuickJS RB는 Ruby 환경에서 JavaScript 코드를 효율적으로 실행할 수 있도록 개발된 Ruby Gem입니다.
  • 2 이 프로젝트는 Function as a Service(FaaS) 사용 시 발생하던 지연 시간 및 관리 비용 문제를 해결하기 위해 시작되었습니다.
  • 3 현재 QuickJS RB는 실제 프로덕션 환경에서 하루 4백만 건 이상의 JavaScript 호출을 처리하며 비용 절감 및 성능 향상에 기여하고 있습니다.

도입

발표자는 RubyKaigi에서 QuickJS RB 프로젝트를 소개합니다. 이는 Ruby 환경에서 JavaScript 실행을 위해 C 언어 기반 QuickJS 엔진을 Ruby 젬으로 래핑한 것입니다. 기존 FaaS(Function as a Service) 문제점을 해결하고 Ruby 온 레일즈 서버 내에서 JavaScript를 직접 실행하고자 개발되었습니다.

QuickJS RB는 QuickJS 엔진을 활용하여 Ruby에서 JavaScript 코드를 평가하고 일관된 런타임 환경을 제공합니다. QuickJS는 Fabrice Bellard가 개발한 경량 C 기반 JavaScript 엔진으로, ECMAScript 2023 사양 지원 및 작은 바이너리 크기가 특징입니다. 이 젬은 Persona의 “Custom Code” 기능에서 FaaS 사용으로 인한 지연 시간, 관리 복잡성, 비용 문제를 해결하고자 개발되었습니다. 발표자는 공개된 Ruby 바인딩이 없어 직접 개발에 착수했으며, Ruby의 네이티브 확장 기능과 외부 자료, AI의 도움을 받아 점진적인 C 구현 방식으로 진행했습니다.

QuickJS RB는 샌드박싱으로 보안을 강화하고, 주변 기능으로 국제화 API 보완 및 JavaScript 코드 컴파일을 통한 성능 향상을 제공합니다. 또한, Ruby 인터페이싱을 통해 ES 모듈 임포트, 콘솔 로깅, Ruby 함수 호출 등을 지원하며, 특히 Ruby 함수 호출 기능은 백엔드 로직을 JavaScript 환경에 노출하고 투명한 예외 처리를 가능하게 합니다.

결론

QuickJS RB는 Persona 프로덕션 환경에 성공적으로 배포되어 기존 FaaS 시스템을 대체했습니다. 하루 4백만 건 이상 JavaScript 호출을 처리하며 FaaS 비용 절감과 성능 향상에 기여합니다. 예상치 못한 DSL 컴파일 활용 사례로 백엔드와 프론트엔드 간 단일 JavaScript 소스 코드 사용 가능성을 보여주었습니다. 발표자는 네이티브 확장 개발의 즐거움을 강조하며, Persona가 Ruby 개발자를 채용 중임을 알리며 발표를 마쳤습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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