Docker

[Docker] 가상화 기술 개념 (1)

아윤_ 2024. 7. 20. 00:20

 


도커에 대해 정확한 이해를 하고 싶어 공부를 시작하게 되었는데, 먼저 도커에 대해 알기 위해선 가상화 기술의 개념에 대해 짚고 넘어가야 한다. 따라서 이에 대한 개념을 정리해 보도록 한다.

 


 

가상화 기술

 

 가상

  • 실제로 존재하지 않지만 존재하는 것처럼 느껴지는 것

 

가상화 기술

  • 실제로 존재하는 컴퓨터는 아니지만 마치 컴퓨터가 있는 것처럼 만들어주는 기술
  • 가상화 기술을 사용하면 하나의 컴퓨터에서 여러 개의 컴퓨터를 실행시킬 수 있다.
  • 물리적인 환경에서 논리적인 컴퓨팅 환경을 만들 수 있는 기술

 

가상화 기술을 사용하는 이유

다음처럼 CPU 8코어와 64GB 메모리인 서버 한 대를 갖고 있다고 가정하자. 컴퓨터에서 평균적으로 1코어와 8GB 메모리를 소모하는 A 프로그램을 4개 실행하면, 프로그램이 소모하는 총 리소스는 4코어 32GB 메모리가 된다.

 

 

만약, 하나의 윈도우에서 A 프로그램을 4개 실행한다면 어떻게 될까? 실행된 OS도 리소스를 사용하기 때문에 1코어와 8GB 메모리를 소모한다고 가정해 보면 총 5코어 40GB 메모리를 사용하게 된다.

 

 

컴퓨터에 리소스가 남아있기 때문에 리소스 사용량에는 문제가 없어 보이고, 하나의 OS에서 프로그램이 모두 실행되고 있기 때문에 관리하기에도 편할 것 같아 보인다. 하지만, 이 상태에서 하나의 프로그램에 문제가 생기면 다른 프로그램에도 영향을 줄 위험이 있다.

 

또한, 하나의 프로그램의 사용량이 갑자기 증가해서 리소스를 모두 소모하게 될 경우 나머지 프로그램이 정상적으로 동작하지 않을 것이다. 기업 운영 환경에서 운영 중인 환경이 멈추는 것은 아주 큰 장애로 이어질 수 있기 때문에 소프트웨어를 하나의 OS에서 운영하는 것은 좋은 방법이 아니다.

 

가상화 기술을 사용하면, 한 대의 컴퓨터에 여러 개의 논리적인 환경을 만들 수 있고, 가상으로 만들어진 환경에 사용자가 직접 리소스를 분배할 수 있다. 리소스를 분배한다는 것은 하나의 가상 OS가 사용할 수 있는 리소스의 최댓값을 정해놓는 것을 말한다. OS의 개수가 5개로 늘어났기 때문에 총 리소스 사용량은 증가하게 된다. 하지만, 가상의 컴퓨터들은 논리적으로 격리되어 있기 때문에 앞서 말했던 문제들을 근본적으로 해결할 수 있다. 한 대의 프로그램에 에러가 발생해도 다른 프로그램에는 영향을 미치지 않는다. 또한, 프로그램 하나가 버그가 발생해 리소스 사용량이 급증해도, OS 한 대의 사용량이 제한되어 있기 때문에 하나의 환경의 문제로 끝나게 된다.

 

 

이처럼 가상화 기술을 사용하면, 각각의 소프트웨어는 여러 대의 컴퓨터를 사용하는 것처럼 안정적으로 실행할 수 있다.

 

최근 하드웨어의 성능은 점점 증가하고, 소프트웨어의 크기는 상대적으로 감소하는 추세를 보인다. 기업 입장에서는 낮은 사양의 컴퓨터를 여러 대 사용하는 것보다 높은 사양의 컴퓨터를 한 대 사용하는 것이 가격이나 설치 공간 등 여러 면에서 훨씬 경제적이다. 이런 이유들로 가상화 기술을 사용해 하나의 하드웨어를 효율적으로 활용하는 것이 엔터프라이즈 환경에서 필수적이다. 대부분의 IT 기업들은 운영 환경에서 이렇게 가상화 기술을 활용하고 있다.

 

 

