일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pytorch
- cors
- 연결 리스트
- 연결리스트
- C
- 포인터
- 배열
- 프로그래머스
- vue3
- 컨테이너
- 프론트엔드
- 타입스크립트
- 릿코드
- 자료구조
- 자바스크립트
- 이진탐색
- 알고리즘
- RxJS
- 웹팩
- 브라우저
- 해시테이블
- RT scheduling
- 스택
- APOLLO
- GraphQL
- 코딩테스트
- Machine Learning
- alexnet
- 프로세스
- 큐
- Today
- Total
프린세스 다이어리
하드웨어 가상화(Virtualization) 뜻, 가상화 기술 종류 4가지, 가상머신(Virtual Machine)의 단점 3가지 본문
내가 공부하고 이해한 대로 쉽게 정리한 가상화의 의미와 가상화 기술 종류, 가상머신의 문제점에 대한 내용.
1. 가상화의 의미
가상화는 컴퓨터 리소스를 추상화한다는 광범위한 의미를 가진다. 위키백과에는 "물리적인 컴퓨터 리소스의 특징을 다른 시스템, 응용 프로그램, 최종 사용자들이 리소스와 상호작용하는 방식으로부터 감추는 기술"이라고 정의되고 있다. 물리적 하드웨어는 은폐하고, 사용자에게는 논리적인 리소스를 제공하여 사용자는 실제 컴퓨터처럼 보이는 것을 말한다. 말이 뭔가 막연하고 복잡하지만, 흔히 가상화라는 건 하나의 물리적 리소스 위에서 여러 OS를 동시에 실행할 수 있도록 한다는 의미로 통용되는 듯하다.
옛날옛적 인텔이 개발한 x86 아키텍쳐에서는 한 개의 x86 서버에 1개의 운영체제(Operation System) 만을 구동시킬 수 있었으나, 가상화 기술이 등장한 이후에는 동일한 x86 서버 위에 여러 개의 운영체제를 동시에 구동시킬 수 있게 되었다. 일반적으로 OS를 실행하려면 각 OS를 전용 물리적 서버에서 실행해야 하기 때문에, 여러 OS를 실행해야 하는 경우에는 그만큼의 별도의 서버가 필요했다. 그리고 이런 물리적 서버를 여러 개 마련하고 유지보수를 하는 것은 비용이 많이 드는 문제가 있었다.
그러나 가상화를 하고 나면 운영체제와 하드웨어를 분리할 수 있게 된다. 윈도우나 리눅스와 같은 여러 운영체제를 하나의 물리적 머신에서 동시에 실행할 수 있다. 여기에서 물리적 머신, 즉 서버를 '호스트 운영체제'라고 하고, 호스트 운영체제 위에서 가상머신 위에 설치되어 작동되는 여러 개의 운영체제들을 '게스트 운영체제' 라고 한다. 호스트 운영체제가 리눅스라면, 게스트 운영체제로 윈도우를 설치해서 실행할 수 있게 되었다.
*호스트 OS: 호스트에 설치된 OS, 실물 컴퓨터에 설치된 OS, 물리머신에 설치된 OS
*게스트 OS: 가상머신(VM)에 설치된 OS
2. 가상화 기술 종류
2-1. 호스트OS형
호스트 운영체제 위에 가상화 소프트웨어와 가상머신을 작동시키는 방식이다. 일반적인 가상화 기술로는 VMWare, Virtual Box 등이 있다. 물리적 하드웨어에 호스트OS를 설치하고, 그 위에 게스트OS 전체를 가상화하는 방식이다.
2. 전가상화 방식(Bare-metal/hypervisor)
하이퍼바이저는 호스트OS를 필요로 하지 않는 타입의 가상화 방식이다. 호스트OS를 설치하는 게 아니라, 하이퍼바이저라는 소프트웨어를 물리 하드웨어 위에 직접 작동시켜, 하이퍼바이져 위에 각각의 하드웨어에 게스트 운영체제를 설치해서 움직이게 하는 것이다. 호스트OS 형과 다른 점은 가상머신이 마치 독립적인 호스트 시스템처럼 작동한다는 것이다. 복수의 가상화머신이 서로 간섭하지 않도록 하는 것이 하이퍼바이저형의 역할이기 때문에, 처리 오버헤드가 존재하지 않는다.
하이퍼바이저를 구동하면 DOM0라고 하는 관리용 가상 머신이 실행되며, 모든 가상머신들의 하드웨어 접근이 DOM0을 통해서 이루어진다. 즉, 모든 명령에 대해서 DOM0가 개입을 하게되는 형태다. 각각의 OS는 커널에서 사용하는 규칙이 모두 다르기 때문에 게스트 OS는 직접 하드웨어 자원을 사용할 수 없고, DOM0에서 번역을 한 후 하이퍼바이저에 요청을 날리면 하이퍼바이저가 하드웨어에 전달해 준다. 하이퍼바이저가 요청을 대신 다 해 주기 때문에 게스트 OS 운영체제가 무엇이든 상관이 없는데, 오히려 이렇게 하이퍼바이저가 중재를 다 해준다는 점 때문에 처리 속도가 느리다는 단점이 있다.
3. 반가상화 방식(Para Virtualization)
반가상화란 Xen에서 전가상화의 가장 큰 문제점인 성능 문제를 해결하기 위해 나온 기술로, 하드웨어를 완전히 가상화하지 않는 기술이다. 게스트 OS의 커널을 일부 수정하여, 특권 명령이 수행될 때 Hypercall을 호출하여 하이퍼바이저가 실행되도록 하는 기술이다. 게스트 OS가 직접 하드웨어를 제어하지 않고, 하이퍼바이저가 제어하는 방식이다. 대표적으로는 Xen, KVM(Kernel-based Virtual Machine)이 있다.
앞서 전가상화 설명에 각기 다른 OS의 커널에서 사용하는 명령의 방식이 모두 달라 하이퍼바이저가 번역을 해서 하드웨어에 전달을 한다고 했는데, 반가상화 방식에서는 직접 각각의 가상 머신에서 번역을 해서 하이퍼바이저에 전달해주는 방식이다.
가상화 환경에서는 커널 대신 하이퍼바이저가 하드웨어를 관리하고 보호해야 하는 책임이 있기 때문에, 하이퍼바이저가 x86에서 제공하는 보호 링 중 가장 권한이 높은 링0에서 실행되도록 하고 -> 커널을 일부 수정하여 링0에서 실행되는 명령을 보다 낮은 권한인 링1에서 실행되도록 하고 -> 가상 환경과 실제 환경과의 클럭 동기화 같은 일부 명령의 경우 하이퍼바이저에게 요청하는 Hypercall이 발생하도록 수정한다. 전가상화에 비해 처리 속도는 빨라졌지만, Hypercall 요청을 할 수 있도록 각 게스트 OS의 커널을 수정해야 하기 때문에 오픈소스 OS가 아니면 반가상화를 사용하기 어렵다는 단점이 있다. 일례로 옛날에는 윈도우는 오픈소스가 아니라 Xen이 등장하기 전까지는 수정할 수가 없었고, 리눅스는 오픈소스이기 때문에 이 가상화 방식을 먼저 도입했다고 한다.
참고 블로그: https://mangkyu.tistory.com/87
4. 컨테이너형
컨테이너형은 위에 언급된 방식과 달리 하드웨어를 가상화하는 방식이 아니다. 위의 두 방식과는 다르게 OS를 가상화하지 않고 소프트웨어를 바로 가상화하는 기술이다. 프로세스를 격리시키기 때문에 가볍고 빠르게 동작한다. CPU나 메모리는 프로세스가 필요한 만큼만 추가로 사용되기 때문에 성능적으로도 거의 손실이 없다. 하나의 서버에 여러 개의 컨테이너를 실행하면 서로 영향을 주지 않고 독립적으로 실행되기 때문에, 마치 성능 좋고 가벼운 가상머신을 사용하는 느낌을 줄 수 있다.
3. 가상머신의 단점
가상머신을 사용하면 애플리케이션 실행환경이 분리되어 CPU, 메모리, 디스크 등 물리적 자원의 쿼터를 분배할 수 있다는 장점이 있지만, 다음과 같은 단점도 있다.
3-1. 대량의 메모리 필요
완전한 운영체제가 설치되어야 한다는 것은 그만큼 큰 메모리가 소모된다는 의미이기도 하다. 우분투 리눅스 서버를 올리려고 할 때, 메모리 상에 로드되는 내용만 해도 500MB 정도가 소모된다. 그렇게 되면 가상머신 10개에 똑같은 우분투 리눅스 서버를 올린다면 5GB 정도의 메모리가 사용된다는 것이다. 물리적인 메모리의 양이 부족하게 되면 쓰레싱(Threashing)이 발생하여, 결국 심각한 성능 저하를 초래할 수 있다.
3-2. CPU 성능 확보 문제
서로 다른 애플리케이션이 CPU 자원에 대한 요청을 할 때 경쟁이 발생하게 된다. 이 때 우선순위를 주어서 운영체제 내에서는 효율적으로 순위를 관리할 수 있는데, 가상화된 게스트OS 자체가 우선순위가 낮다면 물리적인 CPU 자원을 확보하기 어려워진다. CPU 자원 경쟁에 따라서도 성능 저하가 발생할 수 있다.
3-3. 시스템 운영에 대한 통합적인 지식 필요
일반적인 시스템에서는, 소프트웨어 개발과 시스템 운영이 분리되어 있었다. 하지만 가상머신 체제에서는 이미 만들어진 시스템 위에 시로운 시스템을 구축하는 개념이기 때문에 통합적인 시스템 운영 지식과 소프트웨어 개발 지식이 모두 갖추어져야 관리할 수 있다는 부담이 있다.
이러한 단점을 극복하기 위해 등장한 개념이 컨테이너다. 리소스와 기능이 제한적인 상황에서 가장 효율적으로 실행되고 운영될 수 있는 경량화된 애플리케이션이 바로 컨테이너다.
'BE' 카테고리의 다른 글
서버 스케일링에 대한 기초지식: 스케일업과 스케일아웃의 차이, 적용사례 (1) | 2022.06.19 |
---|---|
쿠버네티스의 개념, 역할, 컨테이너 오케스트레이션이 왜 필요한지, 장점 (0) | 2021.09.16 |
도커 이미지 레이어 / 도커 허브 / 도커 계층(layer) / 도커의 장점 4가지 (0) | 2021.09.15 |
도커(Docker)는 왜 도커인가요? 도커의 의미와 도커이미지가 무엇인지 정리 (0) | 2021.09.14 |
가상머신 vs 컨테이너 차이점 비교, 컨테이너를 사용해야 하는 이유 (0) | 2021.09.13 |