소개

macchina.io는 라즈베리 파이, 비글본, RED Brick, 인텔 갈릴레오/에디슨과 같은 리눅스 기반 디바이스에서 구동되는 IoT를 위한 임베디드 어플리케이션을 빠르게 작성하기 위한 오픈 소스 소프트웨어 툴킷이다. macchina.io는 웹 사용가능, 모듈기반, 확장가능한 자바스크립트와 C++ 런타임 환경을 구현하고, 여러분이 만든 어플리케이션이 클라우드 서비스에서도 잘 구동되는 다양한 센서와 디바이스들과 통신하는 블럭을 만들기 쉽도록, 쉬운 접근을 제공한다.

macchina.io는 네이티브 C++ 코드의 파워와 성능을 갖춘 빠른 어플리케이션 개발(RAD)를 위한 자바스크립트의 파워의 조합이다. macchina.io는 POCO C++ 라이브러리와 V8 자바스크립트 엔진에 기반한다. 유일한 브릿지 시스템과 코드 생성기는 수작업 glue 코드 작성 없이, 자바스크립트로 부터 C++ 서비스를 쉽게 사용할 수 있게 도와준다.

개요

macchina.io는 모듈화가 잘되어있고 확장 가능한 방식으로 만들어졌다. 그림 1은 소스 코드 레이아웃을 반영한 macchina.io의 시스템 아키텍처를 보여준다.

그림1. macchina.io의 개요

macchina.io는 대부분 C++로 구현되었다. 비록 자바스크립트가 어플리케이션 개발의 주 언어로 macchina.io에서 큰 역할을 하지만, 웹 사용자 인터페이스의 일부 부분을 제외하고, macchina.io 자신의 구현에서는 거의 사용되지 않는다.

플랫폼

macchina.io의 기반은 "플랫폼"이라 불린다. POCO C++ 라이브러리, 원격 프레임웍, OSP(오픈 서비스 플랫폼), V8 자비스크립트 엔진에 기반한 자바스크립트 환경으로 구성된다. 플랫폼은 매우 일반적이고, macchina.io에 국한되지 않는다. 비록 임베디드 리눅스 시스템에 최적화 되어있지만, (서버) 어플리케이션 개발같은 다른 종류에도 사용되어 질 수 있다.

POCO C++ 라이브러리

POCO C++ 라이브러리는 데스크탑, 서버, 모바일, 임베디드 시스템에서 동작하는 네트웍 기반/인터넷 기반 어플리케이션을 만들기 위한 현대적이고, 강력한 오픈 소스 C++ 클래스 라이브러리와 프레임웍이다. 이 라이브러리는 플랫폼 추상화, 멀티스레딩, XML과JSON 처리, 파일시스템 접근, 로깅, 스트림, 데이터그램과 멀티캐스트 소켓, HTTP 서버와 클라이언트, SSL/TLS 등과 같은 필수 기능을 제공한다. macchina.io에 구현된 거의 모든 것(외부 오픈 소스 프로젝트와 통한된 일부 제외)은 POCO C++ 라이브러리에 기반한다.

오픈 서비스 플랫폼

OSP는 생성, 동적 확장의 배포와 관리, 모듈화된 어플리케이션 강력한 플러그인과 서비스 모델에 기반한 것들을 가능하게 한다. OSP와 함께 빌드된 어플리케이션은 필드에 배포될 때 조차 확장가능하고, 업그레드 가능하고, 관리되어질 수 있다.

그림2: 오픈 서비스 플랫폼 개요

OSP의 핵심에는 강력한 소프트웨어 컴포넌트(플러그인)과 번들 개념에 기반한 서비스 모델이 위치한다. 번들은 실행가능한 코드(공유 라이브러리 또는 자바스크립트)와 필요한 설정, 데이터, 자원 파일들(예를 들어, HTML 문서, 이미지, 웹 사이트에 필요한 스타일시트)으로 구성된 배포가능한 엔터티이다. 번들은 특정 서비스를 제공함으로써 어플리케이션의 기능을 확장한다. 특정한 서비스 레지스트리(Service Registry)는 다른 번들에 의해서 제공된 서비스를 발견하기 위한 번들을 허용한다. 번들은 어플리케이션을 종료하거나 재시작할 필요없이 설치되고, 업그레이드 되고, 어플리케이션(프로그래밍적으로 웹이나 콘솔 기반 관리자 유틸리티)으로 부터 시작, 멈춤, 제거되어질 수 있다.

OSP는 Applied Informatics에 의해 개발되었다. 처음에는 상업 라이센스(commercial license)로 릴리즈되었다. macchina.io의 경우, OSP(명령 쉘 프레임웍, LDAP 지원을 포함한 향상된 사용자 인증 및 권한 부여, 암호화된 서명 번들 등)의 핵심은 오픈 소스 라이센스로 릴리즈 되었다. OSP의 전체 버전은 상업 라이센스로 Applied Informatics에 의해 이용가능하다.

원격(Remoting)

원격(Remoting)은 C++을 위한 분산 오브젝트이고 웹 서비스 프레임웍이다. 원격, 분산 어플리케이션 빌드, 고수준 오프젝트 기반 IPC(Inter-process communication)/RMI(Remote method invocation) 또는 SOAP과 WSDL에 기반한 웹서비스의 구현으로 쉬워진다(?). 네트웍상에 원격으로 C++ 오브젝트를 사용가능하게 만들거나 웹 서비스로 전환하는 것은 헤더 파일에 몇가지 annotation만 추가하는것만큼 쉽다. 원격 코드 생성기는 rest이다(?). 어색한 인터페이스 정의 언어를 사용하여, 분리된 인터페이스 정의를 유질할 필요없다.

