교육, 커뮤니티 후기/인프런 교육

<인프런> 대세는 쿠버네티스 [초급] - No.3 VM vs Container

Somaz 2022. 7. 16. 17:18
728x90
반응형

Overview

이번 시간에는 VM(Virtual Machine)과 Container의 차이점에 대해 알아보려고 한다.
두 기술 모두 하나의 시스템에서 여러 애플리케이션을 분리된 환경에서 구동할 수 있도록 도와주는 가상화 방식이지만,
구조와 목적, 장단점에서 큰 차이가 있다.

 

특히 최근 클라우드와 DevOps 환경에서 경량화된 배포와 빠른 실행이 중요한 요소가 되면서
컨테이너(Container)가 주목받고 있다.
그럼 두 기술의 차이를 구조부터 성능, 보안까지 자세히 비교해보자.

 

 

 

 

 


 

 

VM vs Container

VM은 Host OS 위에 가상화시켜 주기 위한 Hypervisor, virtul box 등이 올라 간다. 
그 위에 Guest OS를 올려서, 여러 VM들을 만들어서 Applicatin, Serivce를 독립적으로 사용할 수 있다.

 

반면 Continer는 Host 위에 Continer가 올라가고 그 위에 이미지를 통해 바로 Serivce나 Application들이 올라가게 된다.
Container를 쓰는 이유는, OS 버전 차이에 따른 서비스 호환성을 해결해준다.

 

 

 

예를 들어보자면 아래의 사진과 같이, Linux6 버전에서 개발한 것들을 Linux 7로 옮겨 버리면 라이브러리 버전이 다르기 때문에 잘 작동하지 않을 수 있다. 따라서 나중에 Linux7버전을 쓰게 되더라도 Linux 6 image를 가져와 Container에 올리게 되면 쉽게 작동 시킬 수 있다. 

 

정리해보자면, docker와 같은 Container 가상화 솔루션들은 OS에 제공하는 자원 격리 기술을 이용을 해서 Container라는 단위로 서비스를 분리를 할 수 있게 만들어준다. 이걸 사용하면, Container 가상화가 설치되어 있는 OS에서는 개발환경에 걱정 없이 배포가 가능하게 됩니다.

 

시스템 구조적으로 Container는 한 OS를 공유하는 개념이고, VM은 각 각의 OS를 띄워야 하는 구조이기 때문에, Container가 훨씬 빠를 수 밖에 없다.

 

단점은, VM은 Window를 사용하고 있어도 Guest OS를 Linux를 사용할 수 있다. 그러나 Container는 Linux OS를 사용하고 있으면 Window VM을 띄울 수 없다.

 

또한, 보안적으로도 문제가 있다. VM은 하나의 VM이 해킹을 당해도 다른 VM으로 피해가 가지 않는다. 그러나, Container는 한개의 Container가 해킹을 당하게 되면, 다른 Container들도 피해를 입게 된다. 

 

 

 

다만, 이러한 문제들은 개선되가고 있다.

  • namespace : 커널 분리
  • cgoups : 자원 분리

 

 

 

 

항목 VM (Virtual Machine) Container (Docker 등)
구조 Hypervisor + Guest OS OS 공유, 가벼운 격리 환경
부팅 속도 수 분 수 초
자원 소비 상대적으로 많음 경량화됨
OS 호환성 Guest OS 자유롭게 선택 가능 Host OS와 동일한 커널 필요
보안 격리 강력한 보안 (완전한 분리) OS 공유로 보안 취약 가능성 있음
배포 및 이식성 무거워서 이동/복사 느림 이미지 기반으로 빠르고 쉬움
DevOps 적합성 적합하지 않음 매우 적합 (CI/CD, Microservices)
대표 기술 VMware, KVM, VirtualBox Docker, Podman, containerd, LXC

 

 

 

 

컨테이너 기술이 각광받는 이유

  • Immutable Infrastructure (불변 인프라)
    컨테이너는 "한 번 만든 이미지는 바뀌지 않는다"는 전제를 가지고 있다. 이를 통해 배포 환경에서의 예측 가능성을 높인다.
  • 마이크로서비스 아키텍처(MSA)
    하나의 서비스를 작은 단위로 쪼개어 운영할 때 컨테이너는 이상적인 선택이다. 서비스 간 독립성과 배포 속도가 핵심이기 때문이다.
  • 개발환경 통일성
    로컬 PC, 테스트 서버, 운영 서버의 환경 차이를 최소화할 수 있어 "내 컴퓨터에서는 잘 되는데…"를 줄여준다.

 

 

 

 

실무에서의 선택 기준

 

  • VM이 적합한 경우
    • 보안이 매우 중요한 금융/공공 환경
    • 서로 다른 운영체제(OS)를 동시에 사용해야 할 때
    • 독립적이고 중장기적으로 유지해야 할 서비스

 

  • 컨테이너가 적합한 경우
    • 마이크로서비스 또는 클라우드 네이티브 환경
    • CI/CD 자동화된 배포가 필요한 경우
    • 테스트 및 개발 주기가 빠른 서비스

 

 

 

 

 

 

하이브리드 구조 예시

현실에서는 대부분 "VM 위에 컨테이너" 형태로 혼합 구조를 사용한다.

 

예:

하나의 VM 위에 Docker가 설치되어 여러 개의 컨테이너가 올라가며, VM은 물리 서버의 리소스를 적절히 나누는 용도로 활용된다.

 

클라우드 환경(GCP, AWS, Azure)에서는 이 방식이 기본적으로 적용되어 있다.

 

 

 

 

 

보안 기술 향상 관

최근에는 컨테이너 보안도 강화되고 있음

  • gVisor, Kata Containers: 컨테이너 보안 격리를 VM 수준으로 강화해주는 기술
  • Pod Security Policy, SELinux, AppArmor: 쿠버네티스와 연계된 보안 정책
  • Image Scanning (취약점 스캐닝): Trivy, Clair 같은 도구로 이미지 내 보안 취약점 사전 확인

 

 

 

 

 

 

 


 

 

 

 

마무리

VM vs Container, 두 기술은 각자의 강점과 한계를 가지고 있다.

  • VM은 보안과 OS 호환성에 강점을 가지고 있고,
  • Container는 속도와 경량성, 배포 편의성 측면에서 우수하다.

 

특히 컨테이너는 Docker, Kubernetes와 같은 생태계와 함께 발전하며
마이크로서비스 아키텍처, CI/CD, DevOps 환경에서 핵심 기술로 자리잡고 있다.

 

물론, 컨테이너는 보안이나 시스템 자원 간섭 이슈 등의 단점도 존재하지만,
namespace, cgroups 같은 리눅스 커널 기술을 통해 점차 해결되어가고 있다.

 

결국 중요한 건 "어떤 상황에서 어떤 기술이 더 적합한가?"를 판단하는 것이다.
운영 목적, 보안 요구사항, 배포 전략에 따라 VM과 Container를 혼합하여 사용하는 하이브리드 환경도 흔히 사용된다.

앞으로 컨테이너 환경을 실습하며 VM과 어떤 차이점이 있는지 직접 체험해보자!

 

 

 

 

 


 

 

 

 

 

 

 

728x90
반응형