IT Life

더욱 효율적인 ‘가상화’를 위해 우리에게 필요한 것은?

2015.07.30 09:32

IT 분야의 엔지니어라면 개발이나 운영 또는 유지 보수를 하면서 시스템 자원의 효율적인 사용에 대해 많은 고민을 하게 됩니다. 


예를 들어 개발자라면 하나의 시스템에 다양한 개발 및 테스트 환경이 갖춰졌으면 좋겠다는 생각을 하겠죠. 또한 시스템을 운영하거나 유지 보수를 하는 입장이라면 운영 시스템 자원을 더 효과적으로 관리할 수 있는 방법에 대해 고민할 것입니다. 


많은 사람들이 고민한 결과, 현재 다양한 기술들이 만들어져 도입되어 사용되고 있는데요. 어떠한 기술들이 있으며 장단점은 무엇일까요? 




시스템 자원의 효율적인 사용을 위해서 가장 많이 사용되는 방식의 1순위는 누가 뭐래도 ‘가상화’입니다. 가상화는 하나의 시스템에서 여러 시스템을 돌릴 수 있도록 만들어 주는 기술이라고 생각하면 되는데요. 최근 각광받고 있는 클라우드 컴퓨팅 환경에서도 가상화 기술은 단연 핵심 기술로 꼽힙니다.  


그리고 이러한 가상화 기술은 일반적으로 ‘하이퍼바이저(Hypervisor)’라는 기술을 이용하여 구동됩니다. 이 때의 하이퍼바이저는 시스템 위에 또 다른 시스템을 설치하고 운영할 수 있도록 가상 시스템 환경을 만들어 주는 기술인데요. 우리가 잘 아는 ‘VMWare’, ‘Hyper-V’, ‘XenServer’, ‘OpenSource Xen’, ‘KVM’, ‘PowerVM’ 등의 다양한 가상화 솔루션들이 하이퍼바이저 기반의 가상화 솔루션이라고 보시면 됩니다.


● ‘하이퍼바이저(Hypervisor)’ 기술을 이용한 가상화

하이퍼바이저를 구동시키는 기반 시스템(이것을 보통 ‘호스트 시스템’이라고 부릅니다) 위에 하이퍼바이저가 구동됩니다. 그리고 그 하이퍼바이저 위에 또 다른 시스템(이것을 보통 ‘Guest 시스템’, 혹은 ‘가상 시스템’이라 부릅니다)을 설치합니다. 


예를 들어 사용자가 시스템에 Windows 8.1을 설치하고 VMware 플레이어를 설치하여 사용한다고 가정해 봅시다. 이때는 Windows 8.1을 설치한 시스템이 호스트 시스템이 되고, VMWare 플레이어는 하이퍼바이저가 되는 것입니다. 그리고 사용자는 VMWare 플레이어 안에 가상 시스템으로 또 다른 Windows를 설치할 수도 있고 리눅스를 설치해서 사용할 수도 있습니다. 


이와 같은 하이퍼바이저를 통한 가상화의 장점은 호스트 시스템의 자원을 가상 시스템과 나누어 쓸 수 있다는 점입니다. 그러나 자원은 나누어 쓴다고 하더라도 가상 시스템에서 생긴 문제가 호스트 시스템에 영향을 미치지는 않는데요. 즉 시스템의 자원은 공유, 분리해서 사용하지만 서로의 영역은 침범하지 않기 때문에 예전부터 많은 엔지니어들은 VMware를 비롯한 다양한 하이퍼바이저 가상화 솔루션을 이용해 오고 있습니다.     


그렇다면 최근 하이퍼바이저 기술을 이용한 가상화 솔루션이 각광받고 있는 이유는 무엇일까요?


그 이유는 생각보다 간단합니다. 일반적으로 애플리케이션이나 서비스가 구동되는 시스템의 자원 사용률은 CPU나 메모리, 디스크 등을 다 합쳐도 평균 10%를 넘지 않습니다. 물론 시스템이 아주 바쁘게 돌아갈 때는 CPU 가동률이 50~60%, 디스크 사용률이 80~90%를 넘기도 하지만 일반적으로는 5~10% 정도라고 보면 되는데요. 서비스 제공자 입장에서는 이것이 낭비라고 느껴질 수 있는 것이죠. 


