포스트

가상화 기술 체계 — 두 개의 분류 축으로 꿰기

하드웨어 vs OS 가상화(계층 축)와 서버 vs 데스크탑(용도 축)을 분리해, 하이퍼바이저·컨테이너·VDI를 한눈에 정리한다.

가상화 기술 체계 — 두 개의 분류 축으로 꿰기

가상화가 헷갈리는 이유는 서로 다른 질문에 답하는 개념들을 한 줄에 놓고 비교하기 때문이다. VMware, Docker, VDI, RDS를 한 목록에 나열하면 뭐가 상위이고 뭐가 대안인지 뒤엉킨다. 축을 분리하면 정리된다.

결론 먼저

가상화 대상을 서로 독립적인 두 축에서 각각 찍으면 혼란이 사라진다.

  • 계층 축 — “어떻게 가상화하나”: 하드웨어 가상화 vs OS 가상화. 어느 층에서 가짜를 만드느냐.
  • 용도 축 — “무엇을 위해 가상화하나”: 서버 가상화 vs 데스크탑 가상화. VM 안에 뭘 설치하고 누가 쓰느냐.

두 축은 양자택일이 아니다. 개인 PC의 VMware는 계층 축에선 하드웨어 가상화이면서, 동시에 용도 축에선 데스크탑 가상화다. 하나의 대상이 각 축에서 독립적으로 분류된다.

가상화의 공통분모는 “물리 자원 하나로 알고 쓴다”가 아니라 물리적 실체와 논리적 사용을 분리(추상화) 하는 것이다. 추상화 방향은 두 갈래다.

  • 분할(Partitioning, 1→N): 물리 자원 하나를 여러 개인 척 쪼갬. 서버 가상화, 디스크 파티셔닝.
  • 통합(Aggregation, N→1): 여러 물리 자원을 하나의 큰 자원처럼 묶음. 스토리지 풀(RAID/SAN/LVM), 클러스터.

단순 파티셔닝(물리적 칸막이, 고정)과 가상화의 결정적 차이는 가짜 하드웨어를 만들어 흉내 낸다는 점이다. 이 추상화 덕분에 오버커밋(물리보다 많이 할당된 척), 라이브 마이그레이션(다른 물리 서버로 무중단 이동), 스냅샷·복제(VM을 파일처럼 다룸)가 가능해진다.

계층 축 — 하드웨어 가상화 vs OS 가상화

어느 층에서 가상화하느냐의 분류.

 하드웨어 가상화OS 가상화
방식가짜 하드웨어 위에 게스트 OS 통째로호스트 커널 공유, 프로세스만 격리
게스트 OS있음(커널 포함)없음
대표VMware, ESXi, KVM컨테이너(Docker, LXC)
무게무거움가벼움

리트머스: 다른 계열 OS를 올릴 수 있나? VMware는 리눅스 위에 윈도우, 윈도우 위에 리눅스를 자유롭게 올린다 → 각 VM이 자기 커널을 통째로 가지므로 하드웨어 가상화. 컨테이너는 호스트 커널을 공유하니 리눅스 호스트에선 리눅스 컨테이너만 → OS 가상화.

이름값 함정: “OS 가상화”의 “OS”는 대상이 아니라 계층(레벨) 을 뜻한다. “OS를 가상화한다”가 아니라 “OS 수준에서 격리한다”는 뜻이라, 오히려 게스트 OS를 안 올린다. VMware로 OS를 여러 개 띄우는 건 OS를 통째로 올리는 것이므로 OS 가상화가 아니라 하드웨어 가상화다.

하이퍼바이저 Type 1 vs Type 2

하드웨어 가상화를 담당하는 하이퍼바이저는 어디에 깔리느냐로 나뉜다.

 Type 1 (베어메탈)Type 2 (호스트형)
위치하드웨어 위에 직접호스트 OS 위에 앱처럼
ESXi, KVM, Hyper-VVMware Workstation, VirtualBox
용도서버·데이터센터개인 PC·테스트

