루비와 웹어셈블리: 루비를 어디서든 실행 가능하게 하다

Yuta Saito, "What you can do with Ruby on WebAssembly"

작성자
EuRuKo
발행일
2025년 01월 13일

핵심 요약

  • 1 Ruby.wasm 프로젝트는 WebAssembly를 활용하여 웹 브라우저부터 엣지 컴퓨팅까지 다양한 환경에서 Ruby를 실행할 수 있도록 합니다.
  • 2 Mastodon과 같은 복잡한 Ruby on Rails 애플리케이션도 브라우저 내에서 C 확장 및 PostgreSQL과 함께 완벽하게 동작함을 시연했습니다.
  • 3 CRuby 포팅, C 확장 크로스 컴파일, WebAssembly 컴포넌트 모델을 통한 동적 링킹 등 기술적 난제를 해결하여 Ruby의 활용 범위를 확장하고 있습니다.

도입

본 발표는 Ruby와 WebAssembly(Wasm)의 결합이 Ruby 애플리케이션 실행에 있어 새로운 가능성을 어떻게 열어주는지에 대해 다룹니다. 발표자인 Ruby.wasm 프로젝트의 창시자 Yuta Sao는 WebAssembly의 핵심 개념과 이점이 무엇인지 설명하고, Ruby를 웹 브라우저, 엣지 컴퓨팅, IoT 및 임베디드 시스템 등 다양한 플랫폼에서 실행할 수 있게 하는 Ruby.wasm의 기능을 소개합니다. WebAssembly가 단순한 웹 기술을 넘어 프로그램 배포의 새로운 표준이 될 잠재력을 지니고 있음을 강조하며 발표를 시작합니다.

WebAssembly는 스택 기반 머신을 위한 명령어 형식으로, 플랫폼 독립성, 효율적인 크기, 안전한 실행을 목표로 합니다. 웹 외부 런타임도 존재하며, 호스트 시스템 접근 제어 기능을 통해 안전한 외부 프로그램 실행 환경을 제공하여 프로그램 공유의 새로운 표준이 될 잠재력을 지닙니다.

Ruby.wasm 프로젝트는 CRuby 인터프리터를 WebAssembly로 컴파일하여, Ruby를 웹 브라우저 등 다양한 환경에서 실행 가능하게 합니다. 브라우저에서 IRB 터미널을 완벽하게 에뮬레이션하며, Mastodon(Ruby on Rails 애플리케이션)이 C 확장 및 PostgreSQL과 함께 브라우저 내에서 실행되는 강력한 기능이 시연되었습니다. 이는 서비스 워커와 내부 PostgreSQL 통신을 통해 구현되었습니다.

기술적으로, Ruby.wasm은 CRuby 포팅 과정의 난제를 해결하고, 젬과 Ruby 파일을 단일 바이너리로 패키징하기 위한 가상 파일 시스템을 도입했습니다. C 확장을 WebAssembly로 크로스 컴파일할 수 있도록 mkmf와 RubyGems에 지원을 추가했으며, WebAssembly의 표준 동적 링킹 API 부재 문제를 컴포넌트 모델의 모듈 링킹 기능을 활용하여 극복했습니다. 이를 통해 런타임 시 파일 기반 검색 없이 C 확장을 포함한 젬을 사용할 수 있게 되었습니다.

결론

Ruby.wasm 프로젝트는 WebAssembly 기술 발전을 수용하며 Ruby를 위한 범용적인 실행 환경을 구축하고 있습니다. 향후 로드맵은 바이너리 크기 최적화, 런타임 성능 향상, 그리고 WebAssembly를 더욱 보편적인 플랫폼으로 만드는 데 중점을 둡니다. 이는 Ruby 생태계에 새로운 활력을 불어넣고, 개발자들이 인프라 걱정 없이 애플리케이션 개발에 집중할 수 있도록 지원하는 중요한 진전을 보여줍니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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