본문 바로가기
Virtualization & Deployment

가상화 개념 정리

by 삼준 2023. 6. 28.
반응형

가상화(Virtualization)

하드웨어 리소스를 가상적으로 분리하여 여러 개의 가상 환경을 생성하고 관리하는 기술. 실제 하드웨어를 물리적으로 분리하거나 수정하지 않고도 가상의 리소스를 제공함으로써 리소스의 효율성, 이용률, 유연성을 향상시킬 수 있다.

=> 쉽게 말해서,  하드웨어 하나를 가상으로(소프트웨어를 통해) 나눠서 여러 대처럼 사용하게 하는 기술이다. 한 하드웨어가 구동될 때 한 환경만 실행된다면 남는 리소스가 생기기 마련인데, 이를 쪼개서 다른 환경을 운영하는데 사용하면 자연스레 효율성, 이용률이 올라가게 된다. (ex. 컴퓨터 한 대 + 리눅스 한 개 → 컴퓨터 한 대 + 리눅스 두 개 이상)

 

가상화의 주요 용도 및 효과

  • 서버 가상화(Server Virtualization): 단일 물리 서버에서 여러 개의 가상 서버를 실행하는 것. 가상화 레이어를 통해 하드웨어 리소스(프로세서, 메모리, 저장소 등)를 가상 서버에 할당하고, 각 가상 서버는 독립된 운영 체제와 애플리케이션을 실행한다. 이를 통해 물리 서버의 이용률을 향상시키고, 하나의 서버에서 여러 개의 서비스나 애플리케이션을 실행할 수 있으며, 리소스를 효율적으로 활용할 수 있다.
  • 데스크톱 가상화(Desktop Virtualization): 데스크톱 가상화는 사용자의 데스크톱 환경을 가상화하여 중앙에서 관리하고 사용자에게 제공하는 기술이다. 가상 데스크톱 인프라(VDI)를 통해 사용자는 가상 데스크톱 환경에 접속하여 필요한 애플리케이션과 데이터를 이용할 수 있다. 이를 통해 사용자의 데스크톱 환경은 중앙에서 관리되므로 보안성과 관리 효율성이 향상되며, 다양한 디바이스에서 유연하게 접속할 수 있다.
  • 네트워크 가상화(Network Virtualization): 네트워크 가상화는 가상 네트워크를 생성하여 가상 머신이나 컨테이너 등이 가상 네트워크 상에서 통신할 수 있도록 하는 기술이다. 가상화된 네트워크는 물리 네트워크를 가상적으로 분리하여 서로 독립적으로 운영하고 관리할 수 있으며, 네트워크 구성이 유연하고 확장 가능하게 된다.

가상화는 리소스 효율성, 유연성 향상에 더불어 운영 및 관리의 효율성을 향상시킬 수 있어서, 이를 통해 IT 인프라의 비용을 절감하고, 확장성과 가용성을 향상시킬 수 있다. 또한, 시스템의 격리와 보안성을 강화하여 애플리케이션 간의 충돌을 방지하고 데이터의 안전성을 보장할 수 있다.

 

가상화 방법들과 예시

  • 하드웨어 가상화(Hardware Virtualization)
    하드웨어 가상화는 가상 머신(VM)을 사용하여 하나의 물리적인 서버에서 여러 개의 독립된 가상 서버를 실행하는 방법이다. 가상화 소프트웨어인 하이퍼바이저(Hypervisor)를 통해 하드웨어 리소스를 가상 서버에 할당하고, 각 가상 서버는 독립적인 운영 체제를 실행한다. 예시로는 VMware vSphere, Microsoft Hyper-V, KVM(QEMU) 등이 있다.
  • 컨테이너 가상화(Container Virtualization)
    컨테이너 가상화는 애플리케이션을 격리된 환경에서 실행하는 가벼운 가상화 방법이다. 컨테이너는 독립된 프로세스로 실행되며, 호스트 시스템의 운영 체제 커널을 공유하여 리소스를 효율적으로 사용한다. 도커(Docker)가 대표적인 컨테이너 가상화 기술이며, 다른 예시로는 Kubernetes의 Pod 내에서 동작하는 컨테이너들도 컨테이너 가상화의 한 형태이다.
  • 애플리케이션 가상화(Application Virtualization)
    애플리케이션 가상화는 애플리케이션을 실행하기 위한 실행 환경을 가상화하는 방법이다. 애플리케이션 가상화는 애플리케이션과 해당 의존성을 패키징하여 독립적인 실행 파일로 만들고, 호스트 시스템과는 독립된 환경에서 실행된다. 예시로는 Docker의 애플리케이션 가상화 기능이 있으며, 다른 예로는 Microsoft의 App-V, VMware ThinApp 등이 있다.
  • 네트워크 가상화(Network Virtualization)
    네트워크 가상화는 가상 네트워크를 생성하여 가상 머신이나 컨테이너 등이 가상 네트워크 상에서 통신할 수 있도록 하는 방법이다. 네트워크 가상화는 물리적인 네트워크 인프라를 가상적으로 분리하고, 가상 네트워크 간에 가상 스위치, 가상 라우터 등의 가상 네트워크 장비를 사용하여 통신한다. 예시로는 VMware NSX, Cisco ACI, Open vSwitch 등이 있다.

 

