가상화 가상화 가상화 그놈에 가상화가 무엇인지 그리고 왜 하는지 알아보자
자원 (서버/메모리) 등을 논리적으로 통합/분할 하여 하나의 큰 자원 또는 여러 개의 자원으로 취급하는 기술이다. 반대로 여러 개를 하나처럼 사용하는 경우도 있다.
가상화 기술은 자원 활용도 향상, 비용 절감, 관리 효율화, 확장성, 유연성 제공 등의 여러 이점을 제공한다.
💡 자원을 효율적으로 이용한다..?
가상화를 쓰지 않는다면...
모든 어플리케이션이 같은 커널 공간(OS)에서 실행되므로 하나의 앱이 다른 앱에 영향을 줄 수 있다. 또한 OS마다 기본설정에서는 자원 제한이 없어 하나의 어플리케이션이 cpu/메모리를 독점할 수 있다.
운영체제의 역할 중 하나가 하드웨어 자원을 할당하는 것 이다. FIFO
, RR
등의 스케줄링 기법을 통해 cpu 자원을 분배하고 메모리는 페이징
, 가상메모리
등의 방법으로 I/O는 디바이스 큐
, DMA
를 통해 그러하다.
그런데 프로세스가 많아지면 ...
1. 스케줄링 부담 증가
운영체제의 스케줄러도 오버헤드가 커진다.
컨텍스트 스위칭 비용증가,
2. 자원 경합/교착상태
여러 프로세스가 동시에 CPU, 메모리, I/O를 요구하면서 충돌이 발생하면 교착상태가 일어난다.
3. 보안/격리 문제
하나의 OS 위에서 돌아가면 프로세스 간 접근 통제가 힘들 수 있다. 하나가 다운되면 전체 시스템에 영향을 끼칠 수 있다.
이처럼 하나의 OS에 올라오는 애플리케이션이 많아지면 OS 수준의 자원 스케줄링이 복잡해지고 충돌/교착 상태가 커지므로 이를 VM 또는 컨테이너 기반 가상화를 통해 애플리케이션 단위로 자원을 논리적으로 분리하고, 각 환경에 필요한 자원만 할당함으로써 자원 경합, 스케줄링 부담, 보안 문제 등을 구조적으로 완화할 수 있다.
문제 | 전통 방식 (하나의 OS) | 가상화 방식 (VM/컨테이너) |
---|---|---|
스케줄링 오버헤드 | 모든 프로세스를 OS가 직접 스케줄 | 각 VM/컨테이너 단위로 리소스를 분산해서 스케줄링 분산 |
자원 충돌 | 모두 같은 자원 영역 공유 | 각 VM/컨테이너에 자원 제한 (cgroup , vCPU , memory limit ) |
교착상태 | 락/세마포어 충돌 가능성 높음 | 각 컨테이너는 OS 수준에서 격리되어 교착 상태 위험 낮춤 |
보안 문제 | 프로세스 간 메모리 접근 가능성 존재 | 컨테이너/VM 간 커널/파일 시스템 분리 → 보안 강화 |
💡 우리는 가상화의 필요성에 대해서 이해했다. 가상화의 종류에는 무엇이 있을까?
크게는 하이퍼바이저 가상화
와 컨테이너 가상화
로 나눌 수 있을 것 같다.
먼저 하이퍼바이저 가상화
와 컨테이너 가상화
의 차이점에 대해서 살펴보고 둘에 대해서 각각 따로 자세히 포스팅을 하겠다.
하이퍼바이저 가상화는 물리적인 서버 1대를 여러 개의 가상 머신으로 분할하는 방식이다. 각 가상 머신은 독립적인 운영체제를 갖는다.
컨테이너 가상화는 애플리케이션과 그 실행 환경을 하나의 패키지로 묶어 OS의 커널 위에서 실행되도록 하는 방식이다. 컨테이너는 OS레벨에서 격리된 환경을 제공하며 당연하게도 운영체제를 포함한 가상머신(VM)보다 더 가볍고 빠르다.
특성 | 하이퍼바이저 가상화 | 컨테이너 가상화 |
---|---|---|
가상화 수준 | 하드웨어 수준 (가상 머신) | OS 수준 (컨테이너) |
격리 수준 | 운영 체제와 하드웨어 수준에서 격리 | 운영 체제 수준에서 격리 |
성능 | 상대적으로 성능 손실이 있음 | 빠르고 효율적, 성능 손실이 적음 |
자원 사용 | 각 VM이 운영 체제를 포함하므로 자원 소모가 큼 | 운영 체제를 공유하여 자원 소모가 적음 |
속도 | 시작 시간이 느림 (운영 체제 부팅 필요) | 빠른 시작 시간 (운영 체제 부팅 불필요) |
유연성 | 다양한 운영 체제에서 독립적으로 실행 가능 | 동일한 커널을 공유하므로 제한적 |
이 차이점을 잘 인식하여 사용환경과 목적에 따라 선택하여 이용할 수 있다.
참고
https://phum.co.kr/tech-36/
https://blog.omoknooni.me/81
https://worlf.tistory.com/141