-
원격 데스크톱을 연결하는 프로토콜은 여러 가지가 존재하는데 이중 대표적인 방법이 VNC와 RDP다. 두 프로토콜 모두 단순히 커맨드 라인 창만 띄우는 ssh를 넘어서서 원격 PC의 그래픽 인터페이스까지 연결해준다는 점은 동일하지만 둘의 세부 동작 방식과 주 사용 용도는 조금 다르다. 이번 포스트에서는 VNC와 RDP의 원리를 분석하고 각각의 차이점을 간단히 정리해보고자 한다.
VNC (Virtual Network Computing)
VNC는 RFB(Remote Frame Buffer)프로토콜 방식을 이용해 서버에서 보낸 화면 정보를 클라이언트에 설치된 그래픽 라이브러리를 이용해 그리는 방식이다. 사용하기 위해선 원격으로 접속하려는 PC에서는 지속적으로 화면 정보를 RFB의 형태로 변환해 전송하는 서버가 실행되고 있어야 하고 원격 PC를 조종하려는 PC에서는 받은 RFB 데이터를 변환하고 그래픽 드라이버를 이용해 화면에 뿌려줄 수 있는 클라이언트 소프트웨어가 설치되어 있어야 한다.
VNC는 주로 클라우드 상에서 동작하는 서버 VM을 동작하기 위해서 사용하는 프로토콜이며 QEMU 같은 가상화소프트웨어에서는 VNC를 디스플레이 옵션으로 기본으로 제공하고 있다. VM을 VNC로 연결하려는 경우 Hypervisor에서 VNC 서버만 실행해준다면 서버 VM에는 별도의 소프트웨어 설치가 필요 없으며 원격에서 접속하는 PC도 VNC Client 프로그램만 설치하면 Guest의 화면을 볼 수 있다.
하지만 장점 만큼이나 단점도 있다. VNC를 사용하면 직접 접속했을 때보다 화질이 좋지 않고 화면의 움직임도 더디고 자연스럽지 않다. 실제 원격 데스크톱은 더 빠르게 움직이고 있지만 데이터 전달 시간과 클라이언트 소프트웨어가 변환하는 시간이 갉아 먹으면서 실제 사용자에게는 느리게 보이게 되는 것이다. 아래 그림은 Ubuntu 18.04를 VM으로 띄우고 Host 컴퓨터에서 VNC로 접속한 것인데 보다시피 화면의 그래픽 화질이 낮다.
화질 문제는 더 좋은 VNC software를 사용하면 어느정도 해결이 가능하다.
그리고 VNC는 원격에서 화면을 볼 수 있는 기능만 지원 할 뿐 클라이언트 별로 사용자 세션을 가질 수 있는 기능은 없다. 그래서 하나의 원격 PC에 접속한 다수의 클라이언트는 모두 동일한 화면과 마우스, 키보드 인터페이스를 공유한다. 즉 내가 마우스를 움직이면 다른 클라이언트의 화면에서도 똑같이 움직이고 다른 클라이언트가 키보드를 입력하면 내 화면에서도 입력이 되는 셈이다. 아래 그림처럼 Ubuntu 18.04 VM을 두 개의 VNC 클라이언트로 접속해보니 모두 동일한 Youtube 동영상을 실행하게 된다. VNC 프로토콜 본래 목적이 네트워크를 이용한 가상 컴퓨팅에 맞춰 설계됐기 때문에 그렇다.
화질이 매우 지저분하다
RDP (Remote Desktop Protocol)
RDP는 VNC의 한계점들을 개선하기 위해 새로 만든 프로토콜은 아니고, 마이크로소프트에서 자체적으로 만든 그래픽 공유 프로토콜이며 VNC와 동일하게 인터넷 연결을 통해 원격 데스크탑 PC를 사용할 수 있다. 마이크로스프트에서 개발한 만큼 초창기에는 Windows에서만 사용할 수 있는 소프트웨어 였으나 지금은 Mac, Linux, Android 등 다양한 운영체제에서도 서버 및 클라이언트로 이용이 가능하다.
RDP와 VNC의 차이점은 사용자 세션 관리다. VNC는 여러 개로 접속한 Client가 모두 동일한 화면을 공유하게 되지만 RDP는 사전 설정에 따라서 Client 세션을 여러개 생성 할 수 있고 접속한 Client는 각자의 화면을 가지고 동작하게 된다. VNC보다 보안적으로 안전하고 사용성도 좋다. RDP 이름 대로 원격 데스크톱으로 사용하는데 초점을 맞춘 소프트웨어 인 것 같다. 만약 집에 있는 컴퓨터를 원격으로 사용하고 싶다면 RDP를 사용하는 것을 추천한다. VNC를 사용한다면 내가 하는 작업을 다른사람이 모니터로 볼 수도 있다.
freerdp 공식 홈페이지 소개 자료. 우분투에서 원격 윈도우 PC에 접속했다
프로토콜 방식이 다른 만큼 둘의 성능차이도 나는데 다른건 모르겠고 그래픽 쪽에서는 VNC보다 RDP가 조금더 우수한 것 같다. RDP에서 VNC의 RFB에 해당하는 전송 포맷이 알고리즘 적으로 조금 더 우수해서 그런것 같은데 정확한 원리는 잘 모르겠다. 나중에 자료조사해서 나오면 좀더 읽어봐야지. 아무튼 VNC처럼 못 쓸 정도는 아니어서 나처럼 우분투랑 윈도우를 동시에 사용하는 개발자들이 많이 사용하는 툴이다.
'개발 > 기술' 카테고리의 다른 글
JAVA 파일 생성/읽기/쓰기 (0) 2018.11.25 스택, 힙, 코드, 데이터영역 (6) 2018.11.10 jupyter notebook 소개 (0) 2018.08.04 URI (Uniform Resource Identifier) (0) 2018.07.02 libgdx - Viewport (0) 2018.06.22