가상머신 VS 컨테이너

각각 가상머신, 컨테이너를 사용한 예시

1. 가상머신(Virtual Machine, VM)

하드웨어 리소스를 가상적으로 분리하여 독립적인 컴퓨팅 환경을 생성하는 소프트웨어 구성이다. 가상머신은 물리적인 컴퓨터에서 실행되며, 하나 이상의 가상 하드웨어(프로세서, 메모리, 저장소 등)와 가상 장치를 갖추고 있다.

가상머신은 호스트 시스템(물리적인 컴퓨터) 위에 설치되고, 가상화 소프트웨어인 하이퍼바이저(Hypervisor)를 사용하여 하드웨어 리소스를 가상 머신에 할당한다. 하이퍼바이저는 가상 머신과 호스트 시스템 간의 상호작용을 관리하며, 가상 머신은 운영 체제(OS)와 애플리케이션을 실행하는 데 사용된다.

가상머신의 장점

  • 운영 체제 호환성: 가상머신은 호스트 시스템과는 독립적으로 운영 체제를 실행할 수 있다. 이는 서로 다른 운영 체제 환경을 구축하거나 테스트할 수 있는 유연성을 제공한다. 예를 들어, Windows 운영 체제를 실행 중인 호스트 시스템에서 Linux 가상머신을 실행할 수 있다.
  • 리소스 분리: 가상머신은 할당된 가상 하드웨어 리소스를 독립적으로 사용할 수 있다. 이는 가상머신 간에 리소스 충돌을 방지하고, 각 가상머신이 안정적으로 동작하도록 보장한다. 또한, 리소스의 할당량을 유연하게 조정하여 작업 부하에 맞게 조정할 수 있다.
  • 격리와 보안: 가상머신은 서로 독립된 환경에서 실행되므로, 한 가상머신의 문제가 다른 가상머신에 영향을 미치지 않는다. 이를 통해 애플리케이션 간의 충돌을 방지하고, 보안을 강화할 수 있다.
  • 이식성: 가상머신은 호스트 시스템의 하드웨어와는 독립적으로 구동되므로, 다른 호스트 시스템으로 이동하여 실행할 수 있다. 이는 애플리케이션의 이식성을 향상시키고, 가상 머신 이미지를 공유하여 배포 및 복원을 용이하게 한다.

가상머신은 개발 및 테스트 환경 구축, 서버 가상화, 애플리케이션 호스팅, 클라우드 컴퓨팅 등 다양한 분야에서 활용된다.

 

2. 컨테이너(Container)

컨테이너 기술은 소프트웨어를 실행하기 위한 가상화 기술로, 애플리케이션과 그 애플리케이션을 실행하는 데 필요한 모든 종속성 및 구성 요소를 포함하는 완전한 실행 환경을 제공한다. 이러한 컨테이너는 가볍고 이식성이 높으며, 동일한 환경에서 안정적으로 실행될 수 있도록 도와준다.

컨테이너 기술의 핵심은 컨테이너화된 애플리케이션을 호스트 운영 체제로부터 격리하는 것이다. 이를 통해 서로 다른 애플리케이션과 시스템 간의 충돌을 방지하고, 하나의 시스템에서 여러 개의 컨테이너를 실행할 수 있다.

가장 인기 있는 컨테이너 기술 중 하나는 Docker이다. Docker는 컨테이너를 만들고 실행하며 관리하는 데 사용되는 플랫폼이다. Docker는 애플리케이션 및 해당 종속성을 이미지로 패키징하여 컨테이너로 실행할 수 있도록 도와준다.

