3 분 소요

가상화 (Virtualization) : 컴퓨터 자원 (Computer Resource)의 추상화

  • 하드웨어 종속성 배제 : 물리적인 하드웨어 자원을 논리적인 단위로 나누고 이를 통합해 가상의 자원을 활용

리소스 가상화 (Resource Virtualization) : 컴퓨터 내 특정 자원만을 추상화

  • (가상의) 메인 메모리 : 가상 메모리 (Virtual Memory)
  • (가상의) 저장 장치 : 클라우드 (Cloud)
  • (가상의) 그래픽 카드 : vGPU
  • (가상의) 네트워크 : 가상 사설 네트워크 (Virtual Personal Network)

플랫폼 가상화 (Platform Virtualization) : 여러 개의 프로세스을 구동할 수 있는 플랫폼을 추상화

  • 에뮬레이션 (Emulation) : 다른 컴퓨터 프로세서를 위해 쓰인 운영체제와 응용 프로그램을 실행
  • 하드웨어 수준 가상화 (H/W-level Virtualization) : 하드웨어 플랫폼 위의 하이퍼바이저를 통해 가상 머신을 관리함
  • 운영체제 수준 가상화 (O/S-level Virtualization) : 운영체제의 커널이 각각의 격리된 프로세스를 동작시킴

  • 에뮬레이터 (Emulator) : 모든 하드웨어 자원의 동작을 소프트웨어로 대체

    • 애뮬레이터 안의 응용 프로그램은 물리 하드웨어가 아닌 인터프리터 프로그램을 통해 실행 (JVM)
      • 인터프리터 프로그램은 가상 머신에서 명령을 수행할 때마다 물리 CPU가 처리할 바이너리 코드 갱신
      • 물리 CPU는 에뮬레이터를 실행하기 위한 바이너리 코드를 해석해 이를 대신 실행
    • 장점 : 아키텍쳐가 전혀 다른 하드웨어 역시 가상화할 수 있음 (vs 하이퍼바이저 : 가상화할 수 없음)
    • 단점 : 물리 CPU 내에서 직접 실행할 때보다 비효율적임
  • 하이퍼바이저 (Hypervisor) : 다수의 가상 머신을 생성, 실행, 제어하는 논리적 플랫폼으로써의 프로세스

    • 하이퍼바이저 안의 응용 프로그램은 물리 하드웨어를 하이퍼바이저에 의해 제한적으로 사용
    • 하드웨어 가상 머신 (H/W Virtual Machine) : 하이퍼바이저에 의해 생성된 가상 환경

    • Type 1. 호스팅 (Hosting) : 하이퍼바이저가 일반 프로그램과 같이 운영체제의 소프트웨어 계층에서 실행
      • 장점 : 가상의 하드웨어를 구동하기에 호스트 운영 체제에 큰 제약이 없음
      • 단점 : 호스트 위에 게스트를 구동하는 방식이기에 비교적 큰 오버헤드 가짐 / GPU Passthrough 미지원
    • Type 2. 네이티브 (Native) : 하이퍼바이저를 하드웨어에 직접 임베디드되어 실행
      • 장점 : 별도의 호스트가 없어 오버헤드가 적음 / 하드웨어를 직접 제어하기에 효율적인 자원 사용 가능
      • 단점 : 자체적인 가상 머신에 대한 관리 기능이 없기에, 이를 위한 별도의 컴퓨터나 콘솔이 필요
      • 전가상화 (Full-Virtualization) : 하이퍼바이저에서 명령을 번역
        • 게스트가 요청한 명령은 하이퍼바이저가 실행한 관리용 가상 머신 DOM을 통해 하드웨어에 접근
        • 하이퍼바이저가 각 가상 머신들의 모든 명령을 번역하여 실행하고, 이에 맞게 자원을 할당해야 함
      • 반가상화 (Para-Virtualization) : 게스트 가상 머신에서 명령을 번역
        • 게스트 가상 머신이 하이퍼 콜 (Hyper Call)을 통해 하이퍼바이저에 명령을 직접 요청
        • 게스트 가상 머신의 운영 체제가 하이퍼 콜을 요청할 수 있게 커널을 수정해야 함

컨테이너 (Container) : 소프트웨어 패키지 (Software Package)의 추상화

  • 컨테이너는 프로세스가 동작하는 격리된 사용자 공간 인스턴스
    • 하나의 응용 프로그램과 그 응용 프로그램의 동작을 위한 라이브러리로 구성
  • 운영체제의 커널은 여러 개의 격리된 컨테이너를 갖추어 각각의 개별적인 서버처럼 동작시킴
  • 컨테이너를 사용하는 이유?
    • 가상머신보다 공간을 적게 차지하며, 재가동성 또한 가상머신보다 좋다.
    • 어플리케이선과 동일한 환경 세트로 개발되기에, 테스트에서 프로덕션까지의 이식성 및 일관성에 용이하다.
    • 동적으로 리소스를 사용할 수 있어, 별도의 리소스를 할당할 필요가 없다.
    • 서버의 밀도를 늪일 수 있다. 즉, 서버 내의 리소스를 과다하게 사용하지 않는 선에서 최적화가 가능하다.
    • 하나의 커널에서 동작하기에, 업데이트 및 패치 작업 등을 한번만 수행하면 모든 컨테이너에 적용된다.
  • 리눅스 컨테이너 (Linux Container) : 리눅스에서 제공하는 운영체제 레벨의 컨테이너 기술

    • 커널 레벨의 격리된 (isolated) 공간만 제공할 뿐, 개발 및 서버 운영에 필요한 부가 기능 부족

운영체제 A에만 가능한 a, 운영체제 B에만 가능한 b, 운영체제 C에만 가능한 c을 동시에 실행한다고 가정한다면,

  • 에뮬레이션 : 응용 프로그램 ×3 ⊂ 에뮬레이트 운영체제 ×3 ⊂ 에뮬레이터 ×3 ⊂ 호스트 운영체제 ⊂ 하드웨어
  • Type 1. 호스팅 : 응용 프로그램 ×3 ⊂ 게스트 운영체제 ×3 ⊂ 하이퍼바이저 ⊂ 호스트 운영체제 ⊂ 하드웨어
  • Type 2. 네이티브 > 전가상화 : 응용 프로그램 ×3 ⊂ 게스트 운영체제 ×3 ⊂ DOM ⊂ 하이퍼바이저 ⊂ 하드웨어
  • Type 2. 네이티브 > 반가상화 : 응용 프로그램 ×3 ⊂ 수정된 게스트 운영체제 ×3 ⊂ 하이퍼바이저 ⊂ 하드웨어
  • 운영체제 수준 가상화 : 컨테이너 프로세스 ×3 ⊂ 컨테이너 관리 소프트웨어 ⊂ 운영체제 ⊂ 하드웨어
  • Q. MacOS에서 도커로 윈도우 컨테이너를 실행하는 경우엔? : 응용 프로그램을 실행할 때 (O) 운영 체제를 실행할 때 (X)
    • 윈도우 컨테이너 ⊂ 가상 머신 (호스팅) ⊂ 컨테이너 관리 소프트웨어 ⊂ 운영체제 ⊂ 하드웨어

태그:

업데이트: