VNC는 RFB(Remote Frame Buffer)프로토콜 방식을 이용해 서버에서 보낸 화면 정보를 클라이언트에 설치된 그래픽 라이브러리를 이용해 그리는 방식이다. 사용하기 위해선 원격으로 접속하려는 PC에서는 지속적으로 화면 정보를 RFB의 형태로 변환해 전송하는 서버가 실행되고 있어야 하고 원격 PC를 조종하려는 PC에서는 받은 RFB 데이터를 변환하고 그래픽 드라이버를 이용해 화면에 뿌려줄 수 있는 클라이언트 소프트웨어가 설치되어 있어야 한다.

 

 

 

VNC는 주로 클라우드 상에서 동작하는 서버 VM을 동작하기 위해서 사용하는 프로토콜이며 QEMU 같은 가상화소프트웨어에서는 VNC를 디스플레이 옵션으로 기본으로 제공하고 있다. VM을 VNC로 연결하려는 경우 Hypervisor에서 VNC 서버만 실행해준다면 서버 VM에는 별도의 소프트웨어 설치가 필요 없으며 원격에서 접속하는 PC도 VNC Client 프로그램만 설치하면 Guest의 화면을 볼 수 있다.

 

하지만 장점 만큼이나 단점도 있다. VNC를 사용하면 직접 접속했을 때보다 화질이 좋지 않고 화면의 움직임도 더디고 자연스럽지 않다. 실제 원격 데스크톱은 더 빠르게 움직이고 있지만 데이터 전달 시간과 클라이언트 소프트웨어가 변환하는 시간이 갉아 먹으면서 실제 사용자에게는 느리게 보이게 되는 것이다. 

화질 문제는 더 좋은 VNC software를 사용하면 어느정도 해결이 가능하다.

 

그리고 VNC는 원격에서 화면을 볼 수 있는 기능만 지원 할 뿐 클라이언트 별로 사용자 세션을 가질 수 있는 기능은 없다. 그래서 하나의 원격 PC에 접속한 다수의 클라이언트는 모두 동일한 화면과 마우스, 키보드 인터페이스를 공유한다. 즉 내가 마우스를 움직이면 다른 클라이언트의 화면에서도 똑같이 움직이고 다른 클라이언트가 키보드를 입력하면 내 화면에서도 입력이 되는 셈이다. 아래 그림처럼 Ubuntu 18.04 VM을 두 개의 VNC 클라이언트로 접속해보니 모두 동일한 Youtube 동영상을 실행하게 된다. VNC 프로토콜 본래 목적이 네트워크를 이용한 가상 컴퓨팅에 맞춰 설계됐기 때문에 그렇다.



출처: https://selfish-developer.com/entry/VNC와-RDP [아는 개발자]