1. 가상화 이전의 운영 방식


가상화 기술이 개발되기 전에는 하나의 컴퓨터에 하나의 OS만 사용하는 것이 보편적인 운영 방식이었다. 이런 방식으로 운영하는 경우 해당 OS가 컴퓨터의 모든 리소스를 항상 full로 사용하기 어렵다. 때문에 리소스(CPU 등)들이 idle 상태(유휴 상태)로 낭비될 수 있다.

또한 서버 자원의 사용량을 예측하기가 쉽지 않고 증감폭이 크기 때문에 물리적으로 서버를 지속 확장하는 것은 한계가 있다. 이렇게 낭비되는 서버 자원을 보다 유연하게 사용하고 인프라 확장을 쉽게 하기 위해 하이퍼바이저 가상화 기술이 탄생했다.



2. Hypervisor VS Container


하이퍼바이저 가상화(Hypervisor Virtualization)

하이퍼바이저 가상화 기술의 도입은 앞서 설명한 하나의 컴퓨터에서 하나의 OS만 운영 하는 방식의 비효율을 해결한다. 하나의 컴퓨터에서 다수의 독립적인 OS를 운영한다. 하이퍼바이저는 하나의 컴퓨터에서 여러 OS를 동시 실행하기 위한 소프트웨어를 뜻한다. 하이퍼바이저 가상화는 아래와 같이 이루어져 있다.

  1. 하나의 물리적 서버 위에 존재하는 Host OS
  2. 그 위에 존재하는 다수의 독립적 OS들

이렇듯 하나의 물리적 서버 위 Host OS가 존재하고, 그 위엔 다수의 독립적 OS가 가상(virtually)으로 돌아갈 수 있도록 하는 것이 하이퍼바이저 가상화 기술이다. 각각의 OS는 서로에 대해 알지 못하며 Host OS조차 알지 못한다. 하나의 물리적 서버에서 실행되고는 있지만 완전히 독립적인 OS로 운영되는 것이다. 즉, 하나의 물리적 서버 리소스를 각각의 OS에 할당하여 효율적으로 사용할 수 있다.

컨테이너 가상화(Container Virtualization)

기존의 가상화 방식은 위에서 설명했듯 OS를 가상화하는 방식이었다. VMware, VirtualBox와 같은 대표적인 가상화 서비스도 이와 마찬가지로 Host OS위 다수의 Guest OS를 가상화하여 사용하는 방식이다. 하지만 이렇게 여러 Guest OS를 가상화하여 사용하는 방식은 사용법이 간단하지만 기술적으로 무거워지는(heavy-weight) 단점이 있다. 각각의 독립적인 OS를 실행시켜야 하기 때문에 부팅 시간이 길며 리소스 또한 많이 차지할 수밖에 없다. 따라서 실제 운영 환경에서는 사용이 어렵다.

이렇듯 추가적인 Guest OS를 설치하여 가상화하는 방식은 성능면에서 이슈가 있다. 이를 개선하기 위해 프로세스를 격리된 환경에서 실행하는 기술, 즉 컨테이너 가상화 기술이 등장했다.

리눅스에서는 이러한 방식을 리눅스 컨테이너라고 한다. OS를 가상화하는 것이 아닌, 운영체제 수준의 가상화 기술로 리눅스 커널을 공유함과 동시에 프로세스를 격리된 환경에서 실행한다. 때문에 하이퍼바이저 가상화 방식보다 더욱 가볍고 빠르게 동작한다.

컨테이너 가상화를 통해 하나의 서버에서 다수의 컨테이너를 실행하면 컨테이너끼리 서로 영향을 끼치지 않음과 동시에 독립적으로 실행된다. 실행중인 컨테이너에 접속하여 명령어 입력하거나 패키지를 설치하는 등 다양한 작업이 가능하다. 또한 CPU 혹은 메모리를 제한할 수 있으며 호스트 디렉토리에 마운트하여 내부 디렉토리로 사용할 수도 있습니다.

새로운 컨테이너를 만드는 데 들어가는 시간은 OS를 가상화하는 방식엔 비교할 수 없을 정도로 빠르다. 그리고 하나의 프로세스(컨테이너)를 실행하는데 필요한 모든 파일을 이미지로 만들어 제공한다. 때문에 컨테이너 가상화 방식을 사용하면 개발 단계부터 테스트 및 프로덕션에 이르기까지 일관된 환경을 유지할 수 있다.

profile
helloworld

0개의 댓글