컨테이너의 장점

  • 경량성: 컨테이너는 가상화된 운영 체제와 필요한 애플리케이션 및 라이브러리만 포함하므로 매우 가볍고 빠르게 시작할 수 있다. 컨테이너는 호스트 시스템의 운영 체제 커널을 공유하므로 추가적인 운영 체제 인스턴스의 부담이 없다.
  • 이식성: 컨테이너는 호스트 시스템의 운영 체제와는 독립적으로 실행될 수 있으며, 필요한 환경과 종속성을 포함하고 있다. 이는 애플리케이션을 다른 환경으로 쉽게 이식하고 배포할 수 있음을 의미한다.
  • 확장성: 컨테이너는 가볍고 빠른 시작 및 중지가 가능하며, 필요한 만큼 복제하여 수평적으로 확장할 수 있다. 이는 높은 가용성과 확장성을 제공하며, 변동하는 작업 부하에 유연하게 대응할 수 있다.
  • 격리성: 컨테이너는 각각 독립적인 실행 환경을 가지고 있으며, 서로 간섭하지 않고 독립적으로 실행된다. 이는 애플리케이션 간의 충돌을 방지하고 보안을 강화할 수 있다.
  • 관리 용이성: 컨테이너는 이미지와 같은 표준화된 형식으로 패키징되어 있으므로 애플리케이션의 배포, 관리 및 업데이트가 용이하다. 또한, 오케스트레이션 도구를 사용하여 여러 컨테이너를 자동으로 관리할 수 있다.
  • 개발자 생산성: 컨테이너는 개발 환경과 운영 환경 사이의 일관성을 유지하므로 개발자는 애플리케이션을 더 빠르고 쉽게 개발하고 테스트할 수 있다. 개발자는 컨테이너 이미지를 사용하여 애플리케이션을 로컬 환경에서 개발하고, 동일한 이미지를 프로덕션 환경에서 실행할 수 있다.

컨테이너 기술은 마이크로서비스 아키텍처, 지속적인 통합 및 배포(CI/CD), 확장 가능한 클라우드 애플리케이션 등의 현대적인 개발 및 운영 방법과 잘 어울린다. 따라서, 많은 기업과 개발자들이 컨테이너 기술을 채택하여 애플리케이션을 보다 효율적으로 관리하고 운영하고 있다.

 

3. 가상머신과 컨테이너 비교

가상머신과 컨테이너는 모두 가상화 기술을 사용하여 애플리케이션을 실행하는 방법이다. 그러나 가상머신과 컨테이너는 다음과 같은 차이점이 있다.

  • 격리 수준: 가상머신은 하이퍼바이저를 사용하여 각각 독립된 운영 체제를 실행한다. 이는 물리적인 서버에서 여러 운영 체제를 실행하는 것과 유사한 환경을 제공한다. 반면에 컨테이너는 호스트 시스템의 운영 체제를 공유하여 가볍고 빠르게 실행된다. 컨테이너는 프로세스 격리를 통해 실행되며, 각 컨테이너는 독립된 파일 시스템 및 네트워크 공간을 가지고 있다. 이러한 차이는 보안에 있어서 차이가 생기는 원인이 될 수 있다.
  • 시작 속도: 가상머신은 전체 운영 체제 이미지를 시작해야 하므로 상대적으로 오랜 시간이 걸릴 수 있다. 반면에 컨테이너는 가볍고 빠르게 시작되며, 몇 초 내에 실행될 수 있다.
  • 자원 소비: 가상머신은 각각 독립된 운영 체제를 실행하므로 운영 체제와 애플리케이션에 필요한 모든 리소스를 포함해야 한다. 이는 가상머신이 더 많은 자원을 소비하게 되는 단점이 있다. 반면에 컨테이너는 호스트 시스템의 운영 체제와 리소스를 공유하므로 더 가벼우며, 효율적으로 리소스를 활용할 수 있다.
  • 이식성: 가상머신은 전체 운영 체제 이미지를 가지고 있기 때문에 호스트 시스템 간의 이식성이 높다. 반면에 컨테이너는 의존성을 포함한 애플리케이션과 필요한 라이브러리만 패키징되어 있으므로, 호스트 시스템의 환경에 따라 애플리케이션을 이식하기가 더 쉽다.
  • 관리 용이성: 가상머신은 독립적인 운영 체제를 가지고 있기 때문에 별도의 관리 및 업데이트가 필요하다. 컨테이너는 이미지로 패키징되어 있어 관리 및 배포가 용이하며, 오케스트레이션 도구를 사용하여 여러 컨테이너를 효율적으로 관리할 수 있다.

따라서, 가상머신은 더 격리된 환경과 높은 호환성을 제공하며, 컨테이너는 가볍고 빠른 실행 속도와 효율적인 리소스 관리를 제공한다. 선택은 사용하는 시나리오와 요구 사항에 따라 다를 수 있다.

반응형

댓글