mruby/c와 데이터 흐름 프로그래밍 환경: 소형 기기를 위한 효율적인 Ruby 활용

[EN] mruby/c and data-flow programming for small devices / Kazuaki Tanaka @kaz0505

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

핵심 요약

  • 1 본 발표는 소형 마이크로컨트롤러 및 IoT 기기를 위한 경량 Ruby 구현체인 mruby/c와 데이터 흐름 프로그래밍 환경의 통합에 대해 다룹니다.
  • 2 mruby/c는 제한된 메모리와 처리 능력을 가진 기기에서 Ruby 코드를 효율적으로 실행하도록 설계되었으며, 저전력 운영을 가능하게 합니다.
  • 3 데이터 흐름 프로그래밍은 시각적인 노드 기반 인터페이스를 통해 IoT 애플리케이션 로직을 직관적으로 구성하고, 이를 mruby/c 환경에서 실행하는 방법을 제시합니다.

도입

본 발표는 일본 규슈 공과대학의 다나카 연구원이 진행한 'MVC(mruby/c)와 데이터 흐름 프로그래밍 환경'에 대한 심도 깊은 내용을 담고 있습니다. 다나카 연구원은 데이터 구조, 알고리즘, 이미지 처리, 센서 및 IoT 시스템 등 다양한 분야를 연구하며, 특히 Ruby 협회와 Ruby 비즈니스 카운슬(Rubiko) 등 Ruby 커뮤니티 활동에 적극적으로 참여하고 있습니다. 발표의 핵심은 소형 임베디드 기기 및 IoT 환경에서 Ruby 언어의 활용성을 극대화하기 위한 mruby/c의 개발 배경과, 직관적인 프로그래밍을 가능하게 하는 데이터 흐름 프로그래밍과의 통합 방안을 제시하는 데 있습니다. 이를 통해 자원이 제한된 환경에서도 강력하고 효율적인 애플리케이션 개발 가능성을 보여줍니다.

발표는 먼저 다나카 연구원이 현재 연구 중인 저전력 광역 통신(LPWA) 기술에 대해 간략히 소개하며 시작됩니다. LPWA는 5G/6G와 대척점에 있는 기술로, 초저속 통신(약 1kbps)과 낮은 전력 소비, 넓은 커버리지(15~20km)를 특징으로 합니다. 이는 일본의 지역 정부에서 재난 예방을 위한 센서 모니터링 시스템과 같이 비용과 전력이 제한적인 IoT 장치에 매우 적합함을 강조합니다. 이어서 발표의 핵심 주제인 mruby/c에 대한 설명으로 넘어갑니다.

mruby/c는 기존 Ruby가 웹 애플리케이션 서버나 고성능 컴퓨팅 환경과 같이 풍부한 자원을 필요로 하는 것과 달리, 메모리와 처리 능력이 극히 제한적인 소형 IoT 장치를 위해 설계된 경량 Ruby 구현체입니다. 일반 Ruby가 1MB 이상의 메모리를 요구하는 반면, mruby는 약 120KB, mruby/c는 약 20KB의 매우 적은 메모리만을 필요로 합니다. 이는 특히 배터리로 구동되는 IoT 장치에서 메모리 소비가 곧 전력 소비와 직결되기 때문에 매우 중요한 이점입니다. mruby/c는 메모리 관리, 전력 관리(CPU 딥 슬립 모드 활용), 그리고 부분적인 실시간 처리 기능을 내장하고 있습니다.

mruby/c의 실행 환경은 개발 PC에서 Ruby 코드를 mruby 바이트코드로 컴파일한 후, 이 바이트코드를 마이크로컨트롤러로 전송하여 mruby/c 가상 머신(VM) 위에서 실행하는 방식입니다. 여기서 하드웨어 추상화 계층(HAL)을 제공하여 다양한 마이크로컨트롤러 아키텍처에 쉽게 포팅할 수 있도록 지원하며, 이는 GitHub를 통해 공개되어 있습니다.

다음으로 ‘데이터 흐름 프로그래밍’에 대한 설명이 이어집니다. 이는 교육 분야(중고등학교 정보 교육)에서 스크래치(Scratch)나 블록리(Blockly)와 같은 시각적 프로그래밍 환경으로 활용되며, 특히 IoT 프로그래밍에 매우 적합하다고 설명됩니다. IoT는 센싱(sensing), 처리(processing), 출력/저장(output/storing) 등 데이터가 순차적으로 흐르는 특성을 가지므로, 노드(기능 블록)와 와이어(데이터 흐름 연결)로 구성된 데이터 흐름 프로그래밍은 이러한 로직을 직관적으로 표현하는 데 유용합니다.

마이크로컨트롤러에서 데이터 흐름 프로그램을 실행하는 방법은 간단합니다. 데이터 소스 역할을 하는 ‘인젝트(Inject) 노드’가 데이터를 전역 큐에 엔큐(enqueue)하고, 다른 처리 노드들은 큐에서 데이터를 디큐(dequeue)하여 분석 및 실행하는 방식으로 데이터가 전달됩니다. 발표는 이 데이터 흐름 디자인을 mruby 코드로 자동 변환하는 스크립트를 통해 mruby/c 환경과 통합하는 방법을 시연합니다. 붉은색과 녹색 LED를 비동기적으로 깜빡이는 시연은 단일 코어 마이크로컨트롤러에서 하나의 프로그램만으로도 마치 멀티태스킹처럼 동작하는 것을 보여주며, 이는 sleep 명령을 통해 CPU를 딥 슬립 모드로 전환하여 저전력 및 비동기적 동작을 동시에 달성하는 mruby/c의 효율성을 증명합니다.

결론

결론적으로, 본 발표는 mruby/c가 소형 임베디드 시스템과 IoT 장치에 Ruby 언어의 유연성과 생산성을 제공하는 강력한 도구임을 명확히 보여줍니다. 특히 데이터 흐름 프로그래밍과의 통합은 복잡한 IoT 애플리케이션 로직을 시각적이고 직관적으로 개발하고, 이를 자원 제약적인 환경에서 효율적으로 실행할 수 있는 실용적인 해결책을 제시합니다. 다나카 연구원은 현재 진행 중인 연구의 향후 과제로 디스패칭 성능 개선, 엣지 컴퓨팅과 같은 분산 시스템에의 데이터 흐름 프로그래밍 적용, 그리고 분산 환경에서의 프로그램 배포 문제 해결 등을 언급하며 연구의 지속적인 발전을 예고했습니다. 이 연구는 Ruby 개발자들에게 새로운 하드웨어 영역으로의 확장을 위한 중요한 시사점을 제공합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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