1. 가상머신(Virtual Machine, VM)
실제 물리적인 컴퓨터(하드웨어) 위에 하이퍼바이저(Hypervisor) 가 존재한다.
이 하이퍼바이저가 여러 개의 독립적인 가상머신(VM) 을 띄우고 실행한다.
VM 은 필요한만큼의 자원이 할당된 가상의 컴퓨터로, 각각의 VM은 커널(OS)을 포함하여 독립적으로 실행된다.
즉, VM1 과 VM2 는 OS 는 물론이고, 데이터, 코드 등 전혀 공유하여 사용하지 않는다는 것이다.
클라우드 환경에서 VM 을 사용하는데 필요한 컴퓨팅 자원(서버, 네트워크, 스토리지) 을 가상화하여 제공하는데 가장 많이 사용된다.
VM 은 각각 독립적이기 때문에 각 VM 마다 최소 GB 단위의 공간이 필요하며, VM 수에 비례하여 늘게되며, 그로 인한 오버헤드가 상당하다.
Azure 에서는 Virtual Machines, AWS 에서는 Amaxon EC2(Elastic Compute Cloud), GCP 에서는 Compute Engine 을 VM 이라고 지칭한다.
*하이퍼바이저(Hypervisor) 란?
가상화를 가능하게 하는 소프트웨어로, 하나의 물리적 컴퓨터에서 여러 개의 가상 머신(VM)을 생성하고 관리할 수 있게 해준다.
대표적으로 VMware, VirtualBox 등이 있다.
2. 컨테이너(Container)
기존의 무겁고 느린 가상화방식을 해결하기 위해 프로세스를 격리하는 방안이 등장하였다.
하드웨어에 설치된 커널(운영 체제) 하나에 격리된 여러 개의 사용자 공간 인스턴스가 포함될 수 있도록 하는 가상화의 일종이다.
이러한 인스턴스를 컨테이너라고 부른다.
컨테이너는 애플리케이션 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 구성을 하나의 인스턴스에 패키징하는 기본적인 방법을 제공한다.
컨테이너는 커널(운영 체제) 하나를 공유하는데 이 덕에 OS 의 많은 자원들을 컨테이너들끼리 공유할 수 있다. (이동성이 좋음)
덕분에 부팅시간이 훨씬 짧고, 컨테이너 개수가 늘어나더라도 디스크 공간을 많이 차지하지 않는다.
컨테이너의 일반적인 크기는 MB 단위이다. (작고, 가벼움)
컨테이너는 매우 작기 때문에 일반적으로 수백개가 서로 느슨하게 결합되어 있으므로 컨테이너 오케스트레이션 플랫폼을 사용하여 컨테이너를 생성하고 관리한다.
*컨테이너 오케스트레이션이란?
대규모 애플리케이션을 배포할 수 있도록 컨테이너 관리를 자동화하는 프로세스이다.
대표적으로 Kubernetes, Docker Swarm 등이 있다.
오케스트레이션은 아래와 같은 기능을 수행한다.
• 컨테이너 자동 배치 및 복제
• 컨테이너 그룹에 대한 로드 밸런싱
• 컨테이너 장애 복구
• 클러스터 외부에 서비스 노출
• 컨테이너 추가 또는 제거로 확장 및 축소
3. 가상 머신 vs 컨테이너 환경 선택 기준
1) 컨테이너
경량화되고 빠른 변경과 빠른 배포가 필요한 환경(DevOps 및 CI/CD 작업) 에 적합하다.
또, 마이크로서비스를 패키징하여 사용하는 환경에도 좋으며, 동일한 OS 를 공유하는 다양한 작업에도 좋다.
*마이크로서비스란?
하나의 큰 애플리케이션을 여러 개의 작은 서비스로 나누어 개발하는 서비스이다.
각 서비스는 특정 기능을 담당하며 독립적으로 배포하고 운영된다.
하나의 서비스의 변경이 다른 서비스에 영향을 미치지 않는 장점이 있다.
2) 가상머신
보안이 중요하거나, 다양한 OS 를 동시에 운영이 필요한 환경(ex: 윈도우에서 리눅스 실행) 에 적합하다.
또, 기존 레거시 시스템(오래된 시스템) 을 유지해야하는 경우에도 좋다.
4. 가상 머신 vs 컨테이너 장,단점
1) 장점
컨테이너는 기본적으로 가볍기 때문에 부팅 시간이 가볍고, 더 적은 리소스를 사용하여 수정 및 반복이 매우 빠르다.
가상 머신은 완전 독립 실행형 시스템으로 격리되 실행이 되므로 하나의 가상 머신이 악용되어도 다른 VM 은 영향을 받지 않는다.
2) 단점
가상머신은 전체 스택 시스템을 포함하기 때문에 빌드 및 재생성에 많은 시간이 소요되며, 그만큼 스토리지 공간을 많이 차지한다.
컨테이너는 동일한 하드웨어 시스템을 공유하므로 하나의 컨테이너가 악용되면 해당 컨테이너를 공유하는 하드웨어에 영향을 미칠 수 있다.
참고 문헌
'Cloud' 카테고리의 다른 글
[Azure] SQL Managed Instance Audit 설정 및 Azure blob 에 저장하기 (0) | 2024.05.08 |
---|---|
[AWS] DMS 사용하여 데이터베이스 이관하기 (0) | 2024.04.29 |
[AWS] RDS SQL Server(MS-SQL) Agent Jobs 삭제 (0) | 2022.08.25 |
[AWS] RDS SQL Server(MS-SQL) 백업 및 복원하기 (0) | 2022.08.05 |
[AWS] RDS MySQL Audit Log 설정 (옵션 그룹, CloudWatch) (0) | 2022.07.11 |