검수요청.png검수요청.png

가상머신

위키원
jingayoun (토론 | 기여)님의 2021년 1월 27일 (수) 10:28 판
이동: 둘러보기, 검색

가상머신(VM, Virtual Machine)이란 실재하는 컴퓨터상에 가상으로 컴퓨터를 구동시키는 것이다. 물리적인 하드웨어를 가상화하여, 하나의 하드웨어에서 여러 대의 컴퓨터가 구동되는 것처럼 에뮬레이션 하는 것이다.[1] 가상기계 또는 브이엠(VM)이라고도 한다.

개요

가상머신은 소프트웨어를 이용하여 특정한 컴퓨터 시스템을 에뮬레이션한 것을 말한다. 에뮬레이션(emulation)이라는 소프트웨어 기술을 사용하여, 하나의 컴퓨터가 다른 기종의 컴퓨터와 동일한 방식으로 작동하는 것처럼 보이도록 만드는 것을 말한다. 가상머신 기술을 이용하면 하나의 물리적 하드웨어시스템 위에 다수의 가상 환경을 구성하여, 복수의 운영체제(OS)나 시스템을 운영할 수 있다. 자바 가상머신을 JVM(Java Virtual Machine)이라고 한다.

특징

이전에는 중앙 처리 장치(CPU), 메모리 등의 한계로 가상 머신이 특별한 경우에만 사용되었지만, 시간이 갈수록 컴퓨터 사양이 높아져, 서버와 개인용 데스크톱에서 사용하는 경우도 많아졌다. 현재는 서버용 운영체제에 거의 필수적으로 가상화 기술이 포함되어 있다.[1] 가상머신에서 소프트웨어를 사용할 경우, 가상 머신 내부에서 작동하는 소프트웨어는 가상머신이 정해놓은 환경과 자원에 대한 제약을 받기 때문에 가상 세계를 벗어날 수 없다. 게스트 운영체제가 항상 포함되기 때문에 용량이 보통 수 GB에 해당하고, 애플리케이션을 실행할 때에도 먼저 가상 머신을 띄우고 자원을 할당한 다음, 게스트 운영체제를 부팅하여 애플리케이션을 실행시켜야 한다.

장점

가상 머신은 호환성이 높아 일반적인 컴퓨터처럼 작동하기 때문에, 기존 PC 또는 서버에서 하던 작업들을 그대로 할 수 있다. 그렇지만 가상 머신은 격리성을 띄고 있어 컴퓨터와는 엄연히 다르기 때문에, 하나의 가상 머신이 바이러스에 감염되더라도 다른 곳에는 피해가 가지 않는다. 한 번 구성된 가상머신은 캡슐화를 통해 복제되어 여러 컴퓨터 또는 하나의 컴퓨터에서도 여러 개로 복제하여 슬 수 있다. 이는 컴퓨터에 운영체제를 다시 설치할 필요를 줄여준다. 가상머신은 여러 종류의 하드웨어에서 사용하더라도 문제가 없기 때문에, 다양한 환경에서 사용된다. 일반적인 데스크톱 환경은 가상 머신의 격리성과 캡슐화의 큰 도움을 받을 수 있다. 새로운 프로그램이나, 금융 관련 프로그램을 설치하여 어떤 문제가 생길지 모를 경우, 가상머신을 사용하면 그런 위험에서 벗어날 수 있다. 서버환경에서는 앞에서 언급한 모든 장점을 사용할 수 있다. 기존 하드웨어에 구동되던 운영체제를 그대로 가상 머신으로 바꾸어 구동할 수 있고, 하나의 서버에 여러 가상 머신을 구동하여 하나의 하드웨어를 여러 서버로 구동시킬 수도 있다. 이러한 점들을 이용하여, 하드웨어에 영향을 받지 않고 서버를 쉽게 늘리거나 줄이고, 문제가 발생하였을 때 가상 머신을 손쉽게 복제하거나 수정하는 것으로 서버 환경을 관리할 수 있다는 장점을 갖고 있다. [1] 하나의 컴퓨터에서 여러 개의 가상 머신을 사용할 수 있기 때문에, 물리적 하드웨어 시스템에 대한 요구가 줄어 비용이 절감된다. 비슷한 맥락으로, 하드웨어를 보다 효율적으로 사용할 수 있고, 하드웨어 유지, 보수비용이 절감되고, 전력, 냉각의 수요가 감소한다. 가상화 하드웨어에는 장애가 발생하지 않기 때문에, 관리자는 가상 환경을 활용하여 백업, 재해복구(DR), 새로운 시스템 구축 및 기본 시스템 관리 작업을 간소화하여 수행할 수 있다.

단점

  • 하나의 하드웨어의 중단으로 인해서 자원이 과도하게 사용되거나 여러 가상머신(VM)에서 운영이 중단되는 등 통합에 따른 위험이 존재한다.

종류

