Virtual Machines (VMs)
- Infrastructure (인프라스트럭처)
- 물리적 하드웨어 또는 클라우드 기반 서버
예: 서버, 스토리지, 네트워크
- 물리적 하드웨어 또는 클라우드 기반 서버
- Hypervisor (하이퍼바이저)
- 하드웨어와 게스트 운영 체제(Guest OS) 사이의 추상화 계층: 가상 머신을 실행할 수 있는 환경을 제공
- 대표적인 하이퍼바이저: VMware, Hyper-V, KVM.
- Guest OS (게스트 운영 체제)
- 각 VM마다 독립적으로 설치된 운영 체제
- 여러 개의 운영 체제가 동시에 실행되므로, 각각의 VM은 고유한 OS를 가지고 독립적으로 동작
- Bins/Lib (바이너리/라이브러리)
- 각 애플리케이션이 실행되는 데 필요한 라이브러리와 바이너리 파일들
- Guest OS에 의존하기 때문에 각 VM마다 별도로 설치됨
- App (애플리케이션)
- 가상 머신 위에서 실행되는 애플리케이션
- 각 애플리케이션은 독립적으로 실행되지만, 하드웨어 자원 사용 측면에서 상대적으로 무거움
Containers
- Infrastructure (인프라스트럭처)
- VM과 동일한 물리적 하드웨어 또는 클라우드 서버
- Operating System (운영 체제)
- 호스트 OS가 컨테이너 환경에서 공유됨
- 모든 컨테이너가 동일한 OS 커널을 사용하므로 리소스 사용이 효율적
- Container Engine (컨테이너 엔진)
- 컨테이너를 관리하는 소프트웨어
- 컨테이너 실행, 관리, 네트워킹, 이미지 배포 등을 담당
- 대표적 컨테이너 엔진: Docker, containerd, Podman
- Bins/Lib (바이너리/라이브러리)
- 각 컨테이너는 필요한 바이너리와 라이브러리를 포함
- 호스트 OS와 커널을 공유하므로 크기가 가볍고 빠르게 실행됨
- App (애플리케이션)
- 컨테이너 내부에서 실행되는 애플리케이션
- 컨테이너는 경량화되어 있고, 서로 독립적이지만 OS 커널을 공유
VMs | Containers | |
---|---|---|
Guest OS 유무 | 각 어플리케이션마다 독립적인 Guest OS를 실행 | host OS 공유 |
리소스 효율성 | 더 많은 리소스 사용, 실행 속도 느림 | 경량화되어 빠르게 실행됨 |
격리 수준 | 높은 수준의 격리 제공, 보안 요구 사항이 높은 환경에 적합 | 프로세스 수준의 격리 제공, 효율성과 확장성이 필요한 환경에 적합 |
배포 속도 | 부팅 시간이 더 걸림 | 거의 즉시 시작됨 |
유연성 | 여러 운영 체제 실행 가능, 다양한 환경 지원 | 하나의 운영 체제 공유, OS 선택 제한 |
가상 머신은 격리와 독립성 강조
컨테이너는 경량성과 속도 강조
- VM이 적합한 경우:
- 다양한 운영 체제나 기술 스택을 사용하는 환경
- 강력한 격리 및 보안이 요구되는 시스템
- 리소스가 충분히 제공되는 환경
- Container가 적합한 경우:
- 빠른 애플리케이션 배포와 확장이 필요한 마이크로서비스 아키텍처
- 경량화된 환경에서 여러 애플리케이션을 실행해야 하는 경우
- DevOps나 CI/CD 파이프라인에서의 유연성과 속도 제공 시