개인 PC의 VMware Workstation은 호스트 OS 위에 프로그램으로 깔리므로 Type 2, 데이터센터의 ESXi나 VDI 서버는 Type 1이다.

전가상화 vs 반가상화, 그리고 VT-x/AMD-V

하드웨어 가상화(VM)를 어떻게 구현하느냐의 하위 갈래다. 둘 다 게스트 OS를 통째로 올리고 가짜 HW를 주므로 모두 하드웨어 가상화이며, 컨테이너(OS 가상화)와는 다른 층 얘기다.

 전가상화(Full)반가상화(Para)
게스트 OS속임(자기가 VM 위인 줄 모름)알려줌(VM 위임을 알고 협조)
OS 수정불필요필요(소스 수정)
윈도우 등가능어려움
성능약간 느림(명령 번역)빠름(하이퍼콜 직접)
VMware, KVM초기 Xen

비유하면 전가상화는 외국인에게 통역사를 붙이는 것(수정 불필요, 통역 오버헤드), 반가상화는 외국인에게 그 나라 말을 가르치는 것(빠르지만 가르치는 수고 = OS 수정)이다.

하드웨어 가상화 지원(Intel VT-x, AMD-V): CPU가 가상화를 하드웨어로 거들어주면서 전가상화의 속도 단점이 크게 사라졌다. 그래서 현대 환경(KVM 등)은 하드웨어 지원 전가상화 + 일부 반가상화 드라이버(virtio) 를 섞어 쓰는 것이 일반적이다.

용도 축 — 서버 가상화 vs 데스크탑 가상화

무엇을 위해 가상화하느냐. VM은 빈 컴퓨터이고, 그 안에 뭘 설치하고 누가 쓰느냐로 용도가 갈린다.

 서버 가상화데스크탑 가상화
VM 안에 도는 것서버 OS/서비스(nginx, DB)클라이언트 OS(윈도우)
쓰는 주체시스템·네트워크 요청사람(엔드유저)
화면 전송보통 없음필수
ESXi 위 nginx·DB VMVDI

핵심 판별은 “사람이 모니터 보고 클릭하느냐” vs “기계가 알아서 요청을 처리하느냐”. VM 안에 서비스가 살면 서버 가상화, 사람이 들어와 살면 데스크탑 가상화다.

서버를 굳이 가상화하는 이유: ① 통합(consolidation, 노는 자원 합쳐 서버 대수↓), ② 격리(VM마다 OS가 따로라 장애·침해 차단), ③ 이동·백업·복구(스냅샷·라이브 마이그레이션·DR — VM은 파일이므로), ④ 자원 동적 할당·확장. 단, 극한 성능·낮은 지연이 필요한 DB(예: Vertica 같은 분석 DB, I/O가 생명)는 가상화 오버헤드를 피해 베어메탈로 직접 올리기도 한다.

서버 가상화는 데스크탑 가상화의 토대

서버 가상화는 데스크탑 가상화의 하위 개념(포함관계) 이 아니라 밑에 깔리는 토대(하부 계층) 다. 같은 ESXi 위에 서버 OS를 올리면 서버 가상화, 데스크탑 OS를 올리고 사람이 원격 접속하면 데스크탑 가상화(VDI)가 된다.

1
2
3
[위]  VDI (데스크탑 가상화) ← 사람용 응용
       ↑ 얹힘
[아래] 서버 가상화 (하이퍼바이저/ESXi) ← 토대

그래서 “VDI는 서버 가상화가 전제된다”는 맞다(필요조건). 단 충분조건은 아니며, 접속 브로커·전송 프로토콜(PCoIP/Blast/HDX)·데스크탑 풀 관리가 더해져야 VDI가 완성된다.

컨테이너 — 커널 공유가 만드는 특성