하이퍼바이저 가상화


가상화 기술에는 하이퍼바이저 방식과 컨테이너 방식 두 가지가 존재하는데, 먼저 하이퍼바이저 가상화에 대해 알아보도록 하자.

 

하이퍼바이저란, 컴퓨터에 설치되는 프로그램이다. 하이퍼바이저는 OS의 프로그램으로 실행해서 가상화 환경을 관리할 수 있다. 하이퍼바이저를 사용해 가상 OS를 만들거나 가상 OS를 실행시키고 종료할 수 있다. 가상 OS를 만들면 사용자가 지정해 놓은 CPU나 메모리만큼 컴퓨터의 격리된 공간을 만들 수 있다.

 

그림을 보면, 현재 가상환경 1,2,3을 만든 다음 가상환경 1과 2만 실행한 상태이다. 가상환경은 일반적인 프로그램과 비슷한데, 가상환경을 만들 때마다 프로그램을 설치하는 것처럼 디스크 공간을 차지하고, 이 가상환경을 실행하면 프로그램을 실행시키는 것과 마찬가지로 사용자가 지정한 만큼의 CPU와 메모리를 사용한다. 가상환경 3번의 경우 실행 전에는 저장 용량만 차지하고 있다가 하이퍼바이저에서 실행 버튼을 누르면 환경이 실행되며 CPU와 메모리를 사용하게 된다.

 

 

HOST OS

  • 물리적인 서버에 설치되는 OS
  • 하이퍼바이저를 설치해서 가상 환경을 만들 수 있다
  • 물리적인 하드웨어와 직접 연결되어 있다

 

GUEST OS

  • 하이퍼바이저에 설치돼서 실행된 OS
  • HOST OS의 리소스를 나눈 논리적인 공간

 

가상 머신

  • 논리적으로 분리된 GUEST OS
  • 가상 머신에서 웹 서버, WAS, DB같은 서버 프로그램을 프로세스로 실행해서 운영

 

 

하이퍼바이저 동작 원리

 

프로세스는 정상적으로 실행되기 위해 CPU, 메모리 같은 리소스를 사용해야 한다. 프로세스가 하드웨어를 사용하기 위해서는 OS를 통해서만 사용할 수 있다. 하드웨어를 사용하기 위해 OS에는 커널이라는 중요한 도구가 설치되어 있는데 일반적인 프로그램인 웹 브라우저, 문서 편집 프로그램을 실행할 때도 실행되어 있는 프로세스들은 OS의 커널에게 하드웨어 리소스를 요청한다. 커널이라는 중간다리를 거쳐 요청이 가는 이유는 하드웨어의 리소스를 사용하는 것은 아주 복잡하고 조심히 다뤄야 하기 때문이다.

 

커널은 하드웨어에 이 사용 요청을 대신 전달해 주는 시스템 콜이라는 표준을 정해 놓았다. 프로세스들은 커널에 시스템 콜을 보내 하드웨어의 자원을 사용할 수 있다.

 

OS에는 대표적으로 윈도우, 리눅스, 맥 OS가 있는데, 각각의 종류는 다른 종류의 커널을 사용한다. 따라서 시스템 콜도 모두 다르다. 그렇다면, 가상화 기술을 사용해서 윈도우 호스트 OS에서 게스트 OS로 맥 OS나 리눅스 OS를 실행해야 한다고 생각해 보자. 

 

게스트 OS의 커널은 실제로 물리적인 하드웨어가 없기 때문에 리소스를 사용하려면 호스트 OS의 커널로 리소스 사용을 요청해야 한다. 하지만, 호스트 OS와 게스트 OS의 종류가 다르기 때문에 이 호스트 OS는 게스트 OS에서 전달받은 시스템 콜을 처리할 수 없다.

 

 

