Hanami와 WASM: 브라우저에서 Ruby 액션 실행하기

Putting Hanami in the browser via WASM

발행일
2025년 06월 23일

핵심 요약

  • 1 Hanami 프레임워크의 액션을 WebAssembly(WASM)를 통해 브라우저에서 직접 실행하는 실험이 성공적으로 이루어졌습니다.
  • 2 C 확장 의존성을 가진 `BigDecimal` Gem의 WASM 컴파일 문제를 더미 구현 및 빌더 스크립트 수정을 통해 해결했습니다.
  • 3 `ruby.wasm` 도구를 활용하여 Ruby VM을 WASM 패키지로 빌드하고, JavaScript를 통해 브라우저에서 Ruby 코드를 실행하는 과정을 상세히 설명합니다.

도입

이 글은 Ruby on Rails를 브라우저에 포팅하려는 Vladimir Dementyev의 작업에 영감을 받아, Hanami 프레임워크의 특정 기능을 WebAssembly(WASM)를 활용하여 브라우저에서 실행하는 실험 과정을 다룹니다. Ruby 개발 환경 설정의 복잡성 없이 사용자들이 Ruby 애플리케이션을 "느낄" 수 있도록 진입 장벽을 낮추는 것이 목표였으며, 모듈화된 Hanami가 이러한 시도에 더 적합할 것이라는 가설에서 시작되었습니다. WASM에 대한 사전 지식 없이 시작된 이 실험은 단시간 내에 초기 성과를 보였습니다.

WASM 환경에서 Hanami 액션 구동 실험

이 실험은 WebAssembly(WASM)를 활용하여 Hanami 프레임워크의 액션을 브라우저에서 실행하는 과정을 다룹니다.

1. WASM 빌드 및 Ruby VM 초기화

  • 도구: ruby_wasm Gem을 사용하여 Ruby 3.4와 표준 라이브러리가 포함된 WASM 파일을 빌드하고, Gem 번들링을 통해 ruby-web.wasm 패키지를 생성합니다.

  • 브라우저 실행: JavaScript로 WASM을 로드, 컴파일 후 DefaultRubyVM으로 Ruby VM을 초기화합니다. VM 내에서 Hanami::Action 클래스를 정의하고, run_action 메서드를 통해 사용자 입력을 받아 액션을 호출합니다.

2. Gem 의존성 문제 해결: BigDecimal

  • 문제: Hanami::Utils가 의존하는 BigDecimal Gem은 C 확장으로 인해 WASM 컴파일이 불가했습니다.

  • 해결: BigDecimal의 더미 구현을 제공하고, RubyWasm::Packager::EXCLUDED_GEMS에 ‘bigdecimal’을 추가하여 컴파일러가 해당 Gem을 건너뛰도록 처리했습니다.

3. 현재 한계

  • 실험은 라우터나 HTTP 요청 없이 ‘액션과 유효성 검사’ 수준에 머무릅니다.

  • WASM과 Ruby 지원의 한계로 전체 프레임워크 포팅은 아직 어렵습니다.

  • 50MB에 달하는 WASM 패키지 크기로 인해 배포에 제약이 있습니다.

이 실험을 통해 저자는 WASM 지식 없이도 Ruby 코드를 브라우저에서 실행하는 가능성을 확인했습니다.

결론

이 실험은 Ruby Hanami 프레임워크의 핵심 구성 요소를 WebAssembly(WASM) 환경에서 성공적으로 구동할 수 있음을 입증했습니다. `BigDecimal`과 같은 C 확장 Gem의 컴파일 문제와 같은 기술적 난관이 있었지만, 더미 구현 및 빌드 스크립트 조정을 통해 극복되었습니다. 현재는 단일 액션과 유효성 검사에 국한되지만, 이 시도는 Ruby 애플리케이션의 브라우저 내 실행 가능성을 보여주며, WASM 기술 발전과 Ruby 지원 확대를 통해 더 복잡한 시나리오가 가능해질 잠재력을 시사합니다. 이 경험은 WASM의 시작은 쉽지만, 해결해야 할 과제들이 많음을 보여주는 흥미로운 학습 과정이었습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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