원격은 Applied Informatics에 의해 개발되었다. 처음에는 상업 라이센스(commercial license)로 릴리즈되었다. macchina.io의 경우, 원격(명령 쉘 프레임웍, LDAP 지원을 포함한 향상된 사용자 인증 및 권한 부여, 암호화된 서명 번들 등)의 핵심은 오픈 소스 라이센스로 릴리즈 되었다. 원격의 전체 버전은 상업 라이센스로 Applied Informatics에 의해 이용가능하다.

macchina.io에서 원격은 C++을 자바스크립트 브릿징 메커니즘을 위해 사용된다. TCP 전송을 사용하여, 효율적인 RPC 기반 IPC를 위해 사용될 수 있다.

자바스크립트 환경

macchina.io에서 자바스크립트 환경은 구글 V8 엔진에 기반한다. V8은 구글 크롬 브라우저와 서버 쪽 자바스크립트 플랫폼으로 잘 알려진 node.js에서 사용되는 자바스크립트 엔진이다.

자바스크립트 코드에서 POCO C++ 라이브러리의 특징을 사용하는 것을 허락하기 위해 바인딩하는 것이 있다. 예제는 데이터베이스 엑세스(SQLite), HTTP(S), 어플리케이션 설정과 환경에의 엑세스, OSP 서비스 레지스트리 등이 있다.

일반적인 C++을 자바스크립트로 브리징 하는 메커니즘은 수동으로 glue 코드를 작성할 필요없이, 자바스크립트로 부터 C++ 오브젝트를 엑세스하는 것을 가능하도록 만들어 준다.

IoT 컴포넌트들

IoT 컴포넌트는 macchina.io에서의 "심장"이다. 여러 OSP 번들과 서비스들은 디바이스와 센서, 클라우드 서비스로의 인터페이스(예를 들면, SMS보내기, 트위터 메시지 전송과 같은)과 macchina.io의 웹기반 사용자 인터페이스, MQTT 또는 COAP와 같은 네트웍 프로토콜로의 인터페이스와 같은 feature들을 구현한다.

장치와 센서들

macchina.io는 다양한 종류의 센서와 장치들을 위한 일반적인 인터페이스를 정의한다. 이러한 인터페이스에 기반하여, 다른 구현들은 maccina.io에서 이용가능한 특정의 센서와 장치들을 만드는 것이 가능해 진다(?). 온, 습도 센서, GNSS/GPS 수신기, 가속기, 트리거, GPTO 포트, 시리얼 포트 장치 등과 같은 일반적인 센서 타입을 위한 인터페이스와 구현이 있다.

프로토콜

macchina.io는 센서 네트웍, 자동화 시스템, 클라우드 서비스와 통신하기 위한 다양한 프로토콜을 구현한다. 이러한 프로토콜중 하나는 클라우드로 연결된 IoT 어플리케이션 구축으로 유명한, TCP/IP 프로토콜의 상위 레이어에서 사용하고 있는 publish-subscribe 기반 "가벼운" 메세징 프로토콜인 MQTT이다. macchina.io에서의 MQTT는 Eclipse Paho C 라이브럴를 사용하여 구현되었다.

노트: macchina.io의 첫번째 릴리즈에는 MQTT만 구현되었다. 향후 버전은 COAP 또는 Modbus와 같은 추가적인 프로토콜을 구현할 것이다.

서비스들

macchina.io는 C++과 자바스크립트 코드 모두에서 사용할 수 있는 SMS와 트위터 메시지를 전송하기 위한 서비스와 웹 소켓(WebEvent)를 사용하여 브라우저 기반 어플리케이션과 publish-subscribe 기반 통신을 위한 서비스를 구현한다.

웹 사용자 인터페이스

macchina.io의 사용자 인터페이스는 전체적으로 웹 기반이다. OSP로 만들어진 웹 서버를 사용하여 구현된다. 웹 인터페이스의 파트는 클라이언트와 서버 모두 자바스크립트로 전체가 만들어진다. 다른 파트들은 서버쪽은 C++ REST 서비스로 클라이언트에서 자바스크립트로 결합된다.

웹 사용자 인터페이스는 대부분 jQuery와 AngularJS를 사용한다. "앱스(Apps)"의 개념을 기초로 한다. 로그인을 하면, 사용자는 그리드 형태의 앱 아이콘(예를 들어, "번들들", "센서 & 장치들", "Playground" 등)들을 보게된다. 아이콘을 클릭하면 각 앱이 "실행"될 것이다. 새로운 앱은 새로운 번들들을 설치하여 간단하게 macchina.io에 추가되어질 수 있다. 웹 사용자 인터페이스의 하이라이트는 "Playground" 앱이다. 이것은 브라우저 기반 자바스크립트 에디터를 제공하고 macchina.io 서버에서 자바스크립트 코드를 실행하는 것을 허용한다. "Playground" 앱은 macchina.io 장치에 설치되어지는 새로운 자바스크립트 어플리케이션 번들을 생성하기 위해서 사용되어질 수 있다.

그림 3: macchina.io 웹 사용자 인터페이스

results matching ""

    No results matching ""