컨테이너는 하이퍼바이저를 건너뛰고 호스트 OS 커널을 공유하며, 리눅스의 namespace(가시성 격리)cgroups(자원 제한) 로 프로세스를 격리한다. 그래서 서버 가상화(하이퍼바이저)를 전제로 하지 않는다 — 컨테이너의 전제는 하이퍼바이저가 아니라 호스트 OS 커널이다. OS를 통째로 부팅하지 않으니 VM보다 가볍고 빠르다.

자원 가시성 함정: 커널을 공유하므로 CPU·메모리 정보를 보여주는 통로(/proc/cpuinfo, /proc/meminfo)가 호스트 전체 값을 그대로 노출한다. 컨테이너에 2코어·4GB만 줘도 안에서 nproc/free는 호스트 전체(예: 32코어·128GB)를 본다.

  • 보이는 값: 호스트 전체
  • 실제 한도: cgroups가 강제(--cpus, --memory)

둘이 어긋나므로 “보이는 값”을 믿는 앱이 터진다. JVM이 호스트 메모리 기준 힙을 잡다가 OOM kill, availableProcessors()가 32를 반환해 스레드 폭증. 해결은 앱이 cgroups 한도를 읽게 하는 것 — Java는 JDK 10+(8u191+)의 -XX:+UseContainerSupport(기본 ON)가 자동 보정한다.

격리 강도: cgroups는 자원 은 강제하지만(할당 격리 O), 커널을 공유하므로 하드웨어 수준의 완전 분리는 안 된다. cgroups는 칸막이이지 VM 같은 이 아니다. 커널 취약점이 터지면 격리가 뚫릴 수 있다(container escape). 그래서 보안 민감 환경에선 강한 격리가 필요하면 VM, 또는 VM 위에 컨테이너를 얹어 격리+효율을 둘 다 챙긴다.

데스크탑 가상화의 여러 구현 — VDI · RDS · CCI · DaaS

데스크탑 가상화(넓은 의미의 업무환경 가상화)는 VDI만이 아니며, 방식마다 서버 가상화 전제 여부가 다르다.

방식격리/할당 단위서버 가상화 전제
VDI사용자별 가상 PC(VM)
RDS(터미널 서비스)1개 서버 OS를 세션 단위 공유❌(하이퍼바이저 없이 OS 세션 공유)
CCI(Consolidated Client Infra)물리 블레이드 PC 1:1 전용❌(물리 블레이드라 자원 가상화 없음)
DaaS(보통 VDI를 클라우드 구독형으로)

RDS의 원형은 “리눅스 한 대에 여러 사용자 SSH 접속”이다. 유닉스/리눅스는 태생부터 멀티유저 OS라 1개 OS/자원을 세션 단위로 공유하는 것이 기본 설계이며, 윈도우는 1인용 데스크탑 OS라 터미널 서비스(RDS)를 별도로 얹었다.

CCI는 책상 밑에 흩어진 PC를 데이터센터에 블레이드(랙에 꽂는 얇은 판형 컴퓨터) 형태로 모아둔 것이다. PC는 여전히 1인 1대 물리 머신이고 위치·접속 방식만 달라졌다. 자원을 쪼개 공유하지 못해(사용자 수 = 블레이드 수) 집적 효율이 낮고, 확장이 물리 용량(공간·전력·냉각)에 선형으로 묶인다. 넓은 의미의 데스크탑 가상화(위치·접근의 가상화)엔 포함되지만, 하이퍼바이저식 자원 가상화는 아니다.

데스크탑 가상화 vs 애플리케이션 가상화

데스크탑 가상화를 한 단계 더 쪼개면 제공 단위로 갈린다. 큰 우산은 EUC(End User Computing).

 데스크탑 가상화앱 가상화
주는 단위PC 통째(OS+모든 앱)앱 하나만
사용자 화면원격 데스크탑(낯선 바탕화면)내 PC + 그 앱 창만
VDI, DaaSApp-V, ThinApp, Citrix Apps

