Infra

Type1, Type2 하이퍼바이저 그리고 Docker

flutter developer 2024. 9. 16. 15:36

하이퍼바이저란?

 

하이퍼바이저는 물리 서버 위에서 여러 가상 서버 인스턴스(VSI)를 만들어내는 소프트웨어이다. 하이퍼바이저(Hypervisor)의 어원을 살펴보면 "하이퍼-" 는 "초월적인" 또는 "더 높은 단계의" 라는 의미를 가지고 있어 하이퍼바이저가 물리적인 하드웨어 위에서 가상 시스템을 관리하는 소프트웨어임을 나타내고 "바이저(Visor)" 는 "관리자" 또는 "감시자"라는 뜻으로, 하이퍼바이저가 물리적 자원을 감독하고 가상 머신이 이 자원을 잘 활용하도록 관리하는 역할을 한다는 것을 알 수 있다. 즉 하이퍼바이저는 물리적 자원을 초월해 여러 가상 머신을 관리하는 상위 관리자라는 의미를 내포하고 있다.

 

컴퓨터 부팅될 때 물리적 하드웨어에서 시작해 운영체제가 메모리에 올라가고 프로그램들이 실행되는데 하이퍼바이저(Hypervisor) 는 이러한 부팅 과정을 가상 환경에서 가능하게 해주며, 가상 머신(VM)들이 프로그램을 실행할 수 있도록 셋팅해준다.

 

하이퍼바이저는  크게 두가지 종류로 나뉘어진다. Type 1 하이퍼바이저는 서버의 하드웨어 위에서 직접 실행되며, 운영체제 없이 가상화를 구현한다. Bare Metal 하이퍼바이저라고도 불리며 오버헤드가 없어 고성능과 안정성을 자랑하기 때문에 실제 프로덕션 레벨에서 많이 사용되는 타입이다.

예시: VMware ESXi, Microsoft Hyper-V, KVM, Xen

 

Type 2 하이퍼바이저는 기존의 운영체제 위에서 실행된다. 아무래도 또하나의 운영체제가 있어 오버헤드가 있기 때문에 주로 개인 개발 환경이나 테스트 환경에서 사용된다.


예시:
 VMware Workstation, Oracle VirtualBox, Parallels Desktop

 

Type 1 vs Type 2 비교

구분 Type 1 Hypervisor Type 2 Hypervisor
위치 하드웨어 위에서 직접 실행된다 호스트 운영체제 위에서 실행된다.
성능 오버헤드 없어 고성능 운영체제 하나 더끼고있어 성능 낮음
주요 환경 프로덕션 용, 대규모 인프라에서 사용 개인 개발, 테스트 환경
설치 난이도 설치가 어렵다 설치가 쉽다
 

Docker 와 VM

개발을 할 때 필요 환경을 셋팅하기 위해 postgreSQL, Redis, Node 등등을 도커로 셋팅하여 프로젝트를 진행한 기억이 있어 그럼 도커도 가상화 머신인가? 라는 의문점이 들었다. 결론부터 말하자면 도커는 하이퍼바이저처럼 가상화기술인건 맞지만 구조가 다르다.

하이퍼바이저 타입2는 현업에서 잘 안쓰니 논외로 한다

가장 큰 차이로 하이퍼바이저는 물리서버를 추상화한 뒤 자원을 나누어 사용하지만 컨테이너(도커 구동 방식)는 OS를 추상화해 자원을 나누어 사용한다. 즉 하이퍼바이저는 물리자원을 나눠써서 각각 vm에 운영체제가 올라가지만 도커는 운영체제 자체를 추상화해서 나누어 쓰고 있기 때문에 운영체제가 추가적으로 또 올라가지 않아 각각의 인스턴스가 훨씬 가벼워진다. 

이러한 운영체제를 추상화하고 분배하는 핵심적인 역할을 도커엔진이 맡게 되는데 도커엔진에는 cgoup과 namespaces가 있어 각 컨테이너간 격리된 환경을 유지하게 해준다. (도커 백그라운드 포트에서 도는걸 끌때 pid 자주 찾았는데 이때 사용하는 process id가 바로 namespacs 들 중 하나이다, 이외에는 네트워크 네임스페이스, 파일시스템을 위한 mount 네임스페이스 등이 있다.)