태그 보관물: VM

VM, 원격 PC 연결 클라이언트 개발에 참고할 만한 프로젝트들

이 글의 내용은, 가상화 프로젝트를 하면서 윈도, 안드로이드 앱을 개발하면서 사용하거나 살펴본 오픈소스 및 바이너리에 대한 정리이다. VM(가상화된 PC)이나 원격 PC에 접근하는데 많이 알려진 RDP(Remote Desktop Protocol), SPICE(Simple Protocol for Independent Computing Environments), 그리고 VNC(Virtual Network Computing) 프로토콜을 주로 사용한다. 이 프로토콜은 원격 PC 화면을 스트리밍하기 위해서 개발되었다.

* RDP
RDP의 경우에는 마이크로소프트에서 개발한 프로토콜이고, 거의 모든 윈도가 이 프로토콜을 구현한 클라이언트인 mstsc.exe가 번들로 배포된다. 그리고, 윈도 7에서 성능을 향상한 RemoteFX와 같은 기능을 사용하기 위해서는 별도로 업데이트할 수 있다.
– 프로토콜 스펙 : https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-rdpbcgr/5073f4ed-1e93-45e1-b039-6e30c385867c

* SPICE 프로토콜
SPICE 프로토콜의 경우에는 오픈소스 프로젝트이다. 이 프로젝트는 레드햇(RedHat, 2007년에 Qumranet 회사 인수)에서 소스를 오픈 했다.
– SPICE 프로토콜 스펙 : https://www.spice-space.org/static/docs/spice_protocol.pdf

* VNC 프로토콜
VNC 프로토콜의 경우에는 성능 문제가 있어서 제외했다.

레드햇이 가상화 솔루션을 오픈소스로 열어서 oVirt(https://ovirt.org/)라는 프로젝트가 진행중이고, 오픈소스 가상화 솔루션 중에서는 가장 발전한 프로젝트이다. 그리고, 레드햇에서 제품으로 판매하는 가상화 솔루션도 oVirt를 기반하고 있다.

이제 이 프로토콜을 기반으로 개발하는 데 도움이 되는 프로젝트를 살펴보자.

* HTML 클라이언트
웹 소켓을 사용해서 원격 PC의 화면을 스트리밍한다. 아래 프로젝트를 기반으로 웹 앱을 개발할 수 있다.

– Guacamole : RDP와 VNC를 지원하는 아파치 프로젝트로, https://guacamole.apache.org/ 에서 확인할 수 있다.
– SpiceHtml5 : SPICE를 스트리밍하는 자바스크립트 프로젝트로, https://github.com/freedesktop/spice-html5 에서 확인할 수 있다.
– Myrtille : .NET 기반의 오픈소스 프로젝트로, https://cedrozor.github.io/myrtille 에서 확인할 수 있다.

* 윈도
윈도에서 RDP와 SPICE를 지원하는 프로젝트아래의 프로젝트를 사용해서 윈도에서 RDP와 SPICE를 지원할 수 있다.
– mstsc : 윈도 내장 RDP 클라이언트이다. 이 툴은 mstsc.exe 실행 옵션이나 rdp 파일을 사용하면 된다.
– virt viewer : 윈도에서 SPICE 서버에 연결하도록 지원한다. 이 툴은 https://releases.pagure.org/virt-viewer/ 에서 다운로드할 수 있고, https://pagure.io/virt-viewer/blob/master/f/NEWS 에서 Changelogs를 확인할 수 있다.
– FreeRDP : RDP 프로토콜을 지원하는 FreeRDP 프로젝트로, 소스는 https://github.com/FreeRDP/FreeRDP/tree/master/client/Windows 에서 확인할 수 있다.

* 맥
아래 프로젝트로 맥 클라이언트를 개발할 수 있다.
– FreeRDP : RDP 프로토콜을 지원하는 FreeRDP 프로젝트로, 소스는 https://github.com/FreeRDP/FreeRDP/tree/master/client/Mac 에서 확인할 수 있다.

* 안드로이드
안드로이드에서 RDP와 SPICE를 지원하는데 사용할 수 있는 프로젝트들이다.

– freerdp : RDP 기반의 오픈소스 프로젝트로, https://github.com/FreeRDP/FreeRDP/tree/master/client/Android 에서 확인할 수 있다.
– flexVDI : flexVDI에서 오픈한 SPICE 프로젝트로, https://github.com/flexVDI/launcher-mobile 에서 확인할 수 있다.

– VirtualDesktop : SPICE 프로토콜을 지원하는 안드로이드 앱 프로젝트, https://github.com/pisceslj/VirtualDesktop 에서 확인할 수 있다.

– oVirt 매니저 앱 : oVirt 서버에 접근해서 관리할 수 있는 기능을 제공하는 안드로이드 앱으로, https://github.com/oVirt/moVirt 에서 확인할 수 있다.

* iOS
iOS 에서 RDP와 SPICE를 지원하기 위해서 사용할 수 있는 프로젝트들이다.
– freerdp : RDP 기반의 오픈 소스 프로젝트로, https://github.com/FreeRDP/FreeRDP/tree/master/client/iOS 에서 확인할 수 있다.
– flexVDI : flexVDI에서 오픈한 SPICE iOS 오픈소스 앱으로, https://github.com/flexVDI/launcher-mobile 에서 확인할 수 있다.

개인적으로 RDP와 SPICE 위주로 윈도와 안드로이드 앱을 개발해 본 경험으로, 원격 프로토콜을 성능 관점으로 보면 RDP > SPICE > VNC 순이다. SPICE의 경우에는 꽤 괜찮은 성능을 보여주지만, 그에 반해서 리소스(클라이언트에서 서버에 다수의 소켓을 열어서 성능을 개선)를 많이 사용한다. 결론으로 원격 프로토콜은 RDP 쵝오 !!

* Reference
https://en.wikipedia.org/wiki/Simple_Protocol_for_Independent_Computing_Environments