Re: 브라우저에서 DRb 실행하기

[JA] dRuby on Browser Again! / @youchan @ledsun

3줄 요약

  • Ruby Wasm 기술을 활용하여 분산 루비(DRb)를 웹 브라우저 환경에서 구동하는 방법을 소개합니다.
  • DRb WebSocket, Wasm DRb 젬과 소켓 통신 추상화 라이브러리 Wands 등 관련 도구 개발 및 구현 과정을 공유합니다.
  • 클라이언트-서버 통신 간소화, 브라우저 간 객체 공유 가능성 제시 및 구현 상의 도전 과제를 논의합니다.

Ruby Kaigi에서 발표된 'Re: DRb on Browser Again' 세션 내용을 요약합니다. 본 세션은 Ruby Wasm 기술을 활용하여 분산 루비(DRb)를 웹 브라우저 환경에서 구동하는 방법을 소개하고, 이를 위해 개발된 도구와 구현 과정에서의 도전 과제를 공유합니다. 두 발표자는 각기 다른 접근 방식을 통해 DRb의 브라우저 실행 가능성을 입증했습니다.

첫 번째 발표자는 DRb WebSocket 및 Wasm DRb 젬을 개발하여 DRb 프로토콜을 웹소켓 위에서 동작하도록 구현했습니다. 특히 브라우저 측에서 서버 객체의 콜백을 처리하기 위해 클라이언트가 서버 역할을 겸해야 하는 구조를 설명하며, 이를 통해 여러 브라우저 인스턴스가 서버의 단일 객체를 공유하는 데모(카운터 증가, 채팅)를 선보였습니다. 이 방식은 비동기 호출이 Promise를 반환하여 기존 DRb 사용 방식과 차이가 있으며, Wasm과 JavaScript 간의 비동기 연동 복잡성 등의 과제가 있음을 지적했습니다.

두 번째 발표자는 C Ruby와 브라우저 모두에서 동일하게 동작하는 소켓 통신 추상화 라이브러리 ‘Wands’를 소개했습니다. Wands는 Ruby의 동기적 소켓 API와 JavaScript의 비동기적 WebSocket API 간의 차이를 메우기 위해 Ruby Wasm의 PromiseScheduler를 활용하여 비동기 이벤트를 동기적으로 대기하는 방식을 구현했습니다. 이를 통해 개발자는 C Ruby의 TCP 소켓 프로그래밍과 유사한 방식으로 브라우저에서 웹소켓 통신을 다룰 수 있게 됩니다. 또한, Node.js를 활용한 단위 테스트 환경 구축 방법도 공유했습니다. Wands 라이브러리는 ‘웹소켓’과 ‘마법 지팡이(Magic Wand)’라는 두 가지 의미를 담고 있으며, 브라우저에서의 소켓 프로그래밍이라는 새로운 개념을 제시합니다. 현재 Wands를 활용한 DRb는 클라이언트 기능 위주로 동작하며, 콜백 실행 등 서버 기능은 제한적입니다.

'Re: DRb on Browser Again' 세션은 Ruby Wasm 기술을 기반으로 DRb를 웹 브라우저에서 성공적으로 실행하는 두 가지 다른 접근 방식을 보여주었습니다. 이는 Ruby 개발자에게 웹 환경에서 분산 객체 기술을 활용할 수 있는 새로운 가능성을 열어주었으며, 클라이언트-서버 통신 모델의 간소화 및 브라우저 간 협업 애플리케이션 개발에 기여할 수 있습니다. 비동기 처리 및 Wasm-JS 연동 등의 기술적 과제가 남아있지만, 브라우저에서의 소켓 프로그래밍과 같은 새로운 개념의 등장은 향후 Ruby 웹 개발의 방향에 시사하는 바가 큽니다.