본문 바로가기

IT/Infra(OS,Network,Storage)

가상 머신(Virtual Machine)과 컨테이너(Container)

어느 날 공부하다가 의문이 들었다. VM과 컨테이너의 차이가 큰가? 기업들은 왜 컨테이너 기반에서 솔루션을 개발할까?

 

내가 쓰기에는 VM이나 컨테이너나 비슷비슷 또이또이했다. 하지만 이건 내 생각이고 이론적으로 어떤 차이가 있는지 알아봤다.

 

🕋가상 머신(Virtual Machine)

내가 처음 VM이란 개념을 배웠을 때 VM은 가상화를 통해 컴퓨팅 환경 내에 따로 호스트 OS(Host OS)가 있고 게스트 OS(Guest OS)를 적용하여 사용할 수 있는 개념으로 알았다. 우선 생각한 개념은 어느 정도는 맞는 말이었다.

 

VM은 하이퍼 바이저(hypervisor) 기술을 통해 가상화를 실행한 환경이다.

이때 가상화를 구현하기 위한 하이퍼바이저 기술은 운영체제와 가상 머신의 리소스를 분리해 VM의 생성과 관리를 지원한다. 요약하자면 VM은 하이퍼 바이저 기술을 사용하여 만들어진 가상화한 환경이고, 하이퍼바이저를 사용하면 호스트 하드웨어와 VM이 독립된 OS를 가지게 되고 이는 시스템의 리소스를 활용할 수 있게 된다.

 

이런 하이퍼바이저에는 두 가지 유형이 있다.

 

첫 번째 유형은 네이티브(Native) 또는 베어 메탈(bare-metal) 하이퍼바이저라고 불리는 유형으로 하드웨어에서 직접 구동되어 게스트 운영체제를 관리한다. 여기서 생각해볼 수 있는 게 호스트 운영체제가 아니라 하드웨어가 가상화 환경의 게스트 OS를 관리하면 좋은 점은 무엇인가이다. 하드웨어에서 직접 구동되어 얻을 수 있는 장점은 별도의 OS를 거쳐 실행되지 않기 때문에  오버헤드가 적고 하드웨어가 직접 관리하기 때문에 효율적으로 리소스를 사용할 수 있다는 장점이 있다. 반대로 단점은 호스트 OS가 관리하는 것이 아니기 때문에  별도의 관리 기능이 필요하다.   

Bare-metal hypervisor

 

 

이러한 베어 메탈 하이퍼바이저에는 하드웨어를 가상화하냐 아니냐에 따라 전가상화(Full-Virtualization)반가상화(Para-Virtualization)로 구성된다.

 

하드웨어 또한 가상화하는 전가상화는 하이퍼바이저를 구동하면 DOM0라는 관리용 가상 머신이 실행되고 DOM0를 통해 모든 명령을 중재합니다. 이건 어떤 게스트 OS가 명령을 하든 모든 명령은 DOM0이라는 관리용 가상 머신을 통해 수행된다는 뜻이다. 이는 관리용 가상 머신으로 모든 명령을 중재하기 때문에 속도가 느리다는 점이 존재한다.

 

하드웨어를 가상화하지 않는 반가상화는 하이퍼콜(Hyper Call)이라고 불리는 인터페이스를 통해 하이퍼바이저에게 명령을 전달한다. 이를 통해 전가상화에 비해 성능이 빠르다고 볼 수 있다. 하지만 모든 OS에 대한 정보가 있는 것이 아니라서 오픈소스 OS가 아닌 이상 반가상화를 이용하기 힘들다는 단점이 존재한다.

 

 

두 번째 유형은 호스트 하이퍼바이저라고 불리는 유형으로 기본 운영체제(Host OS)가 있고 호스트 OS가 게스트 OS를 관리하는 방식이다.  내가 기존에 가지고 있던 VM의 개념은 호스트 하이퍼바이저였다. 

해당 방식은 베어 메탈 하이퍼바이저와 달리 OS위에 OS가 있는 방식이기 때문에 오버헤드가 클 수 있다.

Host hypervisor

 

 

🛳컨테이너 (Container)

컨테이너는 VM의 단점이었던 너무 큰 오버헤드, OS를 끼고 있기 때문에 느렸던 부팅 속도, VM 환경 간의 불일치 등을 개선하기 위해 나왔다. 컨테이너는 말 그대로 호스트 OS위에 컨테이너 엔진을 설치하고 각각의 공간을 컨테이너화 시켜 가상화하는 방식을 말한다. 

Container

 

Container와 VM 어떻게 다르냐고 묻는다면 일단 컨테이너에는 OS가 없다. OS가 없다는 얘기는 부팅의 속도가 빠르다는 것이다. 그래서 만약 트래픽으로 이슈가 생기거나 더 많은 컨테이너가 필요할 때 신속하게 컨테이너 개수를 늘리고 줄일 수 있다.  또한 게스트 OS가 없기 때문에 메모리를 많이 차지 않고 이미지의 크기가 작기 때문에 배포와 마이그레이션도 용이하다. 이로 인해 요즘 기업에서 선호하는 MSA기반의 아키텍처 설계가 가능해진다. 각각의 MSA 기반으로 개발 시 작게 쪼개진 컨테이너로 인해 버전이나 패치를 따로 할 수 있기 때문에 VM에서 발생했던 버전 이슈도 해결이 가능하다.

 

 

여기까지만 들으면 다 'VM 말고 Container가 훨씬 좋은 점이 많은데? 다들 기업에서 컨테이너를 쓰나요?'라고 물어보면 이건 아니다. 컨테이너 기반은 작은 이미지로 나눠서 배포를 하고 그것에 따라 연결되어야 하는 MSA기반이 제일 효율적이다. 그러나 이러한 MSA는 처음 회사에서 구현하기가 어렵다 인프라 구현을 할 줄 아는 사람이 있어야 하고 운영팀이 따로 있어야 개발팀과 함께 작업할 수 있기 때문이다. 결론은 어느 정도 규모가 있어야 한다. 반대로 VM은 관리가 용이하기도 하고 컨테이너에 비해 보안이 좋은 것으로 알려져 있다. 

 

 

대략적으로 공부한 내용을 적어봤는데 역시 세상은 많이 변한다. 내가 1학년 때만 해도(사실 1, 2학년 때는 공부를 안 해서 잘 모름....) 이런 개념이 있는지도 몰랐다.

세상은 변하고 변해서 규모가 있는 기업은 컨테이너 기반 개발이 대부분이다. 하지만 언젠가는 더 좋은 기술('좋은'은 너무 추상적이다..ㅎ)이 나오고 그걸로 개발을 이어나가겠지....! 나중에 계속 기술이 나와도 지식을 쌓고 트렌드가 변화해도 이전기술과 현재 기술의 이점을 알고 적용하는 프로그래머가 되고 싶다.   

 

보시고 틀린 내용이 있다면 말씀 부탁드립니다.😉

 

자료 출처

Red Hat - 하이퍼바이저란? https://www.redhat.com/ko/topics/virtualization/what-is-a-hypervisor 

농심 NDS - 가상화의 종류 3가지https://tech.cloud.nongshim.co.kr/2018/09/18/%ea%b0%80%ec%83%81%ed%99%94%ec%9d%98-%ec%a2%85%eb%a5%983%ea%b0%80%ec%a7%80/

'IT > Infra(OS,Network,Storage)' 카테고리의 다른 글

[5G] 5G Core Network  (2) 2021.01.26