가상화(Virtualization)란?
가상화(Virtualization)란, 컴퓨터나 네트워크의 자원을 논리적으로 구분하여 하나의 물리적 자원을 여러 개의 가상 자원으로 나누어 사용하는 기술을 말한다. 물리적인 하드웨어 장치를 논리적인 객체로 추상화하는 것이다. 즉, 하나의 컴퓨터를 여러명의 사용자가 동시에 사용할 수 있도록 여러대의 작은 컴퓨터로 분할시키거나, 반대로 여러 장치를 묶어 하나의 장치인 것처럼 사용자에게 제공할 수 있다.
운영 체제부터 애플리케이션에 이르기까지, 새로운 소프트웨어의 요구 사항은 점점 더 높아지고 있다. 더 많은 데이터, 더 높은 처리 능력, 더 큰 용량의 메모리가 필요해지는 것이다. 가상화를 사용하면, 하드웨어 리소스를 효율적으로 사용하여 비용을 단축할 수 있다.
가상화 기술에는 하이퍼바이저(Hypervisor)를 이용한 하드웨어 가상화, 컨테이너(Container)를 이용한 운영체제 가상화 등이 있으며, 이를 통해 다양한 분야에서 활용되고 있다. 예로, 클라우드 컴퓨팅, 서버 가상화, 네트워크 가상화, 모바일 가상화 등이 있다.
가상화의 장점
- 효율적인 리소스 사용(자본 및 운영 비용 절감)
- 다운 타임 최소화 또는 제거
- IT 생산성, 효율성, 대응력, 응답성 향상
- 애플리케이션과 리소스를 더 신속하게 프로비저닝
- 여러가지 보안 문제(바이러스)로 부터 자유로움
가상화의 종류
- 서버 가상화 : 물리적 서버를 여러 대의 가상 서버로 분할
- 운영 체제 가상화 : 컴퓨터 한 대로 여러 가지 다른 운영 체제를 실행
- 네트워크 가상화 : 한 개의 원래 네트워크로부터 가상의 격리된 네트워크를 생성
가상화의 종류에 대해서는 이 정도만 설명하려고 한다. 더 자세한 사항을 원한다면 다음을 참고하면 될 것 같다.
- https://www.redhat.com/ko/topics/virtualization
- https://www.vmware.com/kr/solutions/virtualization.html
가상화와 클라우드 컴퓨팅의 차이
가상화와 클라우드 컴퓨팅 모두 하드웨어에서 리소스를 분리하여 유용한 환경을 생성하기 때문에, 이 둘을 혼동하기 쉽다. 가상화를 통해 클라우드를 생성할 수는 있지만, 그렇다고 해서 가상화가 클라우드 컴퓨팅인 것은 아니다. 분명한 것은 클라우드가 되려면 가상화
기술이 필요하다는 것이다. 클라우드 컴퓨팅은 가상화를 기반으로 인터넷을 통해 컴퓨팅 리소스를 제공하는 것으로, 가상화보다 좀 더 상위의 개념으로 보면 된다.
주요 차이점은 가상화의 경우 하드웨어 조작이 수행된다는 것이고, 반면에 클라우드 컴퓨팅은 조작에서 파생 된 서비스를 말한다. 즉 가상화는 기술이고, 클라우드는 환경이란 것이 두드러진 차이점이다.
가상 머신(Virtual Machine)이란?
가상 머신은 하드웨어 가상화 기술을 이용하여 하나의 물리적 서버에서 여러 개의 가상 서버를 구축하는 기술 중 하나로, 물리적인 컴퓨터 상에 소프트웨어를 이용하여 논리적으로 만든 컴퓨터이다.
가상 머신은 하이퍼바이저(Hypervisor)라는 소프트웨어를 이용하여 물리적 자원을 가상 자원으로 분할하고, 각각의 가상 자원에 운영체제(OS)와 애플리케이션을 설치하여 실행할 수 있다. 이렇게 분할된 가상 머신들은 서로 독립적으로 동작하며, 각각의 가상 머신은 하나의 물리적 서버처럼 동작한다.
하이퍼바이저(Hypervisor)
- 물리적 머신에 설치하는 가상화 소프트웨어
- 가상 머신을 생성하고 구동
- 가상 머신과 기반 하드웨어 또는 호스트 운영 체제 간의 중개인 역할
- 물리적 환경에 대한 액세스를 조정하여, 여러 가상 머신에서 물리적 리소스의 해당 지분에 액세스할 수 있도록 함
가상 머신의 장점
- 가상 머신은 각각의 가상 환경에서 독립적으로 실행되기 때문에, 애플리케이션의 충돌을 방지할 수 있다.
- 하나의 물리적 컴퓨터에서 여러 운영 체제 환경을 실행할 수 있다.
- 서버의 관리와 운영을 편리하게 할 수 있다.
- 완벽히 격리되어있기 때문에 하나의 VM이 공격당해도 다른 VM들은 정상적으로 작동이 가능하다(공유되는 것이 없기 때문).
가상 머신의 단점
- 하나의 물리적 시스템에서 여러 가상 머신을 실행하면 성능이 불안해질 수 있다.
- 가상 머신은 물리적 컴퓨터보다 효율성이 떨어지고, 실행 속도도 느리다.
- 컨테이너보다 무겁다.
컨테이너(Container)란?
컨테이너는 운영체제에서 실행되는 리소스를 격리(Isolation)하여 별도의 서버인 것처럼 사용할 수 있게 하는 기술이다. 컨테이너들은 OS Kernel을 공유하며, 격리된 리소스는 운영체제 상에서 실행되는 유일한 프로세스인 것처럼 작동한다.
컨테이너는 소프트웨어 서비스를 실행하는데 필요한 프로그래밍 언어 런타임, 라이브러리와 같은 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지이다. 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해주며 컨테이너가 실제로 실행되는 환경에서 애플리케이션을 추상화할 수 있는 논리 패키징 메커니즘을 제공한다.
컨테이너의 장점
- 빠르고 쉬운 배포
- 민첩한 개발 : 개발자가 종속 항목과 환경에 미치는 영향을 신경 쓰지 않고 훨씬 더 빠르게 개발 가능하다
- 훌륭한 이식성 : 어느 환경에서나 컨테이너를 구동할 수 있다(폭넓은 구동 환경)
- 효율적인 운영 : 컨테이너는 경량이고, 필요한 컴퓨팅 리소스만 사용하면 되기 때문에 애플리케이션을 효율적으로 구동 가능
컨테이너의 단점
- 컨테이너 하나의 보안이 뚫리게 되면, OS Kernal이 위험해지는 것이기 때문에 모든 컨테이너가 위험해질 수 있다.
- 패키징이 까다로울 수 있다.
Container vs VM
컨테이너는 가상 머신과 마찬가지로 애플리케이션을 관련 라이브러리 및 종속 항목과 함께 패키지로 묶어 소프트웨어 서비스 구동을 위한 격리 환경을 만들어준다. 다음 그림을 보면 VM은 운영체제를 복제하는 반면, 컨테이너는 한 운영체제를 공유하는 것을 확인할 수 있다.
컨테이너와 가상머신은 다음과 같은 차이점을 가지고 있다.
- 컨테이너는 VM 보다 훨씬 더 경량이다.
- 컨테이너는 OS 수준에서 가상화되고, VM은 하드웨어 수준에서 가상화된다.
- 컨테이너는 OS 커널을 공유하고, VM에 필요한 것보다 훨씬 더 적은 메모리를 사용한다.
기술 질문/예상 질문
◾️ 가상화에 대해 설명해주세요
가상화(Virtualization)란, 컴퓨터나 네트워크의 자원을 논리적으로 구분하여, 하나의 물리적 자원을 여러 개의 가상 자원으로 나누어 사용하는 기술을 말한다. 하나의 컴퓨터를 여러명의 사용자가 동시에 사용할 수 있도록 여러 대의 작은 컴퓨터로 분할시키거나, 반대로 여러 장치를 묶어 하나의 장치인 것처럼 사용자에게 제공할 수 있다.
◾️ 가상화의 장점에 대해 설명해주세요
- 효율적인 리소스 사용(자본 및 운영 비용 절감)
- 다운 타임 최소화 또는 제거
- IT 생산성, 효율성, 대응력, 응답성 향상
- 애플리케이션과 리소스를 더 신속하게 프로비저닝
- 여러가지 보안 문제(바이러스)로 부터 자유로움
◾️ 가상 머신에 대해 설명해주세요
- 하드웨어 가상화 기술을 이용하여 하나의 물리적 서버에서 여러 개의 가상 서버를 구축하는 기술 중 하나
- 물리적인 컴퓨터 상에 소프트웨어를 이용하여 논리적으로 만든 컴퓨터
- 하이퍼바이저(Hypervisor)라는 SW를 이용하여 물리적 자원을 가상 자원으로 분할
- 가상 머신들은 서로 독립적으로 동작하며, 각각의 가상 머신은 하나의 물리적 서버처럼 동작
◾️ 컨테이너에 대해 설명해주세요
- 운영체제에서 실행되는 리소스를 격리(isolation)하여 별도의 서버인 것처럼 사용할 수 있게 하는 기술
- OS Kernel을 공유하며, 격리된 리소스는 운영체제 상에서 실행되는 유일한 프로세스인 것처럼 동작
- 컨테이너는 SW 서비스를 실행하는데 필요한 프로그래밍 언어 런타임, 라이브러리와 같은 항목과 애플리케이션 코드를 함께 포함하는 경량 패키지
- 운영체제 수준에서 CPU, 메모리, 스토리지, 네트워크 리소스를 쉽게 공유할 수 있게 해줌
◾️ 컨테이너와 가상 머신의 차이점에 대해 설명해주세요
- 컨테이너는 VM 보다 훨씬 더 경량이다.
- 컨테이너는 OS 수준에서 가상화되고, VM은 하드웨어 수준에서 가상화된다.
- 컨테이너는 OS 커널을 공유하고, VM에 필요한 것보다 훨씬 더 적은 메모리를 사용한다.
Reference