앱 가상화 원리 — OS 호출 가로채기(Interception): 윈도우 앱은 실행되면 OS에 끊임없이 요청한다(레지스트리 읽기, DLL 로드, 파일 쓰기). 앱 가상화는 앱과 OS 사이에 얇은 가로채기 층을 끼워, 이 요청들을 진짜 OS 대신 캡슐(bubble) 안의 가상 레지스트리·가상 파일시스템·전용 DLL로 돌린다. 앱은 설치된 줄 착각하지만 OS는 깨끗하고, 앱끼리 같은 DLL 다른 버전을 써도 각자 캡슐 안이라 충돌하지 않는다(“DLL 지옥” 회피).

  • 캡슐 제작: 설치 전/후 스냅샷의 차이(추가된 레지스트리·파일·DLL)를 추출해 하나로 포장.
  • 실행 방식: 스트리밍형(App-V, 서버 캡슐을 단말로 흘려보냄, 런타임 필요) vs 자기완결형(ThinApp, 가로채기 엔진까지 exe 하나에 담음).
  • 다수 사용: 캡슐(설치본)은 공유, 실행 인스턴스와 데이터는 사용자마다 분리. 동시 실행 시 자원 경합 여부는 토대(RDS면 서버 공유로 경합↑, VDI/로컬이면 덜함)가 결정한다.

가상화 3방식의 격리 원리 비교 — 셋 다 “진짜를 가짜로 바꿔치기”이지만 바꿔치기하는 층이 다르다.

방식격리 원리
VM(하드웨어 가상화)하이퍼바이저가 가짜 하드웨어 제공
컨테이너(OS 가상화)커널의 namespace/cgroups
앱 가상화OS API 호출 가로채기 + 가상 레지스트리/파일/DLL

단말 — 팻 · 씬 · 제로 클라이언트

VDI/원격 데스크탑은 화면만 받는 단말이 짝을 이룬다. 단말은 “얼마나 깡통이냐”로 나뉜다.

단말내부특징
팻(Fat) = 일반 PCCPU·디스크·OS 다 있음자체적으로도 일함
씬(Thin)최소 CPU + 경량 OS여러 프로토콜 지원, 유연하나 OS 패치·관리 필요
제로(Zero)OS 거의 없음, 전용 칩켜면 즉시 접속, 무관리·보안 강함, 특정 프로토콜(PCoIP 등)에 묶여 유연성 낮음

트레이드오프는 유연성(씬) ↔ 단순·보안·무관리(제로). 제로 클라이언트(“제로PC”)는 VDI와 대립하는 게 아니라 VDI에 접속하는 단말이며, VDI 전용이 아니라 RDS·DaaS·앱 가상화 등 원격 데스크탑 환경 전반에 붙는다.

종합 분류표

주요 대상을 계층·용도 두 축(+ 서버 중앙 처리 여부)으로 찍으면 이렇게 정리된다.

대상계층 축용도 축서버 중앙 처리
개인 PC VMware하드웨어(Type 2)데스크탑❌(로컬·1인)
VDI하드웨어(Type 1)데스크탑
RDS / 리눅스 다중접속가상화 없음데스크탑
CCI물리 블레이드데스크탑
nginx/DB VM하드웨어서버
컨테이너(API·웹서버)OS 가상화서버

계층·용도는 서로 다른 축이라 하나의 대상이 양쪽에서 각각 분류된다(양자택일 아님). 개인 PC VMware는 하드웨어 가상화(계층)이면서 동시에 데스크탑 가상화(용도)다.

용어 주의:

  • “서버 가상화”는 용도 용어지만 구현이 거의 항상 하드웨어 가상화(하이퍼바이저)라 계층 용어처럼 혼용되는 착시가 있다. 엄밀히는 서버 가상화 ⊂ 하드웨어 가상화(한 용도)에 가깝다.
  • 도커에 nginx를 띄우면 용도는 서버가 맞지만 계층은 OS 가상화라 “서버 가상화”라 부르지 않고 컨테이너화(containerization) 라 부른다.
  • “OS 가상화”는 계층 전용 용어라 용도 의미로 전용되지 않는다(용도는 “컨테이너”라는 결과물 이름이 가져감).
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.