시스템 가상머신

시스템 가상머신(system virtual machine)은 하드웨어 가상 머신이라고 하기도 하며, 각 운영체제를 실행하는 가상머신 사이의 기초가 되는 물리 컴퓨터를 다중화한다. 실제 기계의 대체재를 제공하고, 완전한 운영체계의 실행을 위해 요구되는 기능성의 수준을 제공한다. 시스템 가상 머신을 사용하면 여러 운영체제를 쓰는 환경이 여러 개의 운영체제가 각각의 가상머신 안에서 고립 된 채 같은 컴퓨터에서 존재할 수 있다. 가상 머신은 실제의 컴퓨터가 제공하는 것과 다른 형태의 명령어 집합 구조(ISA)를 제공한다.

하이퍼바이저

가상화를 제공하는 소프트웨어 계층은 가상머신 모니터 또는 하이퍼바이저라고 한다. 하드웨어를 가상화 하면서, 하드웨어와 각각의 가상 머신을 모니터링하는 중간 관리자 역할을 하기 때문에 가상화 머신 모니터(Virtual Machine Monitor, VMM)라고도 한다. 하이퍼바이저는 하드웨어를 공유하고 관리하기 위한 네이티브 실행을 이용하고, 독립된 다른 환경들을 같은 물리적인 기계에서 실행하기 위해서 허용한다. 현대의 하이퍼바이저들은 하드웨어의 도움을 받는 가상화를 이용하는데, 그것들은 주로 주 중앙처리장치(CPU)들의 특정 하드웨어 기능을 사용하여 효과적이고 완전한 가상화를 제공한다.[2] 하이퍼 바이저는 하드웨어 또는 호스트 운영 체제 위에서 실행할 수 있고 여러 가지 운영체제를 제공하기 위해서 멀티부팅의 어려움을 겪지 않아도 되고 각각은 서로 독립되어 있어서 서로 영향을 미치지 않는다.

  • 베어메탈(bare-metal)
네이티브(native) 가상화 라고도 한다. 하이퍼바이저가 하드웨어 바로 위에서 실행되는 방식으로, 하드웨어를 직접 제어하기 때문에 자원을 효율적으로 사용할 수 있고, 별도의 호스트 운영체제가 없으므로, 오버헤드가 적지만 여러 하드웨어 드라이버를 세팅해야 하므로 설치가 어렵다. Xen, 마이크로소프트 Hyper-Vm KVM등이 대표적이다. 하드웨어와 인터랙션하는 방식에 따라 전가상화(Full Virtualization), 반가상화(Para Virtualization) 이렇게 두 가지로 세분화 할 수 있다. 전가상화란 게스트 운영체제를 호스트 시스템과 완전히 분리하여 실행하고, 하드웨어 자원을 요청하기 위해, 반드시 하이퍼바이저가 중재해야 한다. 이때 게스트 운영체제란 가상 머신에 설치된 운영체제를 뜻하고, 실제 컴퓨터에 설치된 운영체제는 호스트 운영체제라고 한다. 각 운영체제는 관리 머신을 거쳐 하이퍼바이저와 통신하기 때문에, 중앙 처리 장치와 램처럼 입출력이 잦은 자원은 컨트롤하기 어렵다고 번거롭다는 장점이 있다. 이러한 단점을 개선하기 위해서 출현한 것이 반가상화다. 반가상화는 게스트 운영체제의 일부를 수정하여 하드워어가 자원을 직접적으로 요구할 수 있도록 하는 것이다. 반가상화 방식을 하드웨어를 완전히 가상화하지 않고, 게스트 운영체제의 커널을 일부 수정하여 하드웨어와 인터랙션할 수 있도록 해야 한다. 운영체제를 수정해야 하기 때문에, 게스트 운영체제가 윈도우일 경우 별도의 Tool을 이용해야한다는 번거로움이 있다. 대표적인 반가상화방식 소프트웨어인 Xen에서 게스트 운영체제는 Hyper Call이라는 명령어를 통해 하드웨어에 필요한 자원을 바로 하이퍼바이저에 전달하고, 하이퍼바이저는 바로 하드웨어를 제어한다. 각각의 운영체제가 한꺼번에 처리하여 하드웨어를 제어하는 전가상화 방식에 비해 성능이 좋다.
  • 호스트형(hosted)
호스트형 하이퍼바이저는 일반적인 소프트웨어처럼 호스트 운영체제 위에서 실행된다. 하드웨어 자원을 VM 내부게스트의 게스트 운영체제에 에뮬레이트 하는 방식이기 때문에 베어 메탈 방식에 비해 오버헤드가 크지만, 게스트 운영종류에 대한 제약이 없고, 데스크톱뿐 아니라, 노트북에서도 운영할 수 있다. 대표적으로 VMware sercer, VMware Workstation, Virtual box가 있다. 하이퍼바이저에 의해 구동되는 가상머신은 각 가상 머신 별로 독립된 가상의 자원을 할당받는다. 가상 머신은 논리적으로 분리되어 있어서 한 가상 머신에 오류가 발생해도, 다른 가상 머신으로 확산되지 않는다는 장점이 있다.[3]

