클라우드 컴퓨팅에 대해 제대로 이해하려면 먼저 클라우드 컴퓨팅의 기반이 되는 주요 개념 중 하나인 ‘가상화’를 이해한다.
가상화란?
클라우드 컴퓨팅에서 가상화는 운영 체제, 즉 OS 내에 가상 머신을 생성하는 하드웨어 가상화를 의미한다.
WHY 가상화?
일반적으로 OS를 실행하려면 각 OS를 전용 물리적 서버에서 실행해야 한다. OS 1개당 물리적 서버 1대가 필요하므로 여러 OS를 동시에 실행해야 하는 경우에는 OS를 모두 실행할 수 있도록 여러 대의 서버가 필요하다. 그리고 여러 OS를 실행하는 것은 비용이 많이 들기 때문에, 물리적 서버를 대량 구입해야 할 뿐만 아니라 구입한 서버의 운영 및 유지보수 (O&M) 비용도 증가하게 되기 때문에 가상화를 사용하려면 이런 아쉬운 점들을 보완할 수가 있다.
가상화를 이용하면 운영 체제를 기반 하드웨어로부터 분리할 수 있으므로 Windows나 Linux와 같은 여러 운영 체제를 하나의 물리적 머신에서 동시에 실행할 수 있다. 이러한 운영 체제를 게스트 OS (운영 체제)라고 부른다. 이런 원리로 가상화를 통해 시간과 비용을 절약할 수 있을 것이다.
가상화의 장점
- 유연성
동일한 하드웨어에서 여러 운영 체제를 동시에 실행할 수 있음
- 민첩성
한 물리적 서버에서 다른 물리적 서버로 파일이나 사진을 이동하는 것처럼 운영 체제 이동이 가능
- 내결합성
물리적 서버에 장애가 발생하면 관리 소프트웨어는 이용 가능한 다른 서버로 신속하게 인스턴스를 마이그레이션하여 물리적 하드웨어 장애가 발생했다는 것 조차 알 수 없도록 조치함
- 비용 효율성
필요한 물리적 서버 수를 줄일 수 있고 전기 요금과 운영 및 유지보수 비용도 절감할 수 있음
가상화는 어떻게 작동하는가?
물리적 서버 하드웨어도 물론 계속 필요하지만 해당 하드웨어에 운영 체제를 직접 설치하는 대신 하이퍼바이저 소프트웨어를 설치하여 하나의 물리적 시스템을 가상 머신이라는 분리된 여러 가상 환경으로 분할하는 방식을 구현할 수 있다.
하이퍼바이저는 무엇인가?
하이퍼바이저는 물리적 하드웨어에 설치된 소프트웨어 계층으로, 물리적 머신을 다수의 가상 머신으로 분할할 수 있도록 해준다. 때문에 하이퍼바이저를 이용하면 동일한 물리적 하드웨어에서 여러 운영 체제를 동시에 실행할 수 있다.
가상 머신에 설치된 운영체제(OS)는 게스트 OS라고 부르며 경우에 따라 인스턴스라고 부르기도 한다.
또한 하이퍼바이저가 실행되는 하드웨어는 호스트머신이라고 부른다.
가상 머신 매니저 (VMM : Virtual Machine Manager) 라고도 부르는 하이퍼바이저 관리 콘솔은 가상머신을 쉽게 관리할 수 있도록 도와주는 컴퓨터 소프트웨어이다.
하이퍼바이저 유형
하이퍼바이저는 제 1형 그리고 2형, 총 두 가지 유형으로 구분된다.
-제 1형 하이퍼바이저
제 1형 하이퍼바이저는 네이티브 또는 베어메탈 하이퍼바이저라고도 부르며, 하드웨어에 직접 설치되어 하드웨어를 게스트 OS를 설치할 수 있는 여러 개의 가상 머신으로 분할해준다. 가상 머신 관리 소프트웨어를 통해 해당 하이퍼바이저를 관리할 수 있다.
-제1형 하이퍼바이저의 장점
- 내결함성
물리적 서버에 장애가 발생하면 관리 소프트웨어는 이용 가능한 다른 서버로 신속하게 인스턴스를 마이그레이션하여 물리적 하드웨어에 장애가 발생했다는 것 조차 알 수 없도록 조치한다. 사용자는 어떤 서비스의 중단도 느낄 수 없으며 장애가 발생한 하드웨어는 유지보수 및 운영 직원이 편한 시간에 수리 또는 교체할 수 있다.
- RAM 용량 초과/동적 할당
서버에 여러 인스턴스를 실행할 때 가상 머신에 할당되는 전체 RAM을 기반 하드웨어의 전체 물리적 메모리 용량보다 큰 값으로 설정할 수 있다.
-제 2형 하이퍼바이저
제 2형 하이퍼바이저는 호스트 하이퍼바이저라고도 부르며 호스트의 운영 체제 내에 설치되기 때문에 하이퍼바이저 관리 콘솔이 필요하지 않다는 장점이 있다. 제 2형 하이퍼바이저는 RAM의 초과/동적 할당을 지원하지 않으므로, 가상 머신에 리소스를 할당할 때 주의해야 한다.
마지막으로 ‘컨테이너화’라는 개념에 대해 알아보도록 하겠다.
컨테이너화란?
컨테이너화는 커널 하나에 격리된 여러 개의 사용자 공간 인스턴스가 포함될 수 있도록 애플리케이션 수준에서 이루어지는 가상화의 일종이다. 이런 인스턴스를 컨테이너라고 한다. 컨테이너는 애플리케이션 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 구성을 하나의 인스턴스에 패키징하는 기본적인 방법을 제공한다. 컨테이너는 하드웨어에 설치된 커널(운영 체제) 하나를 공유한다.
컨테이너의 장점
- 가벼움
컨테이너는 서버에서 가상 머신보다 공간을 더 적게 차지하며, 시작하는 데에 일반적으로 몇 초 밖에 걸리지 않는다.
- 탄력성
컨테이너는 매우 탄력적이어서 리소스를 별도로 할당할 필요가 없다. 따라서 컨테이너는 서버의 리소스를 더 효율적이고 동적으로 사용할 수 있다. 컨테이너 하나에 대한 수요가 감소하면 여분의 리소스를 다른 컨테이너에서 사용할 수 있다.
- 밀도
밀도란 물리적 서버 한 대에서 동시에 실행할 수 있는 개체 수를 의미한다. 컨테이너화를 사용하면 호스트 서버의 리소스를 완전히 이용하지만 과다하게 이용하지 않는 밀집된 환경을 조성할 수 있다. 컨테이너는 전용 운영 체제를 호스트할 필요가 없으므로 컨테이너화는 기존 가상화와 비교하여 보다 밀집한 환경 조성이 가능하다.
- 성능
리소스 압박이 큰 경우 애플리케이션 성능은 하이퍼바이저를 사용하는 것보다 컨테이너가 훨씬 우수하다. 기존 가상화에서는 게스트 OS도 자체 메모리 요구 사항을 충족해야 하기 때문에 귀중한 RAM을 호스트에서 가져와야 한다.
- 유지관리 효율
운영 체제 커널이 하나 밖에 없기 때문에 운영 체제 수준에서 업데이트 또는 패치 작업을 한 번만 수행하면 변경 사항이 모든 컨테이너에 적용된다. 이를 통해 서버를 더 효율적으로 운영하고 유지/관리할 수 있다.
컨테이너 오케스트레이션이란 무언인가?
애플리케이션을 지원하기 위해 컨테이너를 배포하고 구성하는 것을 컨테이너 오케스트레이션이라고 하며, 컨테이너 오케스트레이션 도구를 통해 수행된다. 인기가 높은 오픈 소스 컨테이너 오케스트레이션 도구의 예로는 Kubernetes, Docker Swarm, LXC 등이 있다.
어떤 경우에 컨테이너를 사용해야 하는가?
빠르게 자주 변경하고 다시 배포해야 하는 거의 모든 애플리케이션이 컨테이너화에 적합하다. 마이크로서비스 아키텍쳐를 사용하는 애플리케이션의 경우에도 좋다.