[VM] 가상화와 가상머신

HenryHong·2022년 8월 25일
0

가상화 기술이 발전하지 않았다면 지금 서버실은 어떤 모습일까요?

기업은 여전히 한 대의 서버를 한가지 용도로만 사용하며, 남는 서버 공간은 그대로 방치하고 있을지도 모릅니다. 하나의 서버에 하나의 운영체제, 하나의 프로그램을 운영하는 전통적인 방식은 안전하지만 효율적이지 않습니다.

기업은 필연적으로 비용 효율적인 방식을 고수하는 집단이므로, IT 인프라를 효율적으로 운영할 수 있는 가상화 기술은 앞으로도 계속 진화할 것으로 예상됩니다.

VM(가상머신)

최근 서버 가상화 기술의 두 축은 ‘하이퍼바이저’ 기반의 가상화와 ‘컨테이너’ 기반의 가상화입니다. 하이퍼바이저는 2000년대 초부터 널리 이용되고 있는데요.

하이퍼바이저 등장 전에는 단일 서버를 여러 사용자가 공유할 수 있도록 물리적으로 공간을 격리하는 데 그쳤다면, 하이퍼바이저가 출현하면서 물리 서버 자원을 추상화하고, 논리적으로 공간을 분할하여 ‘VM’이라는 독립적인 가상 환경의 서버를 이용할 수 있게 됐습니다.

하이퍼바이저는 아래와 같이 정의 할 수 있습니다.

  • 호스트 시스템에서 다수의 게스트 OS를 구동할 수 있게 하는 소프트웨어.
  • 하드웨어를 가상화하면서 하드웨어와 각각의 VM을 모니터링하는 중간 관리자. VMM(Virtual Machine Monitor)이라고도 불림.

이러한 하이퍼바이저는 두 개의 범주로 분류할 수 있습니다.

Type1. 네이티브 or 하이퍼바이저형(native/bare-metal or Hypervisor)

하이퍼바이저가 하드웨어 바로 위에서 실행되는 방식입니다. 하이퍼바이저가 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있고, 별도의 호스트OS가 없으므로 오버헤드가 적지만 여러 하드웨어 드라이버를 세팅해야 하므로 설치가 어렵습니다.
대표적으로는 Xen, 마이크로소프트 Hyper-V, KVM이 있습니다.

Type2. 호스트형(hosted)

호스트형 하이퍼바이저는 일반적인 소프트웨어처럼 호스트 OS 위에서 실행됩니다.
하드웨어 자원을 VM 내부의 게스트 OS에 에뮬레이트 하는 방식이기 때문에 Type1. 네이티브 방식에 비해 오버헤드가 크지만, 게스트 OS 종류에 대한 제약이 없고 데스크톱뿐 아니라 노트북에서도 운영할 수 있습니다.
대표적으로는 VMware server, VMware Workstation, Virtual box가 있습니다.

하이퍼바이저에 의해 구동되는 VM은 각 VM마다 독립된 가상 하드웨어 자원을 할당받습니다. 논리적으로 분리되어 있어서 한 VM에 오류가 발생해도 다른 VM으로 퍼지지 않는다는 장점이 있습니다.

컨테이너

컨테이너는 어느 날 갑자기 혜성처럼 등장한 가상화 기술은 아닙니다.
리눅스 기반 시스템에서 프로세스 간 격리를 위해 사용하던 기술들을 조합하여 발전시킨 것이라고 볼 수 있는데요.

chroot와 네임 스페이스, cgroup을 조합한 형태인 LXC(Linux Container)에서부터 컨테이너 가상화 기술이 본격적으로 발전 했습니다.

이 세 요소를 알고 있다면 OS 커널 단에서 프로세스를 어떻게 격리하여 자원을 할당하는지 파악할 수 있고, 컨테이너 가상화를 이해하기 수월합니다.

  • chroot: 특정 디렉토리를 루트(최상위 디렉토리)로 인식하게끔 하는 명령어
  • 네임 스페이스: 리눅스 시스템 자원을 묶어 프로세스에 할당하는 방식으로, 하나의 프로세스 자원을 관리하는 기능
  • cgroup: CPU, 메모리 등 프로세스 그룹의 시스템 자원 사용량을 관리하여 특정 애플리케이션이 자원을 과다하게 사용하는 것을 제한

먼저 chroot를 통해 특정 파일 디렉토리가 최상위 계정(Root)으로 인식되도록 한 후, cgroup과 네임스페이스를 통해 특정 프로세스에 자원을 할당하고 제어하는 방식입니다.

이처럼 격리된 고유 영역에서 할당된 자원을 이용해 애플리케이션을 실행하는 것을 의미하는 컨테이너는 애플리케이션의 실행에 필요한 라이브러리와 바이너리, 기타 구성 파일을 ‘이미지’ 단위로 빌드하여 패키지로 배포합니다.

실행에 필요한 모든 환경이 준비되어 있으므로 어떤 환경에서도 애플리케이션을 오류 없이 동작시킬 수 있는 것이 가장 큰 특징입니다.

VM vs 컨테이너

VM과 비교했을 때 컨테이너는 하이퍼바이저와 게스트 OS가 필요하지 않으므로 더 가볍습니다. 일반적으로 컨테이너에는 OS가 포함되지 않아 크기가 수십 MB에 불과하고, 운영체제 부팅이 필요 없으므로 서비스를 시작하는 시간도 짧습니다. 크기가 작기 때문에 컨테이너 복제와 배포에도 용이합니다.

애플리케이션을 실행할 때에도 물리 서버에서 애플리케이션 하나를 실행하는 것과 마찬가지로, 호스트 OS 위에 애플리케이션의 실행 패키지인 ‘이미지’를 배포하기만 하면 됩니다.

반면, VM은 항상 게스트 OS가 포함되므로 보통 수 GB에 해당하고, 애플리케이션을 실행할 때에도 먼저 VM을 띄우고 자원을 할당한 다음, 게스트 OS를 부팅하여 애플리케이션을 실행시켜야 합니다.

이처럼 VM에 비해 컨테이너는 애플리케이션을 실행, 배포하는 과정이 가볍기 때문에 하나의 물리 서버에서 더 많은 애플리케이션을 구동시킬 수 있어 가장 주목받는 서버 가상화 기술로 여겨지고 있습니다.

도커를 활용한 컨테이너 관리
컨테이너를 관리하는 가상환경 플랫폼인 ‘도커(Docker)’를 이용하면, 컨테이너를 쉽게 생성하고 배포할 수 있습니다. 도커의 초기 컨테이너 엔진도 LXC를 기반으로 합니다.

도커를 통해 컨테이너를 더 깊게 이해하고 싶다면 가비아 VPS Docker로 컨테이너를 시작해보는 것을 추천합니다. VPS 서버+OS+도커+포테이너를 패키지로 제공해 도커를 직접 설치할 필요가 없어 간편합니다.

profile
주니어 백엔드 개발자

0개의 댓글