프로세스 가상머신

프로세스 가상머신(process virtual machine)은 플랫폼에 독립적인 프로그램 실행 환경과 추상활르 제공하여 하나의 프로그램을 실행하도록 설계되었다. 운영체제 안에서 일반 응용 프로그램을 구동하고 단일 프로세스를 지원한다. 프로세스가 시작하고, 끝내기되어 파괴될 때 만들어진다. 목적은 어떤 플랫폼에서나 동일한 방식으로 실행되는 프로그램을 허용하고, 기초가 되는 하드웨어나 운영체제의 상세한 부분을 가져오는 독립 프로그래밍 환경을 제공하기 위함이다. 프로세스 가상머신은 하나의 단일 프로세스를 지원한다.

프로그램

VMware, Virtualbox, Parallels, Microsoft Virtual PC(가상 머신 또는 가상화를 제공하는 소프트웨어)

활용

가상머신은 자바 등 다양한 프로그래밍 언어와 블록체인 기반의 암호화폐 플랫폼에서 활용되고 있다.

  • 자바 가상머신(JVM; Java Virtual Machine)
  • 이더리움 가상머신(EVM, Ethereum Virtual Machine)
  • 트론 가상머신(TVM, Tron Virtual Machine)

비교

컨테이너

컨테이너화를 이끄는 두 가지 주도적인 힘은 컨테이너 가동에 널리 사용되는 툴인 도커, 그리고 여러 컨테이너를 관리하는 데 도움이 되는 구글 쿠버네티스다. 컨테이너는 호스트 OS의 커널을 공유하는 독립적인 코드 실행 환경이다. 컨테이너는 중복 게스트 OS 및 관련 시작 오버헤드를 건너뛰므로 가상머신에 비해 더 능률적이고 가볍다. 개발자는 동일한 하드웨어에서 가상머신에 비해 6~8배 더 많은 컨테이너를 실행할 수 있다. 컨테이너에도 단점은 있다. 비교적 새로운 접근 방법이므로 성숙한 기술에서 흔히 볼 수 있는 풍부한 관리 툴이 없고 따라서 설정과 유지보수 작업이 많이 필요하다. 또한 보안에 대한 우려도 있다. 가상머신에서는 게스트 이미지를 사용해서 호스트에서 호스트로 손쉽게 워크로드를 옮길 수 있지만 베어 메탈은 업그레이드와 이동이 더 어렵다. 베어 메탈 서버에서는 머신 상태 롤백이 쉽지 않은 일이다.

서버리스 컴퓨팅

전통적인 IaaS 클라우드 환경에서 고객은 먼저 가상머신, 스토리지, 데이터베이스, 관련 보안 및 관리 툴을 프로비저닝한 다음 가상머신에 애플리케이션을 로드한다. 서버리스 컴퓨팅에서는 개발자가 코드를 쓰고 클라우드 서비스 제공업체가 나머지 모든 부분을 처리한다. 개발자는 서버, 운영체제, 프로비저닝 또는 관리에 대해 생각할 필요가 없다. 물론 코드를 실행하는 실제 서버가 있지만 이는 클라우드 서비스 제공업체의 책임이다. 모놀리식 애플리케이션 대신 코드는 구체적인 함수로 세분화된다. 그 함수를 트리거하는 이벤트가 발생하면 서버리스 서비스(아마존 람다(Lambda) 등)가 함수를 실행한다. 서버리스 제공업체는 함수별로 고객에게 비용을 청구한다. 마이크로서비스/컨테이너 시나리오와 마찬가지로, 서버리스 컴퓨팅은 가상머신 계층을 건너뛰며 함수는 베어 메탈에서 실행된다. 현재 시점에서 서버리스 컴퓨팅은 비교적 미성숙한 기술이며 사용 사례도 제한적이다.[4]

각주

  1. 1.0 1.1 1.2 Namu(南無), 〈가상 머신이란 무엇인가, 그 장점이 무엇이길래?〉, 《시사공작소》, 2013-01-18
  2. 가상 머신〉, 《위키백과》
  3. 서버 가상화 기술의 진화:VM과 컨테이너〉, 《가비아 라이브러리》
  4. Neal Weinberg , 〈서버 가상화의 미래 : 컨테이너 및 서버리스 비교 진단〉, 《아이티월드》, 2018-07-13

참고자료

같이 보기


  검수요청.png검수요청.png 이 가상머신 문서는 하드웨어에 관한 글로서 검토가 필요합니다. 위키 문서는 누구든지 자유롭게 편집할 수 있습니다. [편집]을 눌러 문서 내용을 검토·수정해 주세요.