그 결과 놀고 있는 자원들까지 다 활용하자는 개념에서 나온 것이 ‘가상화’이며, 그 중심에 앞서 설명한 ‘하이퍼바이저’가 있으므로 이 기술은 주목받을 수 밖에 없는 상황인 것입니다.  


● ‘컨테이너’ 기술을 이용한 가상화  

최근 1년 사이에 가상화 분야에는 새로운 개념이 도입되었습니다. 사실 엄밀히 말하면 새로운 개념이라기 보다는 기존에 있었던 개념이 다시 주목받기 시작했다고 보시면 될 것 같은데요. 바로 ‘컨테이너’ 기술입니다. 이때 컨테이너는 보통 우리가 알고 있는 컨테이너 박스를 생각하시면 이해하기 쉬울 것 같습니다.


그리고 이 컨테이너 기술을 활용한 또 하나의 기술이 있으니 바로 ‘도커(Docker)’입니다. 그래서 도커 관련 세미나나 자료를 볼 때마다 많이 나오는 이야기 중 하나가 컨테이너의 개념인데요. 이것은 우리가 보통 화물 운송을 할 때 사용하는 컨테이너와 같은 개념으로, 동일한 크기의 컨테이너 박스 안에 운송할 짐들을 실어서 보내는 것을 시스템적으로 표현한 것입니다.  


현재는 리눅스 커널에서 제공하는 기술이지만 MS가 도커에 윈도우 컨테이너 기술을 적용하기로 했기 때문에 곧 윈도우에서도 이를 사용할 수 있을 것 같습니다.  


지금까지 ‘하이퍼바이저’와 ‘컨테이너’ 기술을 통한 가상화에 대해 살펴보았는데요. 이들의 차이점을 조금 더 살펴볼까요?


앞서도 언급했지만 하이퍼바이저는 가상 시스템을 만드는 기술입니다. 즉 시스템을 아예 새로 만든다고 보면 되는 것이죠. 그러므로 호스트 시스템이 리눅스라고 하더라도 윈도우를 가상 시스템으로 띄울 수 있는데요. 반대로 호스트 시스템이 윈도우라도 가상 시스템을 리눅스로 띄울 수도 있습니다. 또한 시스템 자체를 가상화하기 때문에 그 안에서 사용하고 있는 다양한 디바이스까지도 모두 다 가상화로 지원할 수 있습니다. 

 

<하이퍼바이저 시스템과 컨테이너의 시스템 비교>


그러나 컨테이너 기술은 조금 다릅니다. 하이퍼바이저가 시스템 가상화라면 컨테이너는 애플리케이션 가상화인 셈이죠. 하이퍼바이저는 해당 시스템을 구동할 수 있는 시스템 환경 자체를 독립적으로 제공해 주지만, 컨테이너는 애플리케이션을 실행할 수 있는 독립적인 환경을 제공해 주기 때문입니다.    


또한 하이퍼바이저가 다양한 디바이스들까지 가상화 방식으로 독립적으로 제공받는데 비해 컨테이너는 디바이스, 라이브러리, 바이너리(binary) 등을 공유해서 사용합니다. 즉 애플리케이션을 실행시키기 위해 딱 알맞은 정도만의 환경을 독립적으로 제공하는 것이죠. 물론 이 때 하나의 애플리케이션이 될 수도 있고 아니면 여러 애플리케이션들이 하나의 컨테이너 위에서 운영될 수도 있습니다.


그렇다면 왜 도커의 기반이 되기도 하는 컨테이너 기술은 더 주목받고 있는 것일까요? 반복하고 있지만, 가상화의 개념은 시스템 자원을 효율적으로 운영하자는 것에 그 목표를 두고 있습니다. 그리고 하이퍼바이저를 통한 시스템 가상화는 나름 호스트 시스템 자원을 효과적으로 사용하도록 해 주는 것도 사실입니다. 


그러나 그 하이퍼바이저 위에 올라가는 가상 시스템은 OS를 포함한 시스템 형식을 모두 갖추고 있기 때문에 호스트 시스템의 메모리나 CPU는 가상 시스템의 OS를 운영하는데 함께 사용이 됩니다. 


다시 말해 애플리케이션 하나를 가상 시스템에서 운영하려고 할 때, 애플리케이션에 들어가는 자원 소모율보다 오히려 그 가상 시스템의 OS를 구동하는데 들어가는 자원이 더 많이 소모되는 경우가 생길 수 있는 것이죠. 그러다 보니 하나의 호스트 시스템에서 여러 가상 시스템을 돌리게 되면 문제가 생기는 것입니다. 


반면 컨테이너 기술의 경우, 자원 소비율을 효과적으로 관리할 수 있는데요. 이는 해당되는 애플리케이션을 실행시킬 자원만 따로 독립적으로 할당해서 구동하기 때문입니다. 또한 구동될 때 가상 시스템은 OS 구동부터 시작하기 때문에 구동 자체가 느릴 수 있습니다. 


그러나 컨테이너의 경우 기본 호스트 시스템의 OS를 그대로 사용하면서 애플리케이션 부분만 독립적으로 구동하므로 상대적으로 빠릅니다. 따라서 더욱 효율적이고 빠른 가상화 방법으로 각광받고 있는 것입니다. 

앞서 컨테이너 기술이 주목받고 있는 이유를 살펴보았습니다. 하지만 사실 이것이 무조건 하이퍼바이저 기술보다 좋다고 단정지을 수는 없습니다. 하이퍼바이저 기술은 ‘시스템’ 가상화 기술이고 컨테이너 기술은 ‘애플리케이션’ 가상화 기술이라는 차이가 있기 때문이죠. 


즉 하이퍼바이저 기반의 가상화는 시스템적인 완전 분리가 가능하고 서로 다른 OS를 운영할 수 있습니다. 하지만 컨테이너 기술은 애플리케이션 가상화이기 때문에 동일한 실행 환경에서만 애플리케이션을 구동할 수 있습니다. 예를 들어 호스트 시스템이 리눅스라면 컨테이너 위에서 올릴 수 있는 애플리케이션 역시 리눅스에서 실행되는 애플리케이션이어야 하는 것입니다.


그리고 앞서 MS가 도커에 윈도우 컨테이너를 제공한다고 했는데요. 그렇다고 하더라도 리눅스에서 윈도우 애플리케이션을 실행시킬 수 있는 것은 아닙니다. 윈도우 위에서 윈도우 컨테이너를 통해 윈도우 애플리케이션을 가상화로 실행하는 것으로 봐야 합니다. 


즉 컨테이너 기술은 기본적으로 OS를 공유하기 때문에 OS 독립적인 하이퍼바이저와 달리 같은 계열의 애플리케이션만 사용할 수 있다는 점이 단점으로 꼽힙니다. 이것은 컨테이너 기술이 애플리케이션 실행 환경의 독립성만 제공하기 때문입니다.


이처럼 하이퍼바이저와 컨테이너 기술은 장단점이 있기 때문에 둘 중 무엇이 더 우월하다고 이야기하기는 어렵습니다. 그러나 전문가들은 안정성 부분에 있어서는 아직까지 하이퍼바이저 기술이 더 우위에 있다고 하는데요. 그 이유는 이 기술이 상당히 오랜 기간 동안 다져졌고 안정화되어 왔기 때문입니다. 반면 컨테이너 기술은 엄밀히 따지면 최근 도커가 각광을 받으며 표면적으로 드러났기 때문에 상대적으로 안정성 부분에서는 뒤쳐진다는 것이죠. 


그러나 곧 컨테이너 기술의 안정성 또한 확보될 것으로 보이는데요. 도커 이외에도 컨테이너를 활용하는 다양한 기술들이 등장한다면 그만큼 더욱 발전할 수 있지 않을까요? 그러나 무엇보다도 사용자의 입장에서 자신이 사용하고자 하는 애플리케이션의 성격에 맞는 기술을 골라 잘 활용하는 것이 가장 중요하지 않을까 하는 생각을 해 봅니다.  



글 l 이학준 (http://poem23.com/ 필명: ‘학주니’) 




Posted by IT로 만드는 새로운 미래를 열어갑니다 LG CNS
위로