여기서 하이퍼바이저가 다른 커널 간의 언어를 통역해 주는 통역가 역할을 수행하게 된다. 따라서 하이퍼바이저를 사용하면 격리된 공간을 만들면서 호스트 OS와 다른 종류의 게스트 OS를 사용할 수 있다.

 

 

 

컨테이너 가상화

 

이번엔 컨테이너 가상화의 개념에 대해 알아보도록 하자. 도커는 컨테이너 가상화라는 새로운 종류의 가상화 기술과 관련이 있다. 컨테이너 가상화 기술은 현대의 애플리케이션 운영 환경에서 하이퍼바이저 방식보다 더 선호되는 가상화 기술이다.

 

컨테이너 가상화 방식이 더 선호되는 이유는 가볍고, 빠른 두 가지 핵심 장점 때문이다. 현대의 애플리케이션 운영 환경에서 가볍고 빠르다는 것은 아주 중요한 요구사항 중 하나이다. 소비자의 니즈가 빠르게 변화하기 때문에 애플리케이션도 이 요구사항에 맞춰서 빠르게 변화해야 하기 때문이다.

 

컨테이너 가상화는 하이퍼바이저 없이 커널의 자체 기술을 활용한 가상화이다. 컨테이너 가상화는 커널의 격리 기능을 활용하기 때문에 모든 컨테이너는 호스트 OS의 커널을 공유해서 사용한다. 이렇게 만들어진 각각의 격리된 공간을 컨테이너라고 부르며, 호스트 OS의 커널을 공유하는 것이 컨테이너 가상화의 가장 중요한 특징 중 하나이다.

 

하이퍼바이저는 게스트 OS와 호스트 OS의 커널이 독립적으로 존재하였다. 그리고 하이퍼바이저라는 소프트웨어가 중간에서 커널 간의 통신을 지원한다. 각각의 시스템 콜들이 하이퍼바이저들의 통역을 거쳐가기 때문에 요청이 거쳐가는 단계가 늘어나게 된다. 즉, 오버헤드가 크다. 하지만, 컨테이너는 호스트 OS의 커널을 그대로 사용하기 때문에 중간 단계가 따로 없어 하이퍼바이저 방식보다 상대적으로 오버헤드가 적다. 이는 하드웨어 리소스 사용 요청이 더 효율적으로 이루어진다는 것을 의미한다.

 

 

또한, 커널이 독립적으로 있다는 것은 이 커널을 실행하는 데 있어 시간이 더 필요하다는 것을 의미하는데, 각각의 컨테이너들은 자체적인 커널이 없고 호스트 OS의 커널을 그대로 공유하기 때문에 커널을 실행하는 시간 자체가 없어진다. 그래서 컨테이너 가상화는 하이퍼바이저 가상화보다 훨씬 더 부팅 속도가 빠르다는 장점이 있다. 이러한 두 장점들이 모던 애플리케이션의 요구사항을 충족시킬 수 있던 것이다.

 

 

하지만, 커널을 독립적으로 가지고 있는 가상머신에 비해 보안은 더 떨어진다는 점과 컨테이너는 호스트 OS의 커널을 공유하기 때문에 호스트 OS와 다른 OS는 실행할 수 없다는 단점도 있다.

 

정리

가상화 기술은 큰 서버를 나눠서 사용할 수 있는 기술로, 하이퍼바이저를 사용한 가상 머신 기술과 컨테이너 가상화 기술이 있다. 가상 머신 방식은 각각의 게스트 OS가 독립적인 커널을 가지기 때문에 구성하고 실행하기까지의 시간이 오래 걸리고, 하나의 게스트 OS가 차지하는 오버헤드가 크다는 단점이 있다. 반면 컨테이너 가상화의 경우 가볍고 빠르다는 특징 덕분에 현대 애플리케이션 운영에서의 요구사항을 만족시켜 더 선호되는 가상화 기술이 될 수 있었다.