하나의 컴퓨터에 하나의 os만 실행할 수 있다.
→ 하나의 서버만 실행할 수 있다.
→ 서버는 컴퓨터 자원에 대해 일부만 사용한다.
→ 나머지 자원은 사용할 수가 없다(하나의 os만 실행하기 때문에)
→ 그래서 다른 서버가 필요할경우 (ex.DB) 한대의 컴퓨터가 더 필요하다.
→ 비용이 상승한다
컴퓨팅 호스트의 필수 구성 요소
CPU(s) : 데이터 처리
RAM : 잠시동안의 저장
Network : 어디론가는 보내야 됨
Stroge : 있다고 보장 못함. 하이퍼바이저는 반드시 스토리지를 가상화 한다는 보장이 없음

| 항목 | VM (가상 머신) | Containers (컨테이너) |
|---|---|---|
| 가상화가 발생하는 수준 | 하드웨어에서 발생 → 하드웨어 가상화 머신을 구성하는 각 요소가 가상화된 인스턴스를 생성하는 역할 (프로세서, RAM, 스토리지, 네트워크, CPU, 카드 등) | 운영체제 수준에서의 가상화 하드웨어 위에 커널이 위치해 있고, 커널 위에 모든 컨테이너를 호스팅할 “host os”가 있다. 그 위에 여러 컨테이너를 올려 실행할 수 있다. |
| 격리 수준 | 머신 수준의 격리 하나의 컴퓨터에서 별도의 워크 스테이션처럼 보이는 것을 만들고, 하나에서 별도의 서버를 만들어 하나의 서버를 이용하여 다른 컴퓨터처럼 보이게 만든다. 각 가상환경은 다른 환경에 대해 알지 못한다 → 서로 독립적이다. | 프로세스 격리 동일한 운영체제와 커널을 공유한다. 하지만 각 컨테이너에는 자체 운영체제가 있고, 그 안에 실행에 필요한 라이브러리, 코드, 스크립트가 있다. 앱을 동시에 실행할 수 있으며 다른 컨테이너를 알 필요는 없다. |
| 리소스 다루는 방법 | 하이퍼바이저를 이용한다 | 네임스페이스: 컨테이너의 각 인스턴스에 자체 운영 체제의 모양과 사용자 지정을 허용한다. cgroup을 통해 자원의 양을 제한 및 모니터링을 통해 시스템 부담이 없는지 점검한다 → 리소스에 대한 세부적인 제어가 가능 |
| 이식성과 유연성의 차이 | 하드웨어의 무한한 유연성을 사용할 수 있다. | 무한한 이식성이 있다. 단일 파일로 정의되는 컨테이너가 있다. (Docker) |
What is JVM - Java Virtual Machine
What is a Hypervisor?
컨테이너와 VM : 차이점은 무엇입니까